@orderly.network/portfolio 2.6.0-alpha.0 → 2.6.1-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +20 -20
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10 -10
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +18 -18
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/layout/layout.widget.tsx","../src/layout/layout.script.tsx","../src/layout/layout.ui.tsx","../src/layout/layout.ui.mobile.tsx","../src/layout/context.tsx","../src/pages/overview/index.tsx","../src/pages/overview/assets/assets.script.ts","../src/pages/overview/assets/assets.ui.tsx","../src/pages/overview/assets/assetsHeader.tsx","../src/pages/overview/assets/assets.widget.tsx","../src/pages/overview/historyDataGroup/historyDataGroup.widget.tsx","../src/pages/overview/historyDataGroup/historyDataGroup.script.ts","../src/pages/overview/historyDataGroup/historyDataGroup.ui.desktop.tsx","../src/pages/overview/TransferHistory/transfer.widget.tsx","../src/pages/overview/TransferHistory/transfer.ui.tsx","../src/pages/overview/TransferHistory/column.tsx","../src/pages/overview/TransferHistory/useDataSource.script.ts","../src/pages/overview/helper/date.ts","../src/pages/overview/assetHistory/column.tsx","../src/pages/overview/assetHistory/assetHistory.script.ts","../src/pages/overview/assetHistory/assetHistory.ui.tsx","../src/pages/overview/assetHistory/assetHistory.widget.tsx","../src/pages/overview/assetHistory/assetHistory.ui.mobile.tsx","../src/pages/overview/distribution/distribution.widget.tsx","../src/pages/overview/distribution/distribution.ui.tsx","../src/pages/overview/distribution/column.tsx","../src/pages/overview/distribution/distribution.ui.mobile.tsx","../src/pages/overview/distribution/useDataSource.script.ts","../src/pages/overview/funding/fundingHistory.widget.tsx","../src/pages/overview/funding/fundingHistory.ui.tsx","../src/pages/overview/funding/column.tsx","../src/pages/overview/funding/fundingHistory.ui.mobile.tsx","../src/pages/overview/funding/useDataSource.script.ts","../src/pages/overview/historyDataGroup/historyDataGroup.ui.mobile.tsx","../src/pages/assets/convert.widget.tsx","../src/pages/assets/convert.script.ts","../src/hooks/useAccountsData.ts","../src/hooks/useAssetsAccountFilter.ts","../src/pages/assets/assets.ui.tsx","../src/pages/assets/convert.ui.desktop.tsx","../src/pages/assets/convert.column.tsx","../src/pages/assets/convert.ui.mobile.tsx","../src/pages/overview/assetChart/assetsChart.script.ts","../src/pages/overview/provider/overviewContext.tsx","../src/pages/overview/assetChart/assetsChart.ui.tsx","../src/pages/overview/shared/periodHeader.tsx","../src/pages/overview/shared/useAssetHistory.ts","../src/pages/overview/assetChart/assetsChart.widget.tsx","../src/pages/overview/performance/performance.ui.tsx","../src/pages/overview/performance/performance.script.ts","../src/pages/overview/performance/performance.widget.tsx","../src/pages/overview/main.tsx","../src/pages/overview/mobile/mobile.widget.tsx","../src/pages/overview/mobile/accountStatus.ui.mobile.tsx","../src/pages/overview/mobile/affiliateCard.ui.mobile.tsx","../src/pages/overview/mobile/portfolioHandle.ui.mobile.tsx","../src/pages/overview/mobile/portfolioVaule.ui.mobile.tsx","../src/pages/overview/mobile/settingRouter.ui.mobile.tsx","../src/pages/overview/mobile/traderCard.ui.mobile.tsx","../src/pages/overview/mobile/tradingRewardsCard.ui.mobile.tsx","../src/pages/overview/mobile/useRewardsData.script.ts","../src/pages/overview/provider/overviewProvider.tsx","../src/pages/feeTier/index.tsx","../src/pages/feeTier/feeTier.script.ts","../src/pages/feeTier/dataSource.ts","../src/pages/feeTier/column.tsx","../src/pages/feeTier/feeTier.ui.tsx","../src/pages/feeTier/feeTier.widget.tsx","../src/pages/feeTier/page.tsx","../src/pages/positions/page.tsx","../src/pages/orders/page.tsx","../src/pages/api/index.ts","../src/pages/api/apiManager.ui.tsx","../src/pages/api/apiManager.script.tsx","../src/pages/api/dialog/createApiKey.tsx","../src/pages/api/dialog/createdApiKey.tsx","../src/pages/api/dialog/deleteApiKey.tsx","../src/pages/api/dialog/editApiKey.tsx","../src/pages/api/apiManager.widget.tsx","../src/pages/api/apiManager.page.tsx","../src/pages/setting/index.ts","../src/pages/setting/setting.ui.tsx","../src/pages/setting/setting.ui.desktop.tsx","../src/pages/setting/setting.ui.mobile.tsx","../src/pages/setting/setting.script.tsx","../src/pages/setting/setting.widget.tsx","../src/pages/setting/setting.page.tsx","../src/pages/assets/index.tsx","../src/pages/assets/assets.widget.tsx","../src/pages/assets/assets.script.ts","../src/hooks/useAssetTotalValue.ts","../src/pages/assets/column.tsx","../src/pages/assets/assets.ui.mobile.tsx","../src/pages/assets/page.tsx","../src/pages/history/index.tsx","../src/pages/history/history.page.tsx"],"names":["useScreen","useEffect","useMemo","useState","useMediaQuery","useTranslation","useScaffoldContext","jsx","PortfolioLeftSidebarPath","usePortfolioLayoutScript","props","routerAdapter","current","setCurrent","t","items","hideSideBar","item","cn","Scaffold","SideBar","PortfolioLayout","children","leftSideProps","classNames","rest","LeftSidebar","expanded","setExpand","open","e","Flex","Box","MainNavMobile","BottomNav","createContext","useContext","LayoutContext","useLayoutContext","LayoutProvider","sideOpen","setSideOpen","memoizedValue","jsxs","PortfolioLayoutMobile","Fragment","PortfolioLayoutWidget","state","isMobile","overview_exports","__export","AssetHistory","AssetHistoryWidget","AssetWidget","AssetsChart","AssetsChartWidget","AssetsUI","DistributionHistoryDesktop","DistributionHistoryMobile","DistributionHistoryWidget","FundingHistoryWidget","HistoryDataGroupWidget","OverviewPage","OverviewProvider","PerformanceUI","PerformanceWidget","useAssetHistoryColumns","useAssetHistoryScript","useAssetsChartScript","useFundingHistoryColumns","useFundingHistoryHook","usePerformanceScript","useCallback","useAccount","useCollateral","useLeverage","useLocalStorage","usePositionStream","useWalletConnector","useAppContext","AccountStatusEnum","modal","LeverageWidgetWithDialogId","DepositAndWithdrawWithDialogId","DepositAndWithdrawWithSheetId","TransferDialogId","TransferSheetId","useAssetScript","connect","namespace","isMainAccount","totalValue","freeCollateral","wrongNetwork","disabledConnect","data","curLeverage","visible","setVisible","handleDomId","subAccounts","canTrade","onLeverageEdit","onDeposit","onWithdraw","onTransfer","Card","Divider","Grid","Either","Statistic","Text","EyeIcon","gradientTextVariants","EditIcon","EyeCloseIcon","AuthGuard","ArrowDownSquareFillIcon","ArrowLeftRightIcon","ArrowUpSquareFillIcon","Button","CardTitle","AssetsHeader","NoValue","AssetStatistic","connectWallet","useHistoryDataGroupScript","active","setActive","AssetHistorySideEnum","ArrowLeftRightSquareFill","FeeTierIcon","ServerFillIcon","TabPanel","Tabs","produce","DataFilter","formatAddress","AuthGuardDataTable","React","TokenIcon","toast","Badge","capitalizeString","useColumns","onCopy","sub","val","subAccount","TransferHistoryUI","dataSource","queryParameter","isLoading","selectedAccount","onFilter","side","dateRange","ALL_ACCOUNTS","MAIN_ACCOUNT","memoizedOptions","value","columns","draft","row","getDate","getMonth","getYear","set","useTransferHistory","usePagination","subtractDaysFromCurrentDate","differenceInDays","setHours","parseDateRangeForFilter","from","to","useTransferHistoryHook","today","date","setDateRange","page","pageSize","setPage","parsePagination","setAccount","setSide","meta","filteredData","onAccountFilter","filter","pagination","TransferHistoryWidget","accountState","AssetHistoryStatusEnum","capitalizeFirstLetter","Decimal","options","chainsInfo","isDeposit","isWeb3Wallet","txIdColumn","record","href","accountIdColumn","accountId","recoed","netAmount","useAssetsHistory","useQuery","useTokensInfo","d","tokensInfo","target","setTarget","startTime","endTime","assetData","assetMeta","assetLoading","transferData","transferLoading","transferMeta","findToken","token","ListView","ArrowRightShortIcon","EmptyDataState","AssetHistoryMobile","loadMore","getStatusText","status","renderHistoryItem","formattedAmount","getTxLink","chainInfo","chain","itemColor","amountView","statusView","timeView","txIdView","accountIdView","index","isValidating","type","TYPES","getTypeText","renderItem","useDistributionHistory","useDistributionHistoryHook","setType","useSymbolsInfo","FundingHistoryDesktop","symbols","symbol","FundingHistoryMobile","switchPaymentType","paymentType","useFundingFeeHistory","setSymbol","HistoryDataGroupDesktop","onTabChange","useIndexPricesStream","useSubAccountQuery","EMPTY_LIST","EMPTY_HOLDING","useAccountsData","holding","pick","ArrowDownShortIcon","TotalValue","onToggleVisibility","Icon","DepositAndWithdrawButton","mergedDisabled","AssetsTable","selectedAsset","assetsOptions","ALL_ASSETS","memoizedAssetOptions","ConvertHistoryWidget","useAssetsAccountFilter","setSelectedAccount","name","useAssetsMultiFilter","setSelectedAsset","accountFiltered","account","filteredChildren","child","useConvertScript","indexPrices","allAccounts","statusFilter","setStatusFilter","convertedAssetFilter","setConvertedAssetFilter","convertedAssetOptions","assetOptions","queryUrl","params","size","summary","dataRows","totalConversions","totalUSDCReceived","sum","totalFees","detailSum","detail","DataTable","SimpleDialog","useModal","Tooltip","ConvertedAssetColumn","convertedAssets","assets","tooltipContent","asset","useConvertColumns","onDetailsClick","qty","details","totalHaircut","convertId","useConvertDetailColumns","haircut","txId","venue","result","CONVERT_STATUS_OPTIONS","ConvertDetailsModal","onOpenChange","detailColumns","ConvertDesktopUI","convertState","dataFilter","SimpleSheet","ScrollIndicator","ConvertMobileUI","ConvertMobileItem","ConvertMobileField","label","rule","copyable","className","onClick","ConverHistoryItemDetailsDialog","hide","resolve","reject","HistoryDataGroupMobile","useDataTap","OverviewContext","useOverviewContext","assetHistory","_data","invisible","AssetLineChart","Select","subDays","format","useStatisticsDaily","zero","PeriodType","useAssetsHistoryData","localKey","isRealtime","periodTypes","period","setPeriod","getStartDate","periodValue","startDate","setStartDate","endDate","onPeriodChange","calculateLastPnl","inputs","list","i","calculate","lastItem","getUTCStr","mergeData","calculateData","realtime","calculatedData","aggregateValue","vol","pnl","roi","tail","dataTailIndex","lastAccountValue","start","end","_","year","month","day","PeriodTitle","periodLabel","PnLBarChart","PnlLineChart","volumeUpdateDate","LabelWithHint","PerformancePnL","CumulativePnlChart","hint","ctx","ENVType","useGetEnv","DepositStatusWidget","parseJSON","useChains","ChainNamespace","CopyIcon","ChainIcon","useCurrentStatus","statusText","EVMChainPopover","chains","key","MoreIcon","EVMChains","ShowAccount","onCopyAddress","currentNamespace","getLinkDeviceStorage","leftNode","rightNode","bgClass","bg","AccountStatusMobile","description","rootClass","linkDeviceStorage","isNumber","AffiliateIcon","ChevronRightIcon","commifyOptional","AffiliateCardMobile","CalendarMinusIcon","PortfolioHandleMobile","onGotoHistory","PortfolioValueMobile","SettingFillIcon","SettingRouterMobile","TraderMobileIcon","TraderCardMobile","TradingRewardsIcon","OrderlyIcon","EsOrderlyIcon","TradingRewardsCardMobile","curEpochInfo","curEpochId","isOrder","onClaim","event","Countdown","targetTimestamp","timeLeft","setTimeLeft","intervalId","now","distance","days","hours","minutes","seconds","CountDownItem","useRef","useAllBrokers","useConfig","useCurEpochEstimate","useEpochInfo","useGetClaimed","usePrivateQuery","DistributionId","TWType","useRewardsData","totalOrderClaimedReward","curEpochEstimate","brokers","mutate","epochList","brokerId","brokerName","lastStete","timerId","useRewardsDataScript","referralInfo","isSignIn","MobileOverview","portfolioValue","unrealPnL","unrealROI","toggleVisible","hasSubAccount","rewardsData","layoutContext","onRouteChange","env","goToClaim","url","navigateToPortfolioHistory","feeTier_exports","FeeTierPage","useAccountInfo","numberToHumanStyle","useFeeTierColumns","volume_min","volume_max","volume_node","useFeeTierScript","dataAdapter","tier","setTier","cols","volumeStatistics","getFuturesCurrentTier","feeList","futures_taker_fee_rate","futures_maker_fee_rate","takerRate","makerRate","FeeTier","takerFeeRate","makerFeeRate","FeeTierHeader","FeeTierTable","FeeTierHeaderItem","top","setTop","parentRect","elementRect","offsetTop","onRow","config","FeeTierWidget","page_exports","PositionsPage","LiquidationWidget","PositionHistoryWidget","CombinePositionsWidget","PositionsWidget","tab","setTab","OrdersPage","OrdersWidget","sharePnLConfig","ordersRef","onDownload","TooltipIcon","ref","api_exports","APIManagerPage","APIManagerWidget","PlusIcon","AuthGuardEmpty","AuthGuardTooltip","useApiKeyManager","useApiManagerScript","filterTags","keyStatus","showCreateDialog","setShowCreateDialog","showCreatedDialog","setShowCreatedDialog","generateKey","setGenerateKey","canCreateApiKey","keys","generateOrderlyKey","setIPRestriction","removeOrderlyKey","resetOrderlyKeyIPRestriction","refresh","error","curPubKey","setCurPubKey","pubKey","onCreateApiKey","onReadApiGuide","hideCreateDialog","doCreate","ipRestriction","scope","createdSuccess","res","ip","secretKey","capitalizeFirstChar","generateKeyRes","err","hideCreatedDialog","onCopyApiKeyInfo","doConfirm","doDelete","curKey","doEdit","future","onCopyAccountId","onCopyApiKey","onCopyApiSecretKey","onCopyIP","keyList","filterTag","filterCurKey","verifyIP","accountStatus","userId","str","DEFAUL_ORDERLY_KEY_SCOPE","enabledAssetPermission","CreateAPIKeyDialog","ipText","setIpText","read","setRead","trade","setTrade","setAsset","setHint","scopes","Checkbox","CreatedAPIKeyDialog","Trans","DeleteAPIKeyDialog","setOpen","onDelete","formatKey","EditAPIKeyDialog","onUpdate","APIManager","AccountInfo","Subtitle","KeyList","EditButton","DeleteButton","setting_exports","SettingPage","SettingWidget","Switch","SettingDesktop","LanguageSwitcherWidget","SettingMobile","Setting","useDebouncedCallback","useMutation","useSettingScript","update","isMutating","checked","setChecked","updateCheckState","setMaintainConfig","maintenance_cancel_order_flag","canTouch","assets_exports","AssetsPage","getIndexPrice","calculateAssetValue","indexPrice","calculateTotalHolding","total","hol","assetValue","useAssetTotalValue","mainTotalValue","subTotalValue","find","useAssetsColumns","onConvert","id","ORDERLY_ASSETS_VISIBLE_KEY","useAssetsScript","filtered","enhancedFiltered","accountData","enhancedChildren","tokenInfo","collateralRatio","collateralContribution","handleTransfer","handleConvert","showTransfer","assetsColumns","openDepositAndWithdraw","viewName","AssetsTableMobile","memoizedAssets","AccountTag","AssetMobileItem","AssetsWidget","history_exports","HistoryPage","HistoryWidget"],"mappings":"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","sourcesContent":["import { FC, PropsWithChildren } from \"react\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { usePortfolioLayoutScript } from \"./layout.script\";\nimport { PortfolioLayout, PortfolioLayoutProps } from \"./layout.ui\";\nimport { PortfolioLayoutMobile } from \"./layout.ui.mobile\";\n\nexport type PortfolioLayoutWidgetProps = PortfolioLayoutProps;\n\nexport const PortfolioLayoutWidget: FC<\n PropsWithChildren<PortfolioLayoutWidgetProps>\n> = (props) => {\n const state = usePortfolioLayoutScript({\n current: props.leftSideProps?.current,\n });\n const { isMobile } = useScreen();\n\n return (\n <>\n {isMobile ? (\n // @ts-ignore\n <PortfolioLayoutMobile {...state} {...props} />\n ) : (\n <PortfolioLayout {...state} {...props} />\n )}\n </>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useMediaQuery } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { SideMenuItem, useScaffoldContext } from \"@orderly.network/ui-scaffold\";\n\nexport enum PortfolioLeftSidebarPath {\n Overview = \"/portfolio\",\n Positions = \"/portfolio/positions\",\n Orders = \"/portfolio/orders\",\n Assets = \"/portfolio/assets\",\n FeeTier = \"/portfolio/feeTier\",\n ApiKey = \"/portfolio/apiKey\",\n Setting = \"/portfolio/setting\",\n History = \"/portfolio/history\",\n}\n\nexport type UseLayoutBuilderOptions = {\n current?: string;\n};\n\nexport const usePortfolioLayoutScript = (props: UseLayoutBuilderOptions) => {\n const { routerAdapter } = useScaffoldContext();\n const [current, setCurrent] = useState(\n props.current ?? routerAdapter?.currentPath ?? \"/portfolio\",\n );\n const { t } = useTranslation();\n\n useEffect(() => {\n if (props.current || routerAdapter?.currentPath) {\n setCurrent(props.current || routerAdapter?.currentPath || \"/portfolio\");\n }\n }, [props.current, routerAdapter?.currentPath]);\n\n const items = useMemo(() => {\n return [\n {\n name: t(\"common.overview\"),\n href: PortfolioLeftSidebarPath.Overview,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.24316 2.19727C3.58641 2.19727 2.24316 3.54044 2.24316 5.19727V12.6973C2.24316 14.3541 3.58641 15.6973 5.24316 15.6973H12.7432C14.3999 15.6973 15.7432 14.3541 15.7432 12.6973V5.19727C15.7432 3.54044 14.3999 2.19727 12.7432 2.19727H5.24316ZM5.24316 3.69727H12.7432C13.5719 3.69727 14.2432 4.36882 14.2432 5.19727V12.6973C14.2432 13.2484 13.9319 13.734 13.4894 13.9947C13.3454 12.2235 11.4427 11.1973 8.99316 11.1973C6.54366 11.1973 4.60341 12.251 4.48566 13.9997C4.04241 13.739 3.74316 13.2484 3.74316 12.6973V5.19727C3.74316 4.36882 4.41441 3.69727 5.24316 3.69727ZM8.99316 5.19727C7.54341 5.19727 6.36816 6.37252 6.36816 7.82227C6.36816 9.27202 7.54341 10.4473 8.99316 10.4473C10.4429 10.4473 11.6182 9.27202 11.6182 7.82227C11.6182 6.37252 10.4429 5.19727 8.99316 5.19727Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"common.positions\"),\n href: PortfolioLeftSidebarPath.Positions,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.51 3.021a3 3 0 0 0-3 3v6a3 3 0 0 0 3 3h9a3 3 0 0 0 3-3v-6a3 3 0 0 0-3-3zm2.25 3a.76.76 0 0 1 .54.211.77.77 0 0 1 0 1.078l-.75.75a.77.77 0 0 1-.54.211h-.75a.75.75 0 0 1 0-1.5h.422l.54-.539a.76.76 0 0 1 .539-.21m3 .75h3a.75.75 0 0 1 0 1.5h-3a.75.75 0 0 1 0-1.5m-3 2.25a.76.76 0 0 1 .54.211.77.77 0 0 1 0 1.079l-.75.75a.77.77 0 0 1-.54.21h-.75a.75.75 0 0 1 0-1.5h.422l.54-.539a.76.76 0 0 1 .539-.21m3 .75h3a.75.75 0 0 1 0 1.5h-3a.75.75 0 0 1 0-1.5\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"common.orders\"),\n href: PortfolioLeftSidebarPath.Orders,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.693 1.5C4.229 1.5 3.02 2.61 3.02 4.006v9.984c0 1.398 1.208 2.508 2.672 2.508h6.657c1.463 0 2.671-1.11 2.671-2.508V6.726c0-2.672-2.579-5.227-5.25-5.227zm4.828 1.593c1.33.352 2.562 1.58 2.906 2.906h-1.734c-.667 0-1.172-.472-1.172-1.008zm-3.75 2.906h.75a.75.75 0 0 1 0 1.5h-.75a.75.75 0 0 1 0-1.5m0 3h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5m0 3h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"common.assets\"),\n href: PortfolioLeftSidebarPath.Assets,\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n >\n <path\n d=\"M9 1.5C4.85 1.5 1.5 4.85 1.5 9C1.5 13.15 4.85 16.5 9 16.5C13.15 16.5 16.5 13.15 16.5 9C16.5 4.85 13.15 1.5 9 1.5ZM8.17529 3.75H9.67529V4.94971L10.125 5.17529C10.35 5.32529 10.5756 5.47471 10.7256 5.69971C10.8756 5.92471 11.0256 6.14971 11.1006 6.44971C11.1756 6.74971 11.25 7.05029 11.25 7.42529H9.82471C9.82471 6.97529 9.75059 6.67471 9.60059 6.44971C9.45059 6.22471 9.3 6.14941 9 6.14941C8.85 6.14941 8.7 6.15059 8.625 6.22559L8.39941 6.44971C8.32441 6.52471 8.325 6.675 8.25 6.75C8.175 6.825 8.17529 6.975 8.17529 7.125C8.17529 7.275 8.25 7.35 8.25 7.5C8.25 7.65 8.32441 7.72529 8.39941 7.80029C8.47441 7.95029 8.54971 8.02559 8.69971 8.10059C8.77471 8.17559 8.92441 8.24971 9.14941 8.32471C9.44941 8.47471 9.75059 8.62441 9.97559 8.77441C10.2756 8.92441 10.4994 9.07529 10.6494 9.30029C10.8744 9.52529 11.0256 9.75059 11.1006 9.97559C11.1756 10.2006 11.25 10.5 11.25 10.875C11.25 11.25 11.1756 11.5494 11.1006 11.7744C11.0256 12.0744 10.8756 12.2247 10.7256 12.4497C10.5756 12.5997 10.35 12.7494 10.125 12.8994C9.975 12.9744 9.9 13.0503 9.75 13.0503V14.25H8.25V12.9756C8.1 12.9006 7.95029 12.8997 7.80029 12.8247C7.50029 12.7497 7.35 12.6 7.125 12.375C6.975 12.225 6.82529 11.925 6.67529 11.625C6.60029 11.25 6.52441 10.8753 6.52441 10.4253H8.02441C8.02441 10.6503 8.02559 10.8756 8.10059 11.1006C8.17559 11.3256 8.24971 11.4753 8.32471 11.5503C8.39971 11.6253 8.475 11.6994 8.625 11.7744C8.775 11.8494 8.85 11.8506 9 11.8506C9.15 11.8506 9.225 11.8494 9.375 11.7744C9.525 11.6994 9.60029 11.6253 9.67529 11.5503C9.75029 11.4753 9.74971 11.4 9.82471 11.25C9.89971 11.175 9.89941 11.025 9.89941 10.875C9.89941 10.725 9.82471 10.575 9.82471 10.5C9.82471 10.425 9.75029 10.2747 9.67529 10.1997C9.60029 10.0497 9.525 9.97441 9.375 9.89941L8.92529 9.67529C8.62529 9.52529 8.32559 9.37559 8.10059 9.22559C7.80059 9.07559 7.57529 8.92471 7.42529 8.69971C7.20029 8.54971 7.05059 8.32441 6.97559 8.02441C6.90059 7.79941 6.82471 7.5 6.82471 7.125C6.82471 6.825 6.82441 6.52529 6.89941 6.30029C7.04941 6.07529 7.12559 5.85 7.35059 5.625C7.50059 5.4 7.65029 5.25029 7.80029 5.17529C7.95029 5.10029 8.02529 5.02441 8.17529 5.02441V3.75Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"portfolio.feeTier\"),\n href: PortfolioLeftSidebarPath.FeeTier,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.99829 1.51062C4.34154 1.51062 2.99829 2.85387 2.99829 4.51062V13.5106C2.99829 15.1674 4.34154 16.5106 5.99829 16.5106H11.9983C13.655 16.5106 14.9983 15.1674 14.9983 13.5106V4.51062C14.9983 2.85387 13.655 1.51062 11.9983 1.51062H5.99829ZM5.99829 3.76062H11.9983C12.4123 3.76062 12.7483 4.09662 12.7483 4.51062V6.01062C12.7483 6.42462 12.4123 6.76062 11.9983 6.76062H5.99829C5.58429 6.76062 5.24829 6.42462 5.24829 6.01062V4.51062C5.24829 4.09662 5.58429 3.76062 5.99829 3.76062ZM5.99829 8.26062C6.41229 8.26062 6.74829 8.59662 6.74829 9.01062C6.74829 9.42462 6.41229 9.76062 5.99829 9.76062C5.58429 9.76062 5.24829 9.42462 5.24829 9.01062C5.24829 8.59662 5.58429 8.26062 5.99829 8.26062ZM8.99829 8.26062C9.41229 8.26062 9.74829 8.59662 9.74829 9.01062C9.74829 9.42462 9.41229 9.76062 8.99829 9.76062C8.58429 9.76062 8.24829 9.42462 8.24829 9.01062C8.24829 8.59662 8.58429 8.26062 8.99829 8.26062ZM11.9983 8.26062C12.4123 8.26062 12.7483 8.59662 12.7483 9.01062C12.7483 9.42462 12.4123 9.76062 11.9983 9.76062C11.5843 9.76062 11.2483 9.42462 11.2483 9.01062C11.2483 8.59662 11.5843 8.26062 11.9983 8.26062ZM5.99829 10.5106C6.41229 10.5106 6.74829 10.8466 6.74829 11.2606C6.74829 11.6746 6.41229 12.0106 5.99829 12.0106C5.58429 12.0106 5.24829 11.6746 5.24829 11.2606C5.24829 10.8466 5.58429 10.5106 5.99829 10.5106ZM8.99829 10.5106C9.41229 10.5106 9.74829 10.8466 9.74829 11.2606C9.74829 11.6746 9.41229 12.0106 8.99829 12.0106C8.58429 12.0106 8.24829 11.6746 8.24829 11.2606C8.24829 10.8466 8.58429 10.5106 8.99829 10.5106ZM11.9983 10.5106C12.4123 10.5106 12.7483 10.8466 12.7483 11.2606V13.5106C12.7483 13.9246 12.4123 14.2606 11.9983 14.2606C11.5843 14.2606 11.2483 13.9246 11.2483 13.5106V11.2606C11.2483 10.8466 11.5843 10.5106 11.9983 10.5106ZM5.99829 12.7606C6.41229 12.7606 6.74829 13.0966 6.74829 13.5106C6.74829 13.9246 6.41229 14.2606 5.99829 14.2606C5.58429 14.2606 5.24829 13.9246 5.24829 13.5106C5.24829 13.0966 5.58429 12.7606 5.99829 12.7606ZM8.99829 12.7606C9.41229 12.7606 9.74829 13.0966 9.74829 13.5106C9.74829 13.9246 9.41229 14.2606 8.99829 14.2606C8.58429 14.2606 8.24829 13.9246 8.24829 13.5106C8.24829 13.0966 8.58429 12.7606 8.99829 12.7606Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"portfolio.apiKeys\"),\n href: PortfolioLeftSidebarPath.ApiKey,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9.02124 1.49915C7.77849 1.49915 6.77124 2.5064 6.77124 3.74915C6.77124 4.70015 7.40049 5.55517 8.26974 5.86942L8.27124 8.24915H5.27124C4.85724 8.24915 4.52124 8.58515 4.52124 8.99915L4.52048 12.1304C3.65723 12.4274 3.02124 13.2981 3.02124 14.2491C3.02124 15.4919 4.02849 16.4991 5.27124 16.4991C6.51399 16.4991 7.52124 15.4919 7.52124 14.2491C7.52124 13.2981 6.92499 12.4596 6.02949 12.1206L6.02124 9.74915H9.02124H12.0212L12.0265 12.1319C11.1257 12.4446 10.5212 13.2981 10.5212 14.2491C10.5212 15.4919 11.5285 16.4991 12.7712 16.4991C14.014 16.4991 15.0212 15.4919 15.0212 14.2491C15.0212 13.2981 14.407 12.4611 13.5272 12.1281L13.5212 8.99915C13.5212 8.58515 13.1852 8.24915 12.7712 8.24915H9.77124L9.76899 5.86639C10.642 5.55814 11.2712 4.70015 11.2712 3.74915C11.2712 2.5064 10.264 1.49915 9.02124 1.49915Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"portfolio.setting\"),\n href: PortfolioLeftSidebarPath.Setting,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.72601 1.84159C5.66251 2.17834 4.74527 2.7296 3.93677 3.48185C3.68702 3.7151 3.61052 4.09534 3.77252 4.39609C4.37327 5.50684 3.74476 6.69484 2.39026 6.76309C2.05801 6.78034 1.76477 7.02559 1.68677 7.34884C1.55252 7.90759 1.49927 8.37559 1.49927 8.98984C1.49927 9.50509 1.55476 10.0878 1.66351 10.6068C1.73101 10.9308 2.01302 11.1641 2.34302 11.1933C3.70652 11.3111 4.38152 12.3506 3.77252 13.6773C3.63752 13.9721 3.69902 14.3246 3.93677 14.5443C4.73327 15.2816 5.64826 15.8006 6.72601 16.1381C7.03351 16.2348 7.38076 16.1186 7.56976 15.8568C8.40376 14.7033 9.61352 14.6988 10.4055 15.8568C10.5923 16.1298 10.9343 16.2611 11.2493 16.1613C12.2895 15.8343 13.2585 15.2771 14.0618 14.5443C14.3093 14.3193 14.3745 13.9541 14.226 13.6541C13.602 12.3948 14.3198 11.2383 15.6083 11.2166C15.9503 11.2106 16.2548 10.9856 16.335 10.6541C16.4648 10.1163 16.4993 9.64759 16.4993 8.98984C16.4993 8.42434 16.4325 7.86709 16.3118 7.32559C16.2353 6.98359 15.936 6.74059 15.585 6.73984C14.3168 6.73759 13.6058 5.49109 14.226 4.39609C14.3985 4.09084 14.3445 3.71735 14.085 3.48185C13.2675 2.73935 12.2708 2.15959 11.226 1.84159C10.905 1.74409 10.5638 1.86409 10.3823 2.14609C9.65776 3.27109 8.30477 3.29135 7.59302 2.16935C7.41077 1.8821 7.05001 1.73809 6.72601 1.84159ZM8.99927 5.98984C10.656 5.98984 11.9993 7.33309 11.9993 8.98984C11.9993 10.6466 10.656 11.9898 8.99927 11.9898C7.34252 11.9898 5.99927 10.6466 5.99927 8.98984C5.99927 7.33309 7.34252 5.98984 8.99927 5.98984Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"trading.history\"),\n href: PortfolioLeftSidebarPath.History,\n hide: true,\n },\n ];\n }, [t]);\n\n const hideSideBar = useMediaQuery(\"(max-width: 768px)\");\n\n return {\n items,\n current,\n hideSideBar,\n onItemSelect: (item: SideMenuItem) => {\n if (typeof item.href === \"undefined\") {\n console.warn(\"Item href is not defined\");\n return;\n }\n setCurrent(item.href!);\n routerAdapter?.onRouteChange({\n href: item.href,\n name: item.name,\n });\n },\n };\n};\n\nexport const useCustomSidebarHook = () => {\n const { expanded, setExpand } = useScaffoldContext();\n\n return {\n open: expanded,\n onOpenChange: (open: boolean) => {\n setExpand(open);\n },\n };\n};\n\nexport type usePortfolioLayoutScriptType = ReturnType<\n typeof usePortfolioLayoutScript\n>;\n","import { FC, PropsWithChildren } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn } from \"@orderly.network/ui\";\nimport {\n ScaffoldProps,\n RouterAdapter,\n Scaffold,\n SideBar,\n SideBarProps,\n useScaffoldContext,\n} from \"@orderly.network/ui-scaffold\";\n\nexport type PortfolioLayoutProps = ScaffoldProps & {\n hideSideBar?: boolean;\n items?: SideBarProps[\"items\"];\n};\n\nexport const PortfolioLayout: FC<PropsWithChildren<PortfolioLayoutProps>> = (\n props,\n) => {\n const { children, leftSideProps, classNames, ...rest } = props;\n\n return (\n <Scaffold\n leftSidebar={\n props.hideSideBar ? null : (\n <LeftSidebar\n current={props.routerAdapter?.currentPath}\n routerAdapter={props.routerAdapter}\n items={props.items}\n {...leftSideProps}\n />\n )\n }\n routerAdapter={props.routerAdapter}\n classNames={{\n ...classNames,\n content: cn(\"oui-my-6 oui-px-3\", classNames?.content),\n topNavbar: cn(\"oui-bg-base-9\", classNames?.topNavbar),\n leftSidebar: cn(\n \"oui-rounded-xl oui-bg-base-9\",\n \"oui-m-3 oui-p-4\",\n \"oui-border oui-border-line\",\n classNames?.leftSidebar,\n ),\n }}\n {...rest}\n >\n {children}\n </Scaffold>\n );\n};\n\ntype LeftSidebarProps = SideBarProps & {\n routerAdapter?: RouterAdapter;\n};\n\nconst LeftSidebar: FC<LeftSidebarProps> = (props) => {\n const { expanded, setExpand } = useScaffoldContext();\n const { t } = useTranslation();\n return (\n <SideBar\n title={t(\"common.portfolio\")}\n {...props}\n open={expanded}\n onOpenChange={(open) => setExpand(open)}\n onItemSelect={(e) => {\n props.onItemSelect?.(e);\n props.routerAdapter?.onRouteChange?.({\n href: e.href || \"\",\n name: e.name,\n });\n }}\n />\n );\n};\n","import { FC, PropsWithChildren } from \"react\";\nimport { Flex, Box } from \"@orderly.network/ui\";\nimport {\n MainNavMobile,\n BottomNav,\n type ScaffoldProps,\n} from \"@orderly.network/ui-scaffold\";\nimport { LayoutProvider } from \"./context\";\nimport { usePortfolioLayoutScriptType } from \"./layout.script\";\n\nexport const PortfolioLayoutMobile: FC<\n PropsWithChildren<\n ScaffoldProps & usePortfolioLayoutScriptType & { current?: string }\n >\n> = (props) => {\n return (\n <LayoutProvider {...props}>\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n height={\"100%\"}\n className=\"oui-h-full-screen oui-bg-base-10\"\n >\n <header className=\"oui-sticky oui-top-0 oui-z-10 oui-w-full oui-bg-base-10\">\n <MainNavMobile\n {...props.mainNavProps}\n current={props?.current}\n subItems={props?.items}\n routerAdapter={props.routerAdapter}\n />\n </header>\n <Box className=\"oui-min-h-[calc(100vh-44px-64px-env(safe-area-inset-bottom))] oui-w-full\">\n {props.children}\n </Box>\n <footer className=\"oui-sticky oui-bottom-0 oui-z-10 oui-w-full oui-bg-base-9 oui-pb-[calc(env(safe-area-inset-bottom))]\">\n <BottomNav\n mainMenus={props.bottomNavProps?.mainMenus}\n current={props?.current}\n onRouteChange={props.routerAdapter?.onRouteChange}\n />\n </footer>\n </Flex>\n </LayoutProvider>\n );\n};\n","import React, { createContext, useContext, useState, useMemo } from \"react\";\nimport type { RouterAdapter } from \"@orderly.network/ui-scaffold\";\n\ntype LayoutContextValue = {\n sideOpen: boolean;\n onSideOpenChange: (open: boolean) => void;\n routerAdapter?: RouterAdapter;\n};\n\nconst LayoutContext = createContext<LayoutContextValue>({\n sideOpen: true,\n} as LayoutContextValue);\n\nexport const useLayoutContext = () => {\n return useContext(LayoutContext);\n};\n\nexport const LayoutProvider: React.FC<\n React.PropsWithChildren<{ routerAdapter?: RouterAdapter }>\n> = (props) => {\n const { routerAdapter, children } = props;\n const [sideOpen, setSideOpen] = useState(true);\n const memoizedValue = useMemo<LayoutContextValue>(\n () => ({\n sideOpen: sideOpen,\n onSideOpenChange: setSideOpen,\n routerAdapter: routerAdapter,\n }),\n [sideOpen, setSideOpen, routerAdapter],\n );\n return (\n <LayoutContext.Provider value={memoizedValue}>\n {children}\n </LayoutContext.Provider>\n );\n};\n","export { AssetWidget, AssetsUI } from \"./assets\";\nexport { HistoryDataGroupWidget } from \"./historyDataGroup\";\n\nexport * from \"./assetChart\";\nexport * from \"./assetHistory\";\n\nexport {\n PerformanceUI,\n PerformanceWidget,\n usePerformanceScript,\n} from \"./performance\";\nexport {\n FundingHistoryWidget,\n useFundingHistoryColumns,\n useFundingHistoryHook,\n} from \"./funding\";\n\nexport {\n DistributionHistoryWidget,\n DistributionHistoryMobile,\n DistributionHistoryDesktop,\n} from \"./distribution\";\n\nexport { OverviewPage } from \"./main\";\n\nexport { OverviewProvider } from \"./provider/overviewProvider\";\n","import { useCallback, useMemo } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useLeverage,\n useLocalStorage,\n usePositionStream,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { modal, useScreen } from \"@orderly.network/ui\";\nimport { LeverageWidgetWithDialogId } from \"@orderly.network/ui-leverage\";\nimport {\n DepositAndWithdrawWithDialogId,\n DepositAndWithdrawWithSheetId,\n TransferDialogId,\n TransferSheetId,\n} from \"@orderly.network/ui-transfer\";\n\nexport const useAssetScript = () => {\n const { connect, namespace } = useWalletConnector();\n const { state, isMainAccount } = useAccount();\n const { totalValue, freeCollateral } = useCollateral();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const [data] = usePositionStream();\n const { curLeverage } = useLeverage();\n const [visible, setVisible] = useLocalStorage(\"orderly_assets_visible\", true);\n const { isMobile } = useScreen();\n const handleDomId = isMobile\n ? DepositAndWithdrawWithSheetId\n : DepositAndWithdrawWithDialogId;\n const subAccounts = state.subAccounts ?? [];\n\n const canTrade = useMemo(() => {\n return (\n !wrongNetwork &&\n !disabledConnect &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected)\n );\n }, [state.status, wrongNetwork, disabledConnect]);\n\n const onLeverageEdit = () => {\n modal.show(LeverageWidgetWithDialogId);\n };\n\n const onDeposit = useCallback(() => {\n modal.show(handleDomId, { activeTab: \"deposit\" });\n }, [handleDomId]);\n\n const onWithdraw = useCallback(() => {\n modal.show(handleDomId, { activeTab: \"withdraw\" });\n }, []);\n\n const onTransfer = useCallback(() => {\n if (isMobile) {\n modal.show(TransferSheetId);\n } else {\n modal.show(TransferDialogId);\n }\n }, [isMobile]);\n\n return {\n canTrade,\n connect,\n portfolioValue: totalValue,\n freeCollateral,\n unrealPnL: data.aggregated.total_unreal_pnl,\n unrealROI: data.totalUnrealizedROI,\n currentLeverage: curLeverage,\n onLeverageEdit,\n visible,\n wrongNetwork,\n toggleVisible: () => setVisible(!visible),\n onDeposit,\n onWithdraw,\n onTransfer,\n namespace,\n isMainAccount,\n hasSubAccount: subAccounts?.length > 0,\n } as const;\n};\n\nexport type AssetScriptReturn = ReturnType<typeof useAssetScript>;\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Card,\n Divider,\n Flex,\n Grid,\n Either,\n Statistic,\n Text,\n EyeIcon,\n gradientTextVariants,\n EditIcon,\n EyeCloseIcon,\n} from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { AssetScriptReturn } from \"./assets.script\";\nimport { AssetsHeader } from \"./assetsHeader\";\n\nexport const AssetsUI = (\n props: AssetScriptReturn & { onConnectWallet?: () => void },\n) => {\n const { t } = useTranslation();\n return (\n <Card\n classNames={{\n footer: \"oui-h-[48px]\",\n root: \"oui-h-[240px]\",\n }}\n title={\n <AssetsHeader\n disabled={!props.canTrade}\n isMainAccount={props.isMainAccount}\n onDeposit={props.onDeposit}\n onWithdraw={props.onWithdraw}\n onTransfer={props.onTransfer}\n hasSubAccount={props.hasSubAccount}\n />\n }\n >\n <>\n <Statistic\n label={\n <Flex gap={1}>\n <Text intensity={54}>{t(\"common.totalValue\")}</Text>\n <button\n onClick={() => {\n props.toggleVisible();\n }}\n data-testid=\"oui-testid-portfolio-assets-eye-btn\"\n >\n {props.visible ? (\n <EyeIcon size={16} color={\"white\"} />\n ) : (\n <EyeCloseIcon size={16} color={\"white\"} />\n )}\n </button>\n </Flex>\n }\n >\n <Either value={props.canTrade!} left={<NoValue />}>\n <Text.numeral\n visible={props.visible}\n unit=\"USDC\"\n // @ts-ignore\n style={{ \"--oui-gradient-angle\": \"45deg\" }}\n unitClassName=\"oui-text-base oui-text-base-contrast-80 oui-h-9 oui-ml-1\"\n className={gradientTextVariants({\n className: \"oui-font-bold oui-text-3xl\",\n color: \"brand\",\n })}\n >\n {props.portfolioValue ?? \"--\"}\n </Text.numeral>\n </Either>\n </Statistic>\n <Divider className=\"oui-my-4\" intensity={8} />\n <AuthGuard buttonProps={{ size: \"lg\", fullWidth: true }}>\n <AssetStatistic\n unrealROI={props.unrealROI}\n unrealPnL={props.unrealPnL}\n freeCollateral={props.freeCollateral}\n currentLeverage={props.currentLeverage}\n onLeverageEdit={props.onLeverageEdit}\n visible={props.visible}\n />\n </AuthGuard>\n </>\n </Card>\n );\n};\n\nconst NoValue: FC = () => {\n return (\n <Flex gap={1} className={\"oui-h-9\"}>\n <Text.gradient color=\"brand\" weight=\"bold\">\n --\n </Text.gradient>\n <Text>USDC</Text>\n </Flex>\n );\n};\n\ntype AssetStatisticProps = Pick<\n AssetScriptReturn,\n | \"currentLeverage\"\n | \"unrealPnL\"\n | \"unrealROI\"\n | \"freeCollateral\"\n | \"onLeverageEdit\"\n | \"visible\"\n>;\n\nexport const AssetStatistic = (props: AssetStatisticProps) => {\n const { t } = useTranslation();\n\n return (\n <Grid cols={3} className=\"oui-h-12\">\n <Statistic label={t(\"common.unrealizedPnl\")}>\n <Flex>\n <Text.numeral\n coloring\n size=\"lg\"\n weight=\"semibold\"\n visible={props.visible}\n >\n {props.unrealPnL}\n </Text.numeral>\n <Text.numeral\n coloring\n rule=\"percentages\"\n size=\"sm\"\n weight=\"semibold\"\n prefix={\"(\"}\n suffix=\")\"\n visible={props.visible}\n >\n {props.unrealROI}\n </Text.numeral>\n </Flex>\n </Statistic>\n <Statistic label={t(\"leverage.maxAccountLeverage\")}>\n <Flex itemAlign={\"center\"}>\n <span\n data-testid=\"oui-testid-portfolio-assets-maxAccountLeverage-value\"\n className=\"oui-text-lg\"\n >\n {props.currentLeverage}\n </span>\n <span>x</span>\n <button\n className=\"oui-ml-1\"\n onClick={() => props.onLeverageEdit?.()}\n data-testid=\"oui-testid-portfolio-assets-maxAccountLeverage-edit-btn\"\n >\n <EditIcon color={\"white\"} size={18} />\n </button>\n </Flex>\n </Statistic>\n <Statistic\n label={t(\"portfolio.overview.availableWithdraw\")}\n // @ts-ignore\n align=\"right\"\n // @ts-ignore\n valueProps={{ size: \"lg\", visible: props.visible }}\n >\n {props.freeCollateral}\n </Statistic>\n </Grid>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowLeftRightIcon,\n ArrowUpSquareFillIcon,\n Button,\n CardTitle,\n Flex,\n} from \"@orderly.network/ui\";\n\ntype Props = {\n disabled: boolean;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n onTransfer?: () => void;\n isMainAccount?: boolean;\n hasSubAccount?: boolean;\n};\n\nexport const AssetsHeader: FC<Props> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex justify={\"between\"}>\n <CardTitle>{t(\"common.overview\")}</CardTitle>\n <Flex gap={3}>\n {props.isMainAccount && (\n <Button\n disabled={props.disabled}\n size=\"md\"\n onClick={() => props.onDeposit?.()}\n icon={<ArrowDownSquareFillIcon />}\n data-testid=\"oui-testid-portfolio-assets-deposit-btn\"\n >\n {t(\"common.deposit\")}\n </Button>\n )}\n {props.hasSubAccount && (\n <Button\n disabled={props.disabled}\n size=\"md\"\n color=\"secondary\"\n onClick={() => props.onTransfer?.()}\n icon={<ArrowLeftRightIcon />}\n >\n {t(\"common.transfer\")}\n </Button>\n )}\n {props.isMainAccount && (\n <Button\n disabled={props.disabled}\n size=\"md\"\n color=\"secondary\"\n onClick={() => props.onWithdraw?.()}\n icon={<ArrowUpSquareFillIcon />}\n data-testid=\"oui-testid-portfolio-assets-withdraw-btn\"\n >\n {t(\"common.withdraw\")}\n </Button>\n )}\n </Flex>\n </Flex>\n );\n};\n","import { useAssetScript } from \"./assets.script\";\nimport { AssetsUI } from \"./assets.ui\";\n\nexport const AssetWidget = () => {\n const { connect: connectWallet, ...rest } = useAssetScript();\n return (\n <AssetsUI\n // TODO: remove duplicate props\n onConnectWallet={connectWallet}\n connect={connectWallet}\n {...rest}\n />\n );\n};\n","import { useScreen } from \"@orderly.network/ui\";\nimport { useHistoryDataGroupScript } from \"./historyDataGroup.script\";\nimport { HistoryDataGroupDesktop } from \"./historyDataGroup.ui.desktop\";\nimport { HistoryDataGroupMobile } from \"./historyDataGroup.ui.mobile\";\n\nexport const HistoryDataGroupWidget: React.FC = () => {\n const state = useHistoryDataGroupScript();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <HistoryDataGroupMobile {...state} />;\n }\n return <HistoryDataGroupDesktop {...state} />;\n};\n","import { useState } from \"react\";\n\nexport type TabName = \"deposit\" | \"funding\" | \"distribution\";\n\nexport const useHistoryDataGroupScript = () => {\n const [active, setActive] = useState<TabName>(\"deposit\");\n return {\n active,\n onTabChange: setActive as React.Dispatch<React.SetStateAction<string>>,\n } as const;\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { AssetHistorySideEnum } from \"@orderly.network/types\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowLeftRightSquareFill,\n ArrowUpSquareFillIcon,\n Card,\n FeeTierIcon,\n ServerFillIcon,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { TransferHistoryWidget } from \"../TransferHistory\";\nimport { AssetHistoryWidget } from \"../assetHistory\";\nimport { DistributionHistoryWidget } from \"../distribution\";\nimport { FundingHistoryWidget } from \"../funding\";\nimport { TabName } from \"./historyDataGroup.script\";\n\nexport const HistoryDataGroupDesktop = (props: {\n active?: TabName;\n onTabChange: (tab: string) => void;\n}) => {\n const { active = \"deposit\", onTabChange } = props;\n const { t } = useTranslation();\n\n return (\n <Card>\n <Tabs\n value={active}\n onValueChange={onTabChange}\n variant=\"contained\"\n size=\"xl\"\n // classNames={{\n // tabsList: \"oui-px-3\",\n // }}\n >\n <TabPanel\n title={t(\"common.deposits\")}\n icon={<ArrowDownSquareFillIcon />}\n value={\"deposit\"}\n >\n <AssetHistoryWidget side={AssetHistorySideEnum.DEPOSIT} />\n </TabPanel>\n <TabPanel\n title={t(\"common.withdrawals\")}\n icon={<ArrowUpSquareFillIcon />}\n value={\"withdraw\"}\n >\n <AssetHistoryWidget side={AssetHistorySideEnum.WITHDRAW} />\n </TabPanel>\n <TabPanel\n title={t(\"common.funding\")}\n icon={<FeeTierIcon />}\n value={\"funding\"}\n >\n <FundingHistoryWidget />\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.distribution\")}\n icon={<ServerFillIcon />}\n value={\"distribution\"}\n >\n <DistributionHistoryWidget />\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.transferHistory\")}\n icon={<ArrowLeftRightSquareFill />}\n value={\"transfer\"}\n >\n <TransferHistoryWidget />\n </TabPanel>\n </Tabs>\n </Card>\n );\n};\n","import React from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { TransferHistoryUI } from \"./transfer.ui\";\nimport { useTransferHistoryHook } from \"./useDataSource.script\";\n\nexport const TransferHistoryWidget: React.FC = () => {\n const state = useTransferHistoryHook();\n const accountState = useAccount();\n return <TransferHistoryUI {...state} {...accountState} />;\n};\n","import React, { useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport type { API } from \"@orderly.network/types\";\nimport { DataFilter, formatAddress } from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport type { SelectOption } from \"@orderly.network/ui/src/select/withOptions\";\nimport { useColumns } from \"./column\";\nimport type { useTransferHistoryHookReturn } from \"./useDataSource.script\";\n\ntype HistoryProps = useTransferHistoryHookReturn;\n\nexport enum AccountType {\n ALL = \"All accounts\",\n MAIN = \"Main accounts\",\n}\n\nexport const TransferHistoryUI: React.FC<\n Readonly<HistoryProps & ReturnType<typeof useAccount>>\n> = (props) => {\n const {\n dataSource,\n queryParameter,\n state,\n isMainAccount,\n isLoading,\n selectedAccount,\n onFilter,\n } = props;\n const { side, dateRange } = queryParameter;\n\n const { t } = useTranslation();\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const subAccounts = state.subAccounts ?? [];\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\n\n const columns = useColumns();\n\n return (\n <>\n <DataFilter\n onFilter={onFilter}\n items={produce(\n [\n {\n type: \"select\",\n name: \"side\",\n value: side,\n options: [\n { value: \"OUT\", label: \"Outflow\" },\n { value: \"IN\", label: \"Inflow\" },\n ],\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ],\n (draft) => {\n if (isMainAccount) {\n draft.unshift({\n type: \"select\",\n name: \"account\",\n value: selectedAccount as any,\n options: memoizedOptions,\n });\n }\n },\n )}\n />\n <AuthGuardDataTable<API.TransferHistoryRow>\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n // isValidating={isValidating}\n className=\"oui-font-semibold\"\n classNames={{ root: \"oui-h-[calc(100%_-_49px)]\" }}\n pagination={props.pagination}\n generatedRowKey={(row) => row.id}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, EMPTY_LIST } from \"@orderly.network/types\";\nimport { Flex, TokenIcon, Text, toast, Badge } from \"@orderly.network/ui\";\nimport type { Column } from \"@orderly.network/ui\";\nimport { capitalizeString } from \"@orderly.network/utils\";\n\nexport const useColumns = () => {\n const { t } = useTranslation();\n const onCopy = () => {\n toast.success(t(\"common.copy.copied\"));\n };\n const { state } = useAccount();\n const sub = state.subAccounts ?? [];\n const columns = React.useMemo<Column<API.TransferHistoryRow>[]>(() => {\n return [\n {\n title: t(\"common.token\"),\n dataIndex: \"token\",\n width: 80,\n render(val: string) {\n return (\n <Flex gapX={2}>\n <TokenIcon name={val} size=\"xs\" />\n <span>{val}</span>\n </Flex>\n );\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"updated_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: `${t(\"transfer.internalTransfer.from\")} (Account ID)`,\n dataIndex: \"from_account_id\",\n render(val: string) {\n const isMainAccount = val === state.mainAccountId;\n const subAccount = sub.find((item) => item.id === val);\n return (\n <Flex itemAlign=\"start\" py={2} gap={1} direction=\"column\">\n <Text.formatted onCopy={onCopy} copyable rule=\"address\">\n {val}\n </Text.formatted>\n <Badge className=\"oui-select-none\" color=\"neutral\" size=\"xs\">\n {isMainAccount\n ? t(\"common.mainAccount\")\n : subAccount?.description || t(\"common.subAccount\")}\n </Badge>\n </Flex>\n );\n },\n },\n {\n title: `${t(\"transfer.internalTransfer.to\")} (Account ID)`,\n dataIndex: \"to_account_id\",\n render(val: string) {\n const isMainAccount = val === state.mainAccountId;\n const subAccount = sub.find((item) => item.id === val);\n return (\n <Flex itemAlign=\"start\" py={2} gap={1} direction=\"column\">\n <Text.formatted onCopy={onCopy} copyable rule=\"address\">\n {val}\n </Text.formatted>\n <Badge className=\"oui-select-none\" color=\"neutral\" size=\"xs\">\n {isMainAccount\n ? t(\"common.mainAccount\")\n : subAccount?.description || t(\"common.subAccount\")}\n </Badge>\n </Flex>\n );\n },\n },\n {\n title: t(\"common.status\"),\n dataIndex: \"status\",\n width: 120,\n render(val: string) {\n return capitalizeString(val);\n },\n },\n {\n title: t(\"common.amount\"),\n dataIndex: \"amount\",\n width: 80,\n },\n ];\n }, [t, state.mainAccountId, sub]);\n return columns;\n};\n","import React from \"react\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\nimport { useAccount, useTransferHistory } from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport type { PaginationMeta } from \"@orderly.network/ui\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport { AccountType } from \"./transfer.ui\";\n\nexport const useTransferHistoryHook = () => {\n // const today = useRef(setMinutes(setHours(new Date(), 23), 59));\n\n const today = React.useMemo<Date>(() => {\n const date = new Date();\n return new Date(getYear(date), getMonth(date), getDate(date), 0, 0, 0);\n }, []);\n\n const [dateRange, setDateRange] = React.useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const { state } = useAccount();\n\n const [selectedAccount, setAccount] = React.useState<string>(AccountType.ALL);\n\n const [side, setSide] = React.useState<\"IN\" | \"OUT\">(\"OUT\");\n\n const [data, { isLoading, meta }] = useTransferHistory({\n dataRange: [\n dateRange[0]?.getTime(),\n set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n })?.getTime(),\n ],\n side: side,\n size: pageSize,\n page: page,\n main_sub_only: true,\n });\n\n const filteredData = React.useMemo(() => {\n return data.filter((item) => {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return (\n item.from_account_id === state.mainAccountId ||\n item.to_account_id === state.mainAccountId\n );\n } else {\n return (\n item.from_account_id === selectedAccount ||\n item.to_account_id === selectedAccount\n );\n }\n });\n }, [data, selectedAccount]);\n\n const onAccountFilter = React.useCallback(\n (filter: { value: string; name: string }) => {\n if (filter.name === \"account\") {\n setAccount(filter.value);\n }\n if (filter.name === \"side\") {\n setSide(filter.value as \"IN\" | \"OUT\");\n }\n if (filter.name === \"dateRange\") {\n setDateRange(parseDateRangeForFilter(filter.value as any));\n }\n setPage(1);\n },\n [setPage],\n );\n\n const pagination = React.useMemo<PaginationMeta>(\n () => parsePagination(meta),\n [parsePagination, meta],\n );\n\n return {\n dataSource: filteredData,\n isLoading,\n // onDateRangeChange,\n queryParameter: {\n side,\n dateRange,\n },\n selectedAccount,\n onFilter: onAccountFilter,\n pagination,\n } as const;\n};\n\nexport type useTransferHistoryHookReturn = ReturnType<\n typeof useTransferHistoryHook\n>;\n","import { differenceInDays, setHours } from \"date-fns\";\n\nexport const parseDateRangeForFilter = (dateRange: {\n from: Date;\n to?: Date;\n}) => {\n const { from, to = new Date() } = dateRange;\n\n const diff = differenceInDays(from, to);\n\n if (diff === 0) {\n return [from, setHours(to, 23)];\n }\n\n return [from, to];\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AssetHistoryStatusEnum } from \"@orderly.network/types\";\nimport {\n capitalizeFirstLetter,\n Text,\n Flex,\n TokenIcon,\n toast,\n type Column,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\ntype Options = {\n chainsInfo: any[];\n isDeposit: boolean;\n isWeb3Wallet: boolean;\n};\n\nexport const useAssetHistoryColumns = (options: Options) => {\n const { chainsInfo, isDeposit, isWeb3Wallet } = options;\n const { t } = useTranslation();\n\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n\n const columns = useMemo<Column[]>(() => {\n const txIdColumn: Column = {\n title: t(\"common.txId\"),\n dataIndex: \"tx_id\",\n width: 120,\n render: (value, record) => {\n if (!value) {\n return <div className=\"oui-text-base-contrast-54\">-</div>;\n }\n const chainInfo = chainsInfo?.find(\n (item) => parseInt(record.chain_id) === parseInt(item.chain_id),\n );\n const explorer_base_url = chainInfo?.explorer_base_url;\n const href = `${explorer_base_url}/tx/${value}`;\n return (\n <a href={href} target=\"_blank\" rel=\"noreferrer\">\n {/* <Tooltip content={value} delayDuration={0}> */}\n <Text.formatted\n copyable={!!value}\n rule=\"txId\"\n className=\"oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\"\n onCopy={onCopy}\n >\n {value}\n </Text.formatted>\n {/* </Tooltip> */}\n </a>\n );\n },\n };\n\n const accountIdColumn: Column = {\n title: t(\"common.accountId\"),\n dataIndex: \"account_id\",\n width: 120,\n render: (value, record) => {\n const accountId = isDeposit\n ? record.from_account_id\n : record.to_account_id;\n\n return (\n <Text.formatted rule=\"address\" copyable={!!accountId} onCopy={onCopy}>\n {accountId}\n </Text.formatted>\n );\n },\n };\n\n return [\n {\n title: t(\"common.token\"),\n dataIndex: \"token\",\n width: 80,\n render: (value) => {\n return (\n <Flex gapX={1}>\n <TokenIcon name={value} size=\"xs\" />\n <span>{value}</span>\n </Flex>\n );\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"created_time\",\n width: 80,\n rule: \"date\",\n },\n isWeb3Wallet ? txIdColumn : accountIdColumn,\n {\n title: t(\"common.status\"),\n dataIndex: \"trans_status\",\n width: 100,\n render: (value, recoed) => {\n value = isWeb3Wallet ? value : recoed.status;\n const statusMap = {\n [AssetHistoryStatusEnum.NEW]: t(\"assetHistory.status.pending\"),\n [AssetHistoryStatusEnum.PENDING]: t(\"assetHistory.status.pending\"),\n [AssetHistoryStatusEnum.CONFIRM]: t(\"assetHistory.status.confirm\"),\n [AssetHistoryStatusEnum.PROCESSING]: t(\n \"assetHistory.status.processing\",\n ),\n [AssetHistoryStatusEnum.COMPLETED]: t(\n \"assetHistory.status.completed\",\n ),\n [AssetHistoryStatusEnum.FAILED]: t(\"assetHistory.status.failed\"),\n };\n return (\n statusMap[value as keyof typeof statusMap] ||\n capitalizeFirstLetter(value?.toLowerCase())\n );\n },\n },\n {\n title: t(\"common.amount\"),\n dataIndex: \"amount\",\n width: 100,\n rule: \"price\",\n render: (value, record) => {\n const netAmount = new Decimal(value).minus(record.fee ?? 0);\n return (\n <Text.numeral\n dp={record.decimals}\n rule=\"price\"\n coloring\n showIdentifier\n padding={false}\n >\n {isDeposit ? netAmount.toNumber() : netAmount.neg().toNumber()}\n </Text.numeral>\n );\n },\n },\n ];\n }, [t, chainsInfo, isDeposit, isWeb3Wallet]);\n\n return columns;\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\nimport {\n useAssetsHistory,\n useQuery,\n useTokensInfo,\n useTransferHistory,\n} from \"@orderly.network/hooks\";\nimport { AssetHistorySideEnum } from \"@orderly.network/types\";\nimport { modal, usePagination } from \"@orderly.network/ui\";\nimport { DepositAndWithdrawWithSheetId } from \"@orderly.network/ui-transfer\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\n\nexport enum AssetTarget {\n Web3Wallet = \"Web3Wallet\",\n AccountId = \"AccountId\",\n}\n\nexport type AssetHistoryScriptOptions = {\n side: AssetHistorySideEnum;\n};\n\nexport type AssetHistoryScriptReturn = ReturnType<typeof useAssetHistoryScript>;\n\nexport const useAssetHistoryScript = (options: AssetHistoryScriptOptions) => {\n const { side } = options;\n const isDeposit = side === AssetHistorySideEnum.DEPOSIT;\n\n const [today] = useState(() => {\n const d = new Date();\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const tokensInfo = useTokensInfo();\n\n const [target, setTarget] = useState<AssetTarget>(AssetTarget.Web3Wallet);\n\n const [dateRange, setDateRange] = useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const { startTime, endTime } = useMemo(() => {\n const startTime = dateRange[0].getTime();\n const endTime = set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n }).getTime();\n\n return { startTime, endTime };\n }, [dateRange]);\n\n const [assetData, { meta: assetMeta, isLoading: assetLoading }] =\n useAssetsHistory(\n {\n startTime,\n endTime,\n page,\n pageSize,\n side,\n },\n {\n shouldUpdateOnWalletChanged: (data) => data.side === side,\n },\n );\n\n const [transferData, { isLoading: transferLoading, meta: transferMeta }] =\n useTransferHistory({\n dataRange: [startTime, endTime],\n side: isDeposit ? \"IN\" : \"OUT\",\n size: pageSize,\n page: page,\n main_sub_only: false,\n });\n\n const { data: chainsInfo } = useQuery(\"/v1/public/chain_info\", {\n revalidateOnFocus: false,\n });\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"dateRange\") {\n setDateRange(parseDateRangeForFilter(filter.value));\n setPage(1);\n } else if (filter.name === \"target\") {\n setTarget(filter.value);\n setPage(1);\n }\n };\n\n const isLoading = useMemo(() => {\n if (target === AssetTarget.Web3Wallet) {\n return assetLoading;\n }\n return transferLoading;\n }, [target, assetLoading, transferLoading]);\n\n const meta = useMemo(() => {\n if (target === AssetTarget.Web3Wallet) {\n return assetMeta;\n }\n return transferMeta;\n }, [target, assetMeta, transferMeta]);\n\n const pagination = useMemo(\n () => parsePagination(meta),\n [parsePagination, meta],\n );\n\n const dataSource = useMemo(() => {\n return (target === AssetTarget.Web3Wallet ? assetData : transferData).map(\n (item) => {\n const findToken = tokensInfo?.find(({ token }) => token === item.token);\n return {\n ...item,\n decimals: findToken?.decimals ?? 2,\n };\n },\n );\n }, [target, assetData, transferData, tokensInfo]);\n\n const onDeposit = useCallback(() => {\n modal.show(DepositAndWithdrawWithSheetId, { activeTab: \"deposit\" });\n }, []);\n\n const isWeb3Wallet = target === AssetTarget.Web3Wallet;\n\n return {\n dataSource,\n total: meta?.total,\n isLoading,\n queryParameter: {\n target,\n dateRange,\n },\n onFilter,\n pagination,\n onDeposit,\n chainsInfo: chainsInfo as any[],\n isDeposit,\n isWeb3Wallet,\n };\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { DataFilter } from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport {\n AssetTarget,\n type AssetHistoryScriptReturn,\n} from \"./assetHistory.script\";\nimport { useAssetHistoryColumns } from \"./column\";\n\ntype AssetHistoryProps = AssetHistoryScriptReturn;\n\nexport const AssetHistory: FC<AssetHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading } = props;\n const { dateRange, target } = queryParameter;\n const columns = useAssetHistoryColumns({\n chainsInfo: props.chainsInfo,\n isDeposit: props.isDeposit,\n isWeb3Wallet: props.isWeb3Wallet,\n });\n const { t } = useTranslation();\n\n const options = useMemo(() => {\n return [\n { label: t(\"common.web3Wallet\"), value: AssetTarget.Web3Wallet },\n { label: t(\"common.accountId\"), value: AssetTarget.AccountId },\n ];\n }, [t]);\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"target\",\n options: options,\n value: target,\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n />\n\n <AuthGuardDataTable\n bordered\n loading={isLoading}\n classNames={{\n root: \"oui-h-[calc(100%_-_49px)]\",\n scroll: \"oui-min-h-[400px]\",\n }}\n columns={columns}\n dataSource={dataSource}\n pagination={props.pagination}\n />\n </>\n );\n};\n","import { AssetHistorySideEnum } from \"@orderly.network/types\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { useAssetHistoryScript } from \"./assetHistory.script\";\nimport { AssetHistory } from \"./assetHistory.ui\";\nimport { AssetHistoryMobile } from \"./assetHistory.ui.mobile\";\n\ntype AssetHistoryWidgetProps = {\n side: AssetHistorySideEnum;\n};\n\nexport const AssetHistoryWidget = (props: AssetHistoryWidgetProps) => {\n const state = useAssetHistoryScript({ side: props.side });\n\n const { isMobile } = useScreen();\n if (isMobile) {\n return <AssetHistoryMobile {...state} />;\n }\n return <AssetHistory {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AssetHistoryStatusEnum } from \"@orderly.network/types\";\nimport {\n Badge,\n DataFilter,\n Flex,\n ListView,\n Text,\n capitalizeFirstLetter,\n toast,\n ArrowRightShortIcon,\n EmptyDataState,\n} from \"@orderly.network/ui\";\nimport {\n AssetTarget,\n type AssetHistoryScriptReturn,\n} from \"./assetHistory.script\";\n\ntype AssetHistoryMobileProps = AssetHistoryScriptReturn;\n\nexport const AssetHistoryMobile: FC<AssetHistoryMobileProps> = (props) => {\n const {\n dataSource,\n queryParameter,\n onFilter,\n isLoading,\n pagination,\n onDeposit,\n chainsInfo,\n isDeposit,\n isWeb3Wallet,\n } = props;\n const { dateRange, target } = queryParameter;\n const { t } = useTranslation();\n\n const options = useMemo(() => {\n return [\n { label: t(\"common.web3Wallet\"), value: AssetTarget.Web3Wallet },\n { label: t(\"common.accountId\"), value: AssetTarget.AccountId },\n ];\n }, [t]);\n\n const loadMore = () => {\n if (dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange?.(pagination?.pageSize + 50);\n }\n };\n\n const getStatusText = (item: any) => {\n const status = props.isWeb3Wallet ? item.trans_status : item.status;\n const statusMap = {\n [AssetHistoryStatusEnum.NEW]: t(\"assetHistory.status.pending\"),\n [AssetHistoryStatusEnum.PENDING]: t(\"assetHistory.status.pending\"),\n [AssetHistoryStatusEnum.CONFIRM]: t(\"assetHistory.status.confirm\"),\n [AssetHistoryStatusEnum.PROCESSING]: t(\"assetHistory.status.processing\"),\n [AssetHistoryStatusEnum.COMPLETED]: t(\"assetHistory.status.completed\"),\n [AssetHistoryStatusEnum.FAILED]: t(\"assetHistory.status.failed\"),\n };\n return (\n statusMap[status as keyof typeof statusMap] ||\n capitalizeFirstLetter(status?.toLowerCase())\n );\n };\n\n const renderHistoryItem = (item: any) => {\n // Amount formatting\n const formattedAmount = isDeposit\n ? `+${item.amount - (item.fee ?? 0)}`\n : -(item.amount - (item.fee ?? 0));\n\n // Get tx link\n const getTxLink = () => {\n if (!item.tx_id) return undefined;\n\n const chainInfo =\n chainsInfo && Array.isArray(chainsInfo)\n ? chainsInfo.find(\n (chain: any) =>\n parseInt(item.chain_id) === parseInt(chain.chain_id),\n )\n : undefined;\n\n if (chainInfo?.explorer_base_url) {\n return `${chainInfo.explorer_base_url}/tx/${item.tx_id}`;\n }\n\n return undefined;\n };\n\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n\n const itemColor = isDeposit ? \"buy\" : \"sell\";\n\n const amountView = (\n <Flex className=\"oui-text-xs\">\n <Text color={itemColor}>{formattedAmount}</Text>\n <Text className=\"oui-ml-1\" intensity={80}>\n {item.token}\n </Text>\n {isWeb3Wallet && (\n <Badge color={itemColor} className=\"oui-ml-2\">\n {isDeposit ? t(\"common.deposit\") : t(\"common.withdraw\")}\n </Badge>\n )}\n </Flex>\n );\n\n const statusView = (\n <Text intensity={isWeb3Wallet ? 80 : 36} size=\"xs\">\n {getStatusText(item)}\n </Text>\n );\n\n const timeView = (\n <Text.formatted rule=\"date\" intensity={36} size=\"2xs\">\n {item.created_time}\n </Text.formatted>\n );\n\n const txIdView = item.tx_id ? (\n <a href={getTxLink()} target=\"_blank\" rel=\"noreferrer\">\n <Text.formatted\n copyable={!!item.tx_id}\n className=\"oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\"\n rule=\"txId\"\n onCopy={onCopy}\n intensity={36}\n size=\"xs\"\n >\n {item.tx_id}\n </Text.formatted>\n </a>\n ) : (\n <Text intensity={54}>-</Text>\n );\n\n const accountId = isDeposit ? item.from_account_id : item.to_account_id;\n\n const accountIdView = (\n <Flex gapX={1}>\n <Text intensity={36} size=\"xs\">\n {isDeposit\n ? t(\"transfer.internalTransfer.from\")\n : t(\"transfer.internalTransfer.to\")}\n </Text>\n <Text.formatted\n rule=\"address\"\n copyable={!!accountId}\n onCopy={onCopy}\n intensity={80}\n size=\"xs\"\n >\n {accountId}\n </Text.formatted>\n </Flex>\n );\n\n return (\n <Flex\n p={2}\n direction=\"column\"\n gapY={1}\n intensity={900}\n r=\"xl\"\n className=\"oui-font-semibold\"\n >\n <Flex justify=\"between\" width=\"100%\" height=\"18px\">\n {isWeb3Wallet ? (\n <>\n {amountView}\n {statusView}\n </>\n ) : (\n <>\n {accountIdView}\n {amountView}\n </>\n )}\n </Flex>\n\n <Flex justify=\"between\" width=\"100%\" height=\"18px\">\n {timeView}\n {isWeb3Wallet ? txIdView : statusView}\n </Flex>\n </Flex>\n );\n };\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"picker\",\n name: \"target\",\n options: options,\n value: target,\n size: \"md\",\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n className=\"oui-sticky oui-top-[44px] oui-z-10 oui-border-none oui-bg-base-10 oui-px-3 oui-py-2\"\n />\n\n <ListView\n dataSource={dataSource}\n renderItem={renderHistoryItem}\n contentClassName=\"!oui-space-y-1\"\n loadMore={loadMore}\n isLoading={isLoading}\n className=\"oui-px-1\"\n emptyView={\n <Flex\n direction={\"column\"}\n height={\"100%\"}\n itemAlign={\"center\"}\n justify={\"center\"}\n mt={3}\n >\n <EmptyDataState />\n {dataSource?.length == 0 && (\n <Flex\n direction=\"row\"\n itemAlign=\"center\"\n justify=\"center\"\n onClick={onDeposit}\n className=\"oui-mt-2 oui-h-4 oui-w-full oui-text-secondary\"\n >\n <Text color=\"primary\" size=\"2xs\">\n {t(\"common.deposit\")}\n </Text>\n <ArrowRightShortIcon\n className=\"oui-ml-0.5 oui-size-4 oui-text-primary oui-opacity-100\"\n color=\"primary\"\n size={16}\n opacity={100}\n />\n </Flex>\n )}\n </Flex>\n }\n />\n </>\n );\n};\n","import React from \"react\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { DistributionHistoryDesktop } from \"./distribution.ui\";\nimport { DistributionHistoryMobile } from \"./distribution.ui.mobile\";\nimport { useDistributionHistoryHook } from \"./useDataSource.script\";\n\nexport const DistributionHistoryWidget: React.FC = () => {\n const state = useDistributionHistoryHook();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <DistributionHistoryMobile {...state} />;\n }\n return <DistributionHistoryDesktop {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { DataFilter } from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { useColumns } from \"./column\";\nimport { type useDistributionHistoryHookReturn } from \"./useDataSource.script\";\n\ntype FundingHistoryProps = {} & useDistributionHistoryHookReturn;\n\nexport const DistributionHistoryDesktop: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading, isValidating } =\n props;\n const columns = useColumns();\n const { type, dateRange } = queryParameter;\n const { t } = useTranslation();\n\n const TYPES = useMemo(() => {\n return [\n { label: t(\"common.all\"), value: \"All\" },\n {\n label: t(\"portfolio.overview.distribution.type.referralCommission\"),\n value: \"REFERRER_REBATE\",\n },\n {\n label: t(\"portfolio.overview.distribution.type.refereeRebate\"),\n value: \"REFEREE_REBATE\",\n },\n {\n label: t(\"portfolio.overview.distribution.type.brokerFee\"),\n value: \"BROKER_FEE\",\n },\n ];\n }, [t]);\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"type\",\n options: TYPES,\n value: type,\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n />\n <AuthGuardDataTable\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n // isValidating={isValidating}\n className=\"oui-font-semibold\"\n classNames={{\n root: \"oui-h-[calc(100%_-_49px)]\",\n }}\n pagination={props.pagination}\n />\n </>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTranslation, i18n } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, type Column, TokenIcon } from \"@orderly.network/ui\";\n\nexport const useColumns = () => {\n const { t } = useTranslation();\n\n const columns = useMemo(() => {\n return [\n {\n title: t(\"common.token\"),\n dataIndex: \"token\",\n width: 80,\n // rule: \"symbol\",\n render: (value, record) => {\n return (\n <Flex gapX={2}>\n <TokenIcon name={value} size=\"xs\" />\n <span>{value}</span>\n </Flex>\n );\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"updated_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: t(\"common.status\"),\n dataIndex: \"status\",\n width: 120,\n formatter(value, record, index) {\n switch (value) {\n case \"CREATED\":\n case \"SPLIT\":\n return t(\"assetHistory.status.processing\");\n case \"COMPLETED\":\n default:\n return t(\"assetHistory.status.completed\");\n }\n },\n },\n\n {\n title: t(\"common.type\"),\n dataIndex: \"type\",\n width: 80,\n formatter: (value: any) => {\n switch (value) {\n case \"REFERRER_REBATE\":\n return t(\n \"portfolio.overview.distribution.type.referralCommission\",\n );\n case \"REFEREE_REBATE\":\n return t(\"portfolio.overview.distribution.type.refereeRebate\");\n case \"BROKER_FEE\":\n return t(\"portfolio.overview.distribution.type.brokerFee\");\n default:\n return \"-\";\n }\n },\n },\n {\n title: t(\"common.amount\"),\n dataIndex: \"amount\",\n width: 80,\n // rule: \"price\",\n },\n ] as Column<API.FundingFeeRow & { annual_rate: number }>[];\n }, [t]);\n\n return columns;\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { DataFilter, Flex, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { ListView } from \"@orderly.network/ui\";\nimport { type useDistributionHistoryHookReturn } from \"./useDataSource.script\";\n\ntype FundingHistoryProps = {} & useDistributionHistoryHookReturn;\n\nexport const DistributionHistoryMobile: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading, pagination } = props;\n const { type, dateRange } = queryParameter;\n const { t } = useTranslation();\n\n const TYPES = useMemo(() => {\n return [\n { label: t(\"common.all\"), value: \"All\" },\n {\n label: t(\"portfolio.overview.distribution.type.referralCommission\"),\n value: \"REFERRER_REBATE\",\n },\n {\n label: t(\"portfolio.overview.distribution.type.refereeRebate\"),\n value: \"REFEREE_REBATE\",\n },\n {\n label: t(\"portfolio.overview.distribution.type.brokerFee\"),\n value: \"BROKER_FEE\",\n },\n ];\n }, [t]);\n\n const getStatusText = (status: string) => {\n switch (status) {\n case \"CREATED\":\n case \"SPLIT\":\n return t(\"assetHistory.status.processing\") as string;\n case \"COMPLETED\":\n default:\n return t(\"assetHistory.status.completed\") as string;\n }\n };\n\n const getTypeText = (type: string) => {\n switch (type) {\n case \"REFERRER_REBATE\":\n return t(\"portfolio.overview.distribution.type.referralCommission\");\n case \"REFEREE_REBATE\":\n return t(\"portfolio.overview.distribution.type.refereeRebate\");\n case \"BROKER_FEE\":\n return t(\"portfolio.overview.distribution.type.brokerFee\");\n default:\n return \"-\";\n }\n };\n\n const renderItem = (item: any) => {\n return (\n <Flex\n p={2}\n direction=\"column\"\n gapY={2}\n className=\"oui-rounded-xl oui-bg-base-9 oui-font-semibold\"\n >\n <Flex direction=\"row\" justify=\"between\" width=\"100%\" height=\"20px\">\n <Text.formatted\n rule=\"date\"\n className=\"oui-text-2xs oui-text-base-contrast-36\"\n >\n {item.created_time}\n </Text.formatted>\n <Text className=\"oui-text-sm oui-text-base-contrast-80\">\n {getStatusText(item.status)}\n </Text>\n </Flex>\n <div className=\"oui-h-px oui-w-full oui-bg-base-6\" />\n <Flex direction=\"row\" justify=\"between\" width=\"100%\">\n <Flex direction=\"column\">\n <Text className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"common.token\")}\n </Text>\n <Flex gapX={2}>\n <TokenIcon name={item.token} size=\"xs\" />\n <span className=\"oui-text-xs oui-text-base-contrast-80\">\n {item.token}\n </span>\n </Flex>\n </Flex>\n <Flex direction=\"column\">\n <Text className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"common.type\")}\n </Text>\n <Text className=\"oui-text-xs oui-text-base-contrast-80\">\n {getTypeText(item.type)}\n </Text>\n </Flex>\n <Flex direction=\"column\">\n <Text className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"common.amount\")}\n </Text>\n <Text className=\"oui-text-xs oui-text-base-contrast-80\">\n {item.amount}\n </Text>\n </Flex>\n </Flex>\n </Flex>\n );\n };\n\n const loadMore = () => {\n if (dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange &&\n pagination.onPageSizeChange(pagination?.pageSize + 50);\n }\n };\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"picker\",\n name: \"type\",\n options: TYPES,\n value: type,\n size: \"md\",\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n className=\"oui-px-3 oui-py-2 oui-sticky oui-top-[44px] oui-z-10 oui-bg-base-10\"\n />\n <ListView\n dataSource={dataSource}\n renderItem={renderItem}\n contentClassName=\"oui-space-y-1\"\n loadMore={loadMore}\n isLoading={isLoading}\n className=\"oui-px-1\"\n />\n </>\n );\n};\n","import { useDistributionHistory } from \"@orderly.network/hooks\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { useMemo, useState } from \"react\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\n\nexport const useDistributionHistoryHook = () => {\n // const today = useRef(setMinutes(setHours(new Date(), 23), 59));\n\n const [today] = useState(() => {\n const d = new Date();\n\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const [dateRange, setDateRange] = useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n const [type, setType] = useState<string>(\"All\");\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const [data, { isLoading, meta, isValidating }] = useDistributionHistory({\n // dataRange: dateRange.map((date) => date.getTime()),\n dataRange: [\n dateRange[0].getTime(),\n set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n }).getTime(),\n ],\n type,\n pageSize,\n page,\n });\n\n // console.log(\"----\", isLoading, isValidating);\n\n // const res = useQuery(\"v1/public/info/funding_period\");\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"type\") {\n setType(filter.value);\n setPage(1);\n }\n\n if (filter.name === \"dateRange\") {\n // setDateRange([filter.value.from, filter.value.to]);\n setDateRange(parseDateRangeForFilter(filter.value));\n setPage(1);\n }\n };\n\n const pagination = useMemo(\n () => parsePagination(meta),\n [parsePagination, meta]\n );\n\n return {\n dataSource: data,\n isLoading,\n isValidating,\n // onDateRangeChange,\n queryParameter: {\n type,\n dateRange,\n },\n onFilter,\n pagination,\n } as const;\n};\n\nexport type useDistributionHistoryHookReturn = ReturnType<\n typeof useDistributionHistoryHook\n>;\n","import { useScreen } from \"@orderly.network/ui\";\nimport { FundingHistoryDesktop } from \"./fundingHistory.ui\";\nimport { FundingHistoryMobile } from \"./fundingHistory.ui.mobile\";\nimport { useFundingHistoryHook } from \"./useDataSource.script\";\n\nexport const FundingHistoryWidget = () => {\n const state = useFundingHistoryHook();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <FundingHistoryMobile {...state} />;\n }\n return <FundingHistoryDesktop {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { DataFilter } from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { useFundingHistoryColumns } from \"./column\";\nimport { type UseFundingHistoryReturn } from \"./useDataSource.script\";\n\ntype FundingHistoryProps = {} & UseFundingHistoryReturn;\n\nexport const FundingHistoryDesktop: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading } = props;\n const columns = useFundingHistoryColumns();\n const symbols = useSymbolsInfo();\n const { symbol, dateRange } = queryParameter;\n const { t } = useTranslation();\n\n const options = useMemo(() => {\n return [\n {\n label: t(\"common.all\"),\n value: \"All\",\n },\n ...Object.keys(symbols).map((symbol) => {\n const s = symbol.split(\"_\")[1];\n return {\n label: s,\n value: symbol,\n };\n }),\n ];\n }, [t, symbols]);\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"symbol\",\n isCombine: true,\n options,\n value: symbol,\n valueFormatter: (value) => {\n const option = options.find((item) => item.value === value);\n return option?.label || value;\n },\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n />\n <AuthGuardDataTable\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n generatedRowKey={(record) => `${record.updated_time}`}\n classNames={{ root: \"oui-h-[calc(100%_-_49px)]\" }}\n pagination={props.pagination}\n />\n </>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, Text, type Column } from \"@orderly.network/ui\";\n\nexport const useFundingHistoryColumns = () => {\n const { t } = useTranslation();\n\n const columns = useMemo(() => {\n return [\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n width: 80,\n rule: \"symbol\",\n textProps: {\n showIcon: true,\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"created_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: `${t(\"funding.fundingRate\")} / ${t(\"funding.annualRate\")}`,\n dataIndex: \"funding_rate\",\n width: 80,\n render: (value: any, record) => {\n return (\n <Flex gap={1}>\n {/* <span>{`${record.funding_rate * 100}%`}</span> */}\n <Text.numeral rule={\"percentages\"} dp={6}>\n {record.funding_rate}\n </Text.numeral>\n <span>/</span>\n {/* <span>{`${record.annual_rate * 10}%`}</span> */}\n <Text.numeral rule={\"percentages\"} dp={6}>\n {record.annual_rate}\n </Text.numeral>\n </Flex>\n );\n },\n },\n {\n title: t(\"funding.paymentType\"),\n dataIndex: \"payment_type\",\n width: 80,\n render: (value: any) => {\n switch (value) {\n case \"Pay\":\n case \"Paid\":\n return t(\"funding.paymentType.paid\");\n case \"Receive\":\n case \"Received\":\n return t(\"funding.paymentType.received\");\n default:\n return value;\n }\n },\n },\n {\n title: `${t(\"funding.fundingFee\")} (USDC)`,\n dataIndex: \"funding_fee\",\n width: 80,\n rule: \"price\",\n formatter(value, record, index) {\n return Number(value) * -1;\n },\n numeralProps: {\n coloring: true,\n showIdentifier: true,\n ignoreDP: true,\n },\n },\n ] as Column<API.FundingFeeRow & { annual_rate: number }>[];\n }, [t]);\n\n return columns;\n};\n","import { FC } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { DataFilter, Flex, ListView, Text, Badge } from \"@orderly.network/ui\";\nimport { type UseFundingHistoryReturn } from \"./useDataSource.script\";\n\ntype FundingHistoryProps = {} & UseFundingHistoryReturn;\n\nexport const FundingHistoryMobile: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading, pagination } = props;\n const symbols = useSymbolsInfo();\n const { symbol, dateRange } = queryParameter;\n const { t } = useTranslation();\n\n const switchPaymentType = (paymentType: string) => {\n switch (paymentType) {\n case \"Pay\":\n case \"Paid\":\n return t(\"funding.paymentType.paid\");\n case \"Receive\":\n case \"Received\":\n return t(\"funding.paymentType.received\");\n default:\n return paymentType;\n }\n };\n\n const loadMore = () => {\n if (dataSource && dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange?.(pagination?.pageSize + 50);\n }\n };\n\n const renderHistoryItem = (item: any) => {\n return (\n <Flex\n p={2}\n direction=\"column\"\n gapY={2}\n className=\"oui-rounded-xl oui-bg-base-9 oui-font-semibold\"\n >\n <Flex direction=\"row\" justify=\"between\" width=\"100%\" height=\"20px\">\n <Text.formatted\n rule=\"symbol\"\n className=\"oui-text-base-contrast oui-mr-1 oui-text-sm\"\n >\n {item.symbol}\n </Text.formatted>\n <Badge color=\"neutral\" size=\"xs\">\n {switchPaymentType(item.payment_type)}\n </Badge>\n <Text.formatted\n rule=\"date\"\n className=\"oui-text-base-contrast-36 oui-text-2xs oui-ml-auto\"\n >\n {item.created_time}\n </Text.formatted>\n </Flex>\n <div className=\"oui-w-full oui-h-[1px] oui-bg-base-6\" />\n <Flex direction=\"row\" justify=\"between\" width=\"100%\">\n <Flex direction=\"column\">\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"funding.fundingRate\")}\n </Text>\n <Text.numeral\n rule={\"percentages\"}\n dp={6}\n className=\"oui-text-base-contrast-80 oui-text-xs\"\n >\n {item.funding_rate}\n </Text.numeral>\n </Flex>\n <Flex direction=\"column\">\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"funding.annualRate\")}\n </Text>\n <Text.numeral\n rule={\"percentages\"}\n dp={6}\n className=\"oui-text-base-contrast-80 oui-text-xs\"\n >\n {item.annual_rate}\n </Text.numeral>\n </Flex>\n <Flex direction=\"column\">\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"funding.fundingFee\")}{\" \"}\n <Text className=\"oui-text-base-contrast-20\">(USDC)</Text>\n </Text>\n <Text.numeral\n dp={6}\n ignoreDP={true}\n coloring={true}\n showIdentifier={true}\n className=\"oui-text-xs oui-self-end\"\n >\n {Number(item.funding_fee) * -1}\n </Text.numeral>\n </Flex>\n </Flex>\n </Flex>\n );\n };\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"symbol\",\n isCombine: true,\n options: [\n {\n label: \"All\",\n value: \"All\",\n },\n ...Object.keys(symbols).map((symbol) => {\n const s = symbol.split(\"_\")[1];\n return {\n label: s,\n value: symbol,\n };\n }),\n ],\n value: symbol,\n valueFormatter: (value) => {\n if (value === \"All\") {\n return \"All\";\n }\n return value.split(\"_\")[1];\n },\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n className=\"oui-px-3 oui-py-2 oui-sticky oui-top-[44px] oui-z-10 oui-bg-base-10\"\n />\n <ListView\n dataSource={dataSource}\n renderItem={renderHistoryItem}\n contentClassName=\"!oui-space-y-1\"\n loadMore={loadMore}\n isLoading={isLoading}\n className=\"oui-px-1\"\n />\n </>\n );\n};\n","import { useFundingFeeHistory } from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { useMemo, useState } from \"react\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\n\nexport const useFundingHistoryHook = () => {\n // const today = useRef(setMinutes(setHours(new Date(), 23), 59));\n\n const [today] = useState(() => {\n const d = new Date();\n\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const [dateRange, setDateRange] = useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n\n const [symbol, setSymbol] = useState<string>(\"All\");\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const [data, { isLoading, meta, isValidating }] = useFundingFeeHistory(\n {\n // dataRange: dateRange.map((date) => date.getTime()),\n dataRange: [\n dateRange[0].getTime(),\n set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n })\n // addDays(dateRange[1], 1)\n .getTime(),\n ],\n symbol,\n page,\n pageSize,\n },\n {\n keepPreviousData: true,\n }\n );\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"symbol\") {\n setSymbol(filter.value);\n setPage(1);\n }\n\n if (filter.name === \"dateRange\") {\n // setDateRange([filter.value.from, filter.value.to]);\n setDateRange(parseDateRangeForFilter(filter.value));\n setPage(1);\n }\n };\n\n const pagination = useMemo(\n () => parsePagination(meta),\n [parsePagination, meta]\n );\n\n return {\n dataSource: data,\n isLoading,\n isValidating,\n // onDateRangeChange,\n queryParameter: {\n symbol,\n dateRange,\n },\n onFilter,\n pagination,\n } as const;\n};\n\nexport type UseFundingHistoryReturn = ReturnType<typeof useFundingHistoryHook>;\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { AssetHistorySideEnum } from \"@orderly.network/types\";\nimport { TabPanel, Tabs } from \"@orderly.network/ui\";\nimport { ConvertHistoryWidget } from \"../../assets/convert.widget\";\nimport { AssetHistoryWidget } from \"../assetHistory\";\nimport { DistributionHistoryWidget } from \"../distribution\";\nimport { FundingHistoryWidget } from \"../funding\";\nimport { TabName } from \"./historyDataGroup.script\";\n\nexport const HistoryDataGroupMobile = (props: {\n active?: TabName;\n onTabChange: (tab: string) => void;\n}) => {\n const { active = \"deposit\", onTabChange } = props;\n const { t } = useTranslation();\n\n return (\n <Tabs\n value={active}\n onValueChange={onTabChange}\n variant=\"contained\"\n size=\"lg\"\n classNames={{\n tabsList: \"oui-px-3 oui-py-2\",\n scrollIndicator: \"oui-pr-3\",\n }}\n showScrollIndicator\n >\n <TabPanel title={t(\"common.deposits\")} value={\"deposit\"}>\n <AssetHistoryWidget side={AssetHistorySideEnum.DEPOSIT} />\n </TabPanel>\n <TabPanel title={t(\"common.withdrawals\")} value={\"withdraw\"}>\n <AssetHistoryWidget side={AssetHistorySideEnum.WITHDRAW} />\n </TabPanel>\n <TabPanel title={t(\"common.funding\")} value={\"funding\"}>\n <FundingHistoryWidget />\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.distribution\")}\n value={\"distribution\"}\n >\n <DistributionHistoryWidget />\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.tab.convert.history\")}\n value={\"convert\"}\n >\n <ConvertHistoryWidget />\n </TabPanel>\n </Tabs>\n );\n};\n","import { useScreen } from \"@orderly.network/ui\";\nimport { useConvertScript } from \"./convert.script\";\nimport { ConvertDesktopUI } from \"./convert.ui.desktop\";\nimport { ConvertMobileUI } from \"./convert.ui.mobile\";\n\nexport const ConvertHistoryWidget = () => {\n const convertState = useConvertScript();\n const { isMobile } = useScreen();\n\n if (isMobile) {\n return <ConvertMobileUI convertState={convertState} />;\n }\n\n return <ConvertDesktopUI convertState={convertState} />;\n};\n","import React, { useMemo, useState } from \"react\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\nimport {\n useAccount,\n useCollateral,\n useIndexPricesStream,\n useSubAccountQuery,\n useQuery,\n useTokensInfo,\n} from \"@orderly.network/hooks\";\nimport { EMPTY_LIST } from \"@orderly.network/types\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { useAccountsData } from \"../../hooks/useAccountsData\";\nimport { useAssetsAccountFilter } from \"../../hooks/useAssetsAccountFilter\";\nimport { parseDateRangeForFilter } from \"../overview/helper/date\";\nimport { ConvertRecord } from \"./type\";\n\nexport const useConvertScript = () => {\n const { isMainAccount, state } = useAccount();\n const { holding = [] } = useCollateral();\n const { data: indexPrices } = useIndexPricesStream();\n\n const { data: chainsInfo } = useQuery(\"/v1/public/chain_info\", {\n revalidateOnFocus: false,\n });\n\n // Pagination\n const { page, pageSize, setPage, parsePagination } = usePagination({\n page: 1,\n pageSize: 20,\n });\n\n // Use the same account data structure as assets\n const allAccounts = useAccountsData();\n\n const tokensInfo = useTokensInfo();\n\n // Use the same account filter logic as assets\n const { selectedAccount, onAccountFilter } =\n useAssetsAccountFilter(allAccounts);\n\n // Simple date range handling like other scripts\n const [today] = useState(() => {\n const d = new Date();\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const [dateRange, setDateRange] = useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n\n // Filter states (matching API fields)\n const [statusFilter, setStatusFilter] = useState<string>(\"all\");\n const [convertedAssetFilter, setConvertedAssetFilter] =\n useState<string>(\"all\");\n\n // Create asset options from holding data - similar to assets script\n const convertedAssetOptions = useMemo(() => {\n // Create options array\n const assetOptions =\n tokensInfo?.map((item: any) => ({\n value: item.token,\n label: item.token,\n })) || [];\n\n return [{ label: \"All assets\", value: \"all\" }, ...assetOptions];\n }, [tokensInfo]);\n\n // Handle all filters (including account filter and date range)\n const onFilter = React.useCallback(\n (filter: { name: string; value: string | { from: Date; to: Date } }) => {\n const { name, value } = filter;\n\n // Delegate account filter to the hook\n if (name === \"account\") {\n onAccountFilter(filter as { name: string; value: string });\n } else if (name === \"status\") {\n setStatusFilter(value as string);\n setPage(1); // Reset to first page when filter changes\n } else if (name === \"converted_asset\") {\n setConvertedAssetFilter(value as string);\n setPage(1);\n } else if (name === \"time\" || name === \"dateRange\") {\n setDateRange(\n parseDateRangeForFilter(value as { from: Date; to: Date }),\n );\n setPage(1);\n }\n },\n [onAccountFilter, setPage],\n );\n\n // Build query URL with parameters\n const queryUrl = React.useMemo(() => {\n const params = new URLSearchParams();\n\n // Add pagination parameters\n params.set(\"page\", page.toString());\n params.set(\"size\", pageSize.toString());\n\n // Add date range parameters\n if (dateRange[0]) {\n params.set(\"start_t\", dateRange[0].getTime().toString());\n }\n if (dateRange[1]) {\n params.set(\n \"end_t\",\n set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n })\n .getTime()\n .toString(),\n );\n }\n\n // Add filter parameters (only if not \"all\")\n if (statusFilter !== \"all\") {\n params.set(\"status\", statusFilter);\n }\n\n if (convertedAssetFilter !== \"all\") {\n params.set(\"converted_asset\", convertedAssetFilter);\n }\n\n return `/v1/asset/convert_history?${params.toString()}`;\n }, [page, pageSize, dateRange, statusFilter, convertedAssetFilter]);\n\n // Query convert history with all parameters\n const { data, isLoading } = useSubAccountQuery<{\n rows: ConvertRecord[];\n meta: {\n total: number;\n current_page: number;\n records_per_page: number;\n };\n }>(queryUrl, {\n accountId: isMainAccount ? state.mainAccountId : state.accountId,\n formatter: (data) => {\n return data;\n },\n });\n\n // Parse pagination from API response meta\n const pagination = useMemo(() => {\n if (data?.meta) {\n return parsePagination(data.meta);\n }\n return {\n page,\n pageSize,\n onPageChange: setPage,\n onPageSizeChange: (size: number) => {\n // Handle page size change if needed\n },\n };\n }, [data?.meta, parsePagination, page, pageSize, setPage]);\n\n // Calculate summary\n const summary = useMemo(() => {\n const dataRows = data?.rows || [];\n\n const totalConversions = dataRows.length;\n const totalUSDCReceived = dataRows.reduce(\n (sum, record) => sum + record.received_qty,\n 0,\n );\n const totalFees = dataRows.reduce(\n (sum, record) =>\n sum +\n record.details.reduce(\n (detailSum, detail) => detailSum + detail.haircut,\n 0,\n ),\n 0,\n );\n\n return {\n totalConversions,\n totalUSDCReceived,\n totalFees,\n };\n }, [data]);\n\n return {\n // Data\n dataSource: data?.rows || EMPTY_LIST,\n summary,\n pagination,\n\n // Filter state and handlers (compatible with assets)\n selectedAccount,\n onFilter,\n\n // Query parameters (consistent with other scripts)\n dateRange,\n\n // Filter states\n statusFilter,\n convertedAssetFilter,\n convertedAssetOptions,\n\n // State\n isMainAccount,\n isLoading,\n holding,\n\n // Index prices\n indexPrices,\n chainsInfo,\n };\n};\n\nexport type UseConvertScriptReturn = ReturnType<typeof useConvertScript>;\n","import { useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport { SubAccount, useAccount, useCollateral } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport type { API } from \"@orderly.network/types\";\n\nconst EMPTY_HOLDING: Partial<API.Holding> = {\n token: \"USDC\",\n holding: 0,\n frozen: 0,\n};\n\n// Account data structure used in assets display\nexport interface AccountWithChildren {\n account_id: string;\n id?: string;\n description?: string;\n children: Array<API.Holding & { account_id: string }>;\n}\n\n// Hook to transform raw account data into display format\nexport const useAccountsData = (): AccountWithChildren[] => {\n const { t } = useTranslation();\n const { state, isMainAccount } = useAccount();\n const { holding = [] } = useCollateral();\n const subAccounts = state.subAccounts ?? [];\n\n return useMemo(() => {\n return produce<any[]>(subAccounts, (draft) => {\n // Process sub accounts\n for (const sub of draft) {\n sub.account_id = sub.id;\n if (Array.isArray(sub.holding) && sub.holding.length) {\n sub.children = sub.holding.map((item: API.Holding) => ({\n ...item,\n account_id: sub.id,\n }));\n } else {\n sub.children = [{ ...EMPTY_HOLDING, account_id: sub.id }];\n }\n // Remove original holding to avoid confusion\n Reflect.deleteProperty(sub, \"holding\");\n }\n\n // Add main account at the beginning if user is main account\n if (isMainAccount) {\n draft.unshift({\n account_id: state.mainAccountId!,\n description: t(\"common.mainAccount\"),\n children:\n Array.isArray(holding) && holding.length\n ? holding.map((item: API.Holding) => ({\n ...item,\n account_id: state.mainAccountId!,\n }))\n : [\n {\n ...EMPTY_HOLDING,\n account_id: state.mainAccountId!,\n },\n ],\n });\n }\n });\n }, [holding, subAccounts, isMainAccount, state.mainAccountId, t]);\n};\n","import React, { useMemo } from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { AccountType } from \"../pages/assets/assets.ui\";\n\n// Account filter hook for assets-like data structures\nexport const useAssetsAccountFilter = <T extends { account_id?: string }>(\n data: T[],\n) => {\n const { state, isMainAccount } = useAccount();\n const [selectedAccount, setSelectedAccount] = React.useState<string>(\n AccountType.ALL,\n );\n\n // Filter data based on selected account\n const filteredData = useMemo(() => {\n return data.filter((item) => {\n if (isMainAccount) {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return item.account_id === state.mainAccountId;\n } else {\n return item.account_id === selectedAccount;\n }\n } else {\n return item.account_id === state.accountId;\n }\n });\n }, [data, selectedAccount, isMainAccount, state]);\n\n // Handle filter changes\n const onAccountFilter = React.useCallback(\n (filter: { name: string; value: string }) => {\n const { name, value } = filter;\n if (name === \"account\") {\n setSelectedAccount(value);\n }\n },\n [],\n );\n\n return {\n selectedAccount,\n filteredData,\n onAccountFilter,\n setSelectedAccount,\n };\n};\n\n// Enhanced account and asset combined filter hook\nexport const useAssetsMultiFilter = <\n T extends {\n account_id?: string;\n children?: Array<{ token: string; [key: string]: any }>;\n },\n>(\n data: T[],\n) => {\n const { state, isMainAccount } = useAccount();\n const [selectedAccount, setSelectedAccount] = React.useState<string>(\n AccountType.ALL,\n );\n const [selectedAsset, setSelectedAsset] = React.useState<string>(\"all\");\n\n // Filter data based on both account and asset\n const filteredData = useMemo(() => {\n let accountFiltered = data;\n\n // First apply account filter\n if (isMainAccount) {\n if (selectedAccount && selectedAccount !== AccountType.ALL) {\n if (selectedAccount === AccountType.MAIN) {\n accountFiltered = data.filter(\n (item) => item.account_id === state.mainAccountId,\n );\n } else {\n accountFiltered = data.filter(\n (item) => item.account_id === selectedAccount,\n );\n }\n }\n } else {\n accountFiltered = data.filter(\n (item) => item.account_id === state.accountId,\n );\n }\n\n // Then apply asset filter\n if (selectedAsset && selectedAsset !== \"all\") {\n accountFiltered = accountFiltered\n .map((account) => {\n if (account.children) {\n const filteredChildren = account.children.filter(\n (child) => child.token === selectedAsset,\n );\n // Only include accounts that have the selected asset\n return filteredChildren.length > 0\n ? { ...account, children: filteredChildren }\n : null;\n }\n return account;\n })\n .filter(Boolean) as T[];\n }\n\n return accountFiltered;\n }, [data, selectedAccount, selectedAsset, isMainAccount, state]);\n\n // Handle combined filter changes\n const onFilter = React.useCallback(\n (filter: { name: string; value: string }) => {\n const { name, value } = filter;\n if (name === \"account\") {\n setSelectedAccount(value);\n } else if (name === \"asset\") {\n setSelectedAsset(value);\n }\n },\n [],\n );\n\n return {\n selectedAccount,\n selectedAsset,\n filteredData,\n onFilter,\n setSelectedAccount,\n setSelectedAsset,\n };\n};\n\n// Generic account filter function that can be used standalone\nexport const filterByAccount = <T extends { account_id?: string }>(\n data: T[],\n selectedAccount: string,\n accountState: {\n isMainAccount: boolean;\n state: {\n mainAccountId?: string;\n accountId?: string;\n };\n },\n): T[] => {\n const { isMainAccount, state } = accountState;\n\n return data.filter((item) => {\n if (isMainAccount) {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return item.account_id === state.mainAccountId;\n } else {\n return item.account_id === selectedAccount;\n }\n } else {\n return item.account_id === state.accountId;\n }\n });\n};\n","import React, { useMemo } from \"react\";\nimport pick from \"ramda/es/pick\";\nimport { SubAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport {\n Text,\n Card,\n Flex,\n gradientTextVariants,\n EyeIcon,\n EyeCloseIcon,\n cn,\n DataFilter,\n formatAddress,\n Tabs,\n TabPanel,\n ArrowDownShortIcon,\n Button,\n} from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport type { SelectOption } from \"@orderly.network/ui/src/select/withOptions\";\nimport type { useAssetsScriptReturn } from \"./assets.script\";\nimport type { AssetsWidgetProps } from \"./assets.widget\";\nimport { ConvertHistoryWidget } from \"./convert.widget\";\n\nexport type AssetsProps = useAssetsScriptReturn;\n\nexport enum AccountType {\n ALL = \"All accounts\",\n MAIN = \"Main accounts\",\n}\n\nconst TotalValue: React.FC<\n Readonly<\n Pick<AssetsWidgetProps, \"totalValue\" | \"visible\" | \"onToggleVisibility\">\n >\n> = (props) => {\n const { totalValue, visible, onToggleVisibility } = props;\n const { t } = useTranslation();\n const Icon = visible ? EyeIcon : EyeCloseIcon;\n return (\n <Flex direction=\"column\" gap={1} className=\"oui-text-2xs\" itemAlign=\"start\">\n <Flex gap={1} justify=\"start\" itemAlign=\"center\">\n <Text size=\"2xs\" color=\"neutral\" weight=\"semibold\">\n {t(\"common.totalValue\")}\n </Text>\n <button onClick={onToggleVisibility}>\n <Icon size={18} className={cn(\"oui-text-base-contrast-54\")} />\n </button>\n </Flex>\n <Flex justify={\"start\"} itemAlign=\"end\" gap={1}>\n <Text.numeral\n visible={visible}\n weight=\"bold\"\n size=\"2xl\"\n className={gradientTextVariants({ color: \"brand\" })}\n as=\"div\"\n padding={false}\n dp={2}\n >\n {totalValue ?? \"--\"}\n </Text.numeral>\n <Text as=\"div\" weight=\"bold\">\n USDC\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst DepositAndWithdrawButton: React.FC<\n Readonly<\n Pick<AssetsWidgetProps, \"isMainAccount\" | \"onWithdraw\" | \"onDeposit\">\n >\n> = (props) => {\n const { t } = useTranslation();\n const { isMainAccount, onWithdraw, onDeposit } = props;\n const { wrongNetwork, disabledConnect } = useAppContext();\n if (!isMainAccount) {\n return null;\n }\n const mergedDisabled = wrongNetwork || disabledConnect;\n return (\n <Flex\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n itemAlign=\"center\"\n gap={3}\n >\n <Button\n disabled={mergedDisabled}\n data-testid=\"oui-testid-assetView-deposit-button\"\n fullWidth\n size=\"md\"\n onClick={onDeposit}\n >\n <ArrowDownShortIcon\n color=\"white\"\n opacity={mergedDisabled ? 0.4 : 1}\n className=\"oui-rotate-0\"\n />\n <Text>{t(\"common.deposit\")}</Text>\n </Button>\n <Button\n fullWidth\n disabled={mergedDisabled}\n color=\"secondary\"\n size=\"md\"\n onClick={onWithdraw}\n data-testid=\"oui-testid-assetView-withdraw-button\"\n >\n <ArrowDownShortIcon\n color=\"white\"\n opacity={mergedDisabled ? 0.4 : 1}\n className=\"oui-rotate-180\"\n />\n <Text>{t(\"common.withdraw\")}</Text>\n </Button>\n </Flex>\n );\n};\n\nexport const AssetsTable: React.FC<Readonly<AssetsWidgetProps>> = (props) => {\n const {\n state,\n isMainAccount,\n selectedAccount,\n selectedAsset,\n columns,\n dataSource,\n onFilter,\n assetsOptions,\n } = props;\n\n const { t } = useTranslation();\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const ALL_ASSETS: SelectOption = {\n label: t(\"common.allAssets\", \"All assets\"),\n value: \"all\",\n };\n\n const subAccounts = useMemo<SubAccount[]>(() => {\n return state.subAccounts ?? [];\n }, [state.subAccounts]);\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [ALL_ACCOUNTS, MAIN_ACCOUNT, subAccounts]);\n\n // Create asset options from holding data - optimized and simplified\n const memoizedAssetOptions = useMemo(() => {\n return [ALL_ASSETS, ...assetsOptions];\n }, [ALL_ASSETS, assetsOptions]);\n\n return (\n <Card\n className={\"oui-bg-transparent oui-p-0\"}\n classNames={{ content: \"!oui-pt-0\" }}\n >\n <Tabs\n defaultValue=\"assets\"\n variant=\"contained\"\n classNames={{ tabsList: \"\" }}\n size=\"lg\"\n >\n <TabPanel value=\"assets\" className=\"\" title={t(\"common.assets\")}>\n <Flex\n className=\"oui-rounded-xl oui-bg-base-9 oui-p-6\"\n direction={\"row\"}\n itemAlign={\"center\"}\n justify={\"between\"}\n my={4}\n >\n <TotalValue\n {...pick([\"totalValue\", \"visible\", \"onToggleVisibility\"], props)}\n />\n <DepositAndWithdrawButton\n {...pick([\"isMainAccount\", \"onDeposit\", \"onWithdraw\"], props)}\n />\n </Flex>\n {isMainAccount && (\n <DataFilter\n className=\"oui-border-none oui-py-0\"\n onFilter={onFilter}\n items={[\n {\n type: \"select\",\n name: \"account\",\n value: selectedAccount,\n options: memoizedOptions,\n },\n {\n type: \"select\",\n name: \"asset\",\n value: selectedAsset,\n options: memoizedAssetOptions,\n },\n ]}\n />\n )}\n {dataSource.map((item, index) => {\n return (\n <Flex\n key={`item-${index}`}\n className=\"oui-rounded-xl oui-bg-base-9 oui-p-6\"\n direction={\"column\"}\n itemAlign={\"start\"}\n justify={\"between\"}\n my={4}\n >\n <Text\n className=\"oui-mb-4\"\n intensity={98}\n weight=\"semibold\"\n size=\"lg\"\n >\n {item?.description || formatAddress(item?.id ?? \"\")}\n </Text>\n <AuthGuardDataTable\n bordered\n className=\"oui-font-semibold\"\n classNames={{\n root: \"oui-bg-transparent\",\n scroll: \"oui-min-h-0\",\n }}\n columns={columns}\n dataSource={item.children}\n />\n </Flex>\n );\n })}\n </TabPanel>\n <TabPanel\n className=\"oui-rounded-xl oui-bg-base-9 oui-px-6\"\n value=\"convertHistory\"\n title={t(\"portfolio.overview.tab.convert.history\")}\n >\n <ConvertHistoryWidget />\n </TabPanel>\n </Tabs>\n </Card>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n DataFilter,\n Flex,\n DataTable,\n modal,\n SimpleDialog,\n Divider,\n} from \"@orderly.network/ui\";\nimport { useModal } from \"@orderly.network/ui\";\nimport { useConvertColumns, useConvertDetailColumns } from \"./convert.column\";\nimport { useConvertScript } from \"./convert.script\";\nimport type { ConvertRecord } from \"./type\";\n\ntype ConvertDesktopUIProps = {\n convertState: ReturnType<typeof useConvertScript>;\n};\n\nexport const CONVERT_STATUS_OPTIONS = [\n {\n label: \"All status\",\n value: \"all\",\n },\n {\n label: \"Completed\",\n value: \"completed\",\n },\n {\n label: \"Pending\",\n value: \"pending\",\n },\n];\n\n// Convert Details Modal Component\nconst ConvertDetailsModal = modal.create<{\n record: ConvertRecord;\n indexPrices: Record<string, number>;\n chainsInfo: any[];\n}>((props) => {\n const { t } = useTranslation();\n const { visible, onOpenChange } = useModal();\n // console.log(props);\n\n const detailColumns = useConvertDetailColumns({\n indexPrices: props.indexPrices,\n chainsInfo: props.chainsInfo,\n });\n\n return (\n <SimpleDialog\n open={visible}\n onOpenChange={onOpenChange}\n title={t(\"portfolio.overview.convert.dialog.title.details\")}\n size=\"lg\"\n closable\n classNames={{\n content: \"oui-max-w-4xl\",\n }}\n >\n <DataTable\n columns={detailColumns}\n dataSource={props.record.details}\n bordered\n className=\"oui-w-full\"\n classNames={{\n header: \"oui-h-10\",\n root: \"oui-bg-base-8 oui-max-h-[60vh] oui-overflow-y-scroll\",\n }}\n onRow={() => ({\n className: \"oui-h-[40px]\",\n })}\n generatedRowKey={(record) =>\n record.transaction_id || Math.random().toString()\n }\n />\n </SimpleDialog>\n );\n});\n\nexport const ConvertDesktopUI: React.FC<ConvertDesktopUIProps> = ({\n convertState,\n}) => {\n const handleDetailsClick = (convertId: number) => {\n // Find the convert record by ID\n const record = convertState.dataSource.find(\n (item) => item.convert_id === convertId,\n );\n if (record) {\n modal.show(ConvertDetailsModal, {\n record,\n indexPrices: convertState.indexPrices,\n chainsInfo: convertState.chainsInfo as any,\n });\n }\n };\n\n const columns = useConvertColumns({\n onDetailsClick: handleDetailsClick,\n });\n\n const {\n convertedAssetFilter,\n statusFilter,\n dateRange,\n onFilter,\n convertedAssetOptions,\n } = convertState;\n\n const dataFilter = useMemo(() => {\n return (\n <DataFilter\n className=\"\"\n onFilter={onFilter}\n items={[\n // {\n // type: \"select\",\n // name: \"account\",\n // value: selectedAccount,\n // options: memoizedOptions,\n // },\n {\n type: \"select\",\n name: \"converted_asset\",\n value: convertedAssetFilter,\n options: convertedAssetOptions,\n },\n {\n type: \"select\",\n name: \"status\",\n value: statusFilter,\n options: CONVERT_STATUS_OPTIONS,\n },\n {\n type: \"range\",\n name: \"time\",\n value: {\n from: dateRange?.[0],\n to: dateRange?.[1],\n },\n },\n ]}\n />\n );\n }, [\n convertedAssetFilter,\n statusFilter,\n dateRange,\n onFilter,\n convertedAssetOptions,\n ]);\n\n return (\n <Flex direction=\"column\" mt={4} itemAlign=\"center\" className=\"oui-w-full\">\n <Divider className=\"oui-w-full oui-border-b oui-border-line-4 oui-pt-6\" />\n <Flex direction=\"row\" className=\"oui-w-full\">\n {dataFilter}\n </Flex>\n <DataTable\n columns={columns}\n dataSource={convertState.dataSource}\n loading={convertState.isLoading}\n bordered\n pagination={convertState.pagination}\n manualPagination\n className=\"oui-mt-4 oui-w-full\"\n classNames={{\n root: \"oui-h-[calc(100vh_-_200px)]\",\n header: \"oui-h-12\",\n }}\n onRow={() => ({\n className: \"oui-h-[48px] oui-cursor-pointer\",\n })}\n generatedRowKey={(record) => {\n return record.convert_id.toString();\n }}\n />\n </Flex>\n );\n};\n","import React, { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Button,\n Flex,\n Text,\n TokenIcon,\n Tooltip,\n toast,\n} from \"@orderly.network/ui\";\nimport type { Column } from \"@orderly.network/ui\";\nimport type { ConvertRecord, ConvertTransaction } from \"./type\";\n\nexport interface ConvertColumnsOptions {\n onDetailsClick?: (convertId: number) => void;\n}\n\nexport interface ConvertDetailColumnsOptions {\n onTxClick?: (txId: string) => void;\n indexPrices: Record<string, number>;\n chainsInfo: any[];\n}\n\nexport const ConvertedAssetColumn = ({\n convertedAssets,\n}: {\n convertedAssets: Record<string, number>;\n}) => {\n const { t } = useTranslation();\n const assets = useMemo(() => {\n return Object.keys(convertedAssets);\n }, [convertedAssets]);\n\n const tooltipContent = useMemo(() => {\n return (\n <Flex\n direction=\"column\"\n gap={2}\n className=\"oui-w-[275px] oui-font-semibold oui-text-base-contrast-80\"\n >\n <Flex\n itemAlign=\"center\"\n justify=\"between\"\n className=\"oui-w-full oui-text-2xs oui-text-base-contrast-36\"\n >\n <div>{t(\"common.assets\")}</div>\n <div>{t(\"common.qty\")}</div>\n </Flex>\n {assets.map((asset) => (\n <Flex\n key={asset}\n itemAlign=\"center\"\n justify=\"between\"\n className=\"oui-w-full\"\n >\n <Flex itemAlign=\"center\" gap={1}>\n <TokenIcon size=\"xs\" name={asset} />\n <Text.formatted>{asset}</Text.formatted>\n </Flex>\n <div>\n <Text.formatted>{convertedAssets[asset]}</Text.formatted>\n </div>\n </Flex>\n ))}\n </Flex>\n );\n }, [assets]);\n\n return (\n <Flex itemAlign=\"center\" gap={2}>\n <div className=\"oui-relative oui-flex\">\n {assets.slice(0, 3).map((asset, index) => (\n <div\n key={asset}\n className=\"oui-relative\"\n style={{\n marginLeft: index > 0 ? \"-8px\" : \"0\",\n zIndex: assets.length + index,\n }}\n >\n <TokenIcon size=\"xs\" name={asset} />\n </div>\n ))}\n </div>\n <Tooltip content={tooltipContent}>\n <Text.formatted className=\"oui-cursor-pointer oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\">\n {assets.slice(0, 3).join(\", \")}{\" \"}\n {assets.length > 3 && `+${assets.length - 3}`}\n </Text.formatted>\n </Tooltip>\n </Flex>\n );\n};\n\nexport const useConvertColumns = (options: ConvertColumnsOptions) => {\n const { onDetailsClick } = options;\n const { t } = useTranslation();\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n\n const columns = React.useMemo<Column[]>(() => {\n return [\n {\n title: t(\"portfolio.overview.column.convert.convertedAsset\"),\n dataIndex: \"converted_asset\",\n align: \"left\",\n width: 200,\n maxWidth: 200,\n render(convertedAssets: Record<string, number>) {\n return <ConvertedAssetColumn convertedAssets={convertedAssets} />;\n },\n },\n {\n title: t(\"portfolio.overview.column.convert.usdcAmount\"),\n dataIndex: \"received_qty\",\n align: \"left\",\n width: 150,\n render(qty: number, record: ConvertRecord) {\n return (\n <Text.numeral dp={6} padding={false}>\n {qty}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.fee\"),\n dataIndex: \"details\",\n align: \"left\",\n width: 120,\n render(details: ConvertRecord[\"details\"]) {\n const totalHaircut = details.reduce(\n (sum, detail) => sum + detail.haircut,\n 0,\n );\n return (\n <Text.numeral dp={6} padding={false}>\n {totalHaircut}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.type\"),\n dataIndex: \"type\",\n align: \"left\",\n width: 150,\n render(type: string) {\n return <Text>{type.charAt(0).toUpperCase() + type.slice(1)}</Text>;\n },\n },\n {\n title: t(\"portfolio.overview.column.convert.convertId\"),\n dataIndex: \"convert_id\",\n align: \"left\",\n width: 150,\n render(convertId: number) {\n return (\n <Text.formatted onCopy={onCopy} copyable>\n {convertId}\n </Text.formatted>\n );\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"created_time\",\n align: \"left\",\n width: 160,\n rule: \"date\",\n },\n {\n title: t(\"common.status\"),\n dataIndex: \"status\",\n align: \"left\",\n width: 150,\n render(status: string) {\n return (\n <Text>{status.charAt(0).toUpperCase() + status.slice(1)}</Text>\n );\n },\n },\n {\n title: \"\",\n dataIndex: \"updated_time\",\n align: \"center\",\n width: 80,\n render(convertId: number, record: ConvertRecord) {\n return (\n <Button\n size=\"sm\"\n variant=\"text\"\n className=\"oui-text-primary\"\n onClick={() => onDetailsClick?.(record.convert_id)}\n >\n {t(\"portfolio.overview.column.convert.details\")}\n </Button>\n );\n },\n },\n ];\n }, [onDetailsClick]);\n\n return columns;\n};\n\n// Converted asset, Qty., USDC amount, Fee, TxID, Network, Status\nexport const useConvertDetailColumns = (\n options: ConvertDetailColumnsOptions,\n) => {\n const { t } = useTranslation();\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n const columns = React.useMemo<Column[]>(() => {\n return [\n {\n title: t(\"portfolio.overview.column.convert.convertedAsset\"),\n dataIndex: \"converted_asset\",\n align: \"left\",\n width: 150,\n render(asset: string) {\n return (\n <Flex itemAlign=\"center\" gap={2}>\n <TokenIcon name={asset} />\n {asset}\n </Flex>\n );\n },\n },\n {\n title: t(\"common.qty\"),\n dataIndex: \"converted_qty\",\n align: \"left\",\n width: 100,\n render(qty: number, record: ConvertTransaction) {\n return (\n <Text.numeral dp={6} padding={false}>\n {qty}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.convert.usdcAmount\"),\n dataIndex: \"received_qty\",\n align: \"left\",\n width: 100,\n render(qty: number, record: ConvertTransaction) {\n return (\n <Text.numeral dp={6} padding={false}>\n {qty}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.fee\"),\n dataIndex: \"haircut\",\n align: \"left\",\n width: 100,\n render(haircut: number) {\n return (\n <Text.numeral dp={6} padding={false}>\n {haircut}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.txId\"),\n dataIndex: \"tx_id\",\n align: \"left\",\n width: 150,\n render(txId: string, record: ConvertTransaction) {\n if (!txId) return <Text intensity={54}>-</Text>;\n const chainInfo = (options.chainsInfo as any[])?.find(\n (item) => record.chain_id === parseInt(item.chain_id),\n );\n const explorer_base_url = chainInfo?.explorer_base_url;\n const href = `${explorer_base_url}/tx/${txId}`;\n return (\n <a href={href} target=\"_blank\" rel=\"noreferrer\">\n <Text.formatted\n onCopy={onCopy}\n rule=\"txId\"\n copyable={!!txId}\n className=\"oui-cursor-pointer oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\"\n >\n {txId}\n </Text.formatted>\n </a>\n );\n },\n },\n {\n title: t(\"transfer.network\"),\n dataIndex: \"chain_id\",\n align: \"left\",\n width: 150,\n render(venue: string, record: ConvertTransaction) {\n return (\n <Text>\n {options.chainsInfo.find(\n (item) => item.chain_id == record.chain_id,\n )?.name || \"-\"}\n </Text>\n );\n },\n },\n {\n title: t(\"common.result\"),\n dataIndex: \"result\",\n align: \"left\",\n width: 100,\n render(result: string) {\n return (\n <Text>{result?.charAt(0).toUpperCase() + result?.slice(1)}</Text>\n );\n },\n },\n ];\n }, []);\n\n return columns;\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n useModal,\n modal,\n Text,\n Divider,\n TokenIcon,\n Flex,\n DataFilter,\n SimpleSheet,\n toast,\n ScrollIndicator,\n} from \"@orderly.network/ui\";\nimport { ConvertedAssetColumn } from \"./convert.column\";\nimport { useConvertScript } from \"./convert.script\";\nimport { CONVERT_STATUS_OPTIONS } from \"./convert.ui.desktop\";\nimport { ConvertRecord, ConvertTransaction } from \"./type\";\n\ntype ConvertMobileUIProps = {\n convertState: ReturnType<typeof useConvertScript>;\n};\n\ntype ConvertMobileItemProps = {\n item?: any;\n chainsInfo: any[];\n};\n\ntype ConvertMobileFieldProps = {\n label: string;\n value?: string | number;\n className?: string;\n copyable?: boolean;\n rule?: \"address\" | \"txId\";\n onClick?: () => void;\n};\n\nexport const ConvertMobileUI: React.FC<ConvertMobileUIProps> = ({\n convertState,\n}) => {\n const { t } = useTranslation();\n\n const {\n convertedAssetFilter,\n statusFilter,\n dateRange,\n onFilter,\n convertedAssetOptions,\n } = convertState;\n\n const dataFilter = useMemo(() => {\n return (\n <DataFilter\n onFilter={onFilter}\n items={[\n // {\n // size: \"sm\",\n // type: \"picker\",\n // name: \"account\",\n // value: selectedAccount,\n // options: memoizedOptions,\n // },\n {\n size: \"md\",\n type: \"picker\",\n name: \"converted_asset\",\n value: convertedAssetFilter,\n options: convertedAssetOptions,\n className: \"oui-whitespace-nowrap\",\n },\n {\n size: \"md\",\n type: \"picker\",\n name: \"status\",\n value: statusFilter,\n options: CONVERT_STATUS_OPTIONS,\n className: \"oui-whitespace-nowrap\",\n },\n {\n type: \"range\",\n name: \"time\",\n value: {\n from: dateRange?.[0],\n to: dateRange?.[1],\n },\n },\n ]}\n />\n );\n }, [\n convertedAssetFilter,\n statusFilter,\n dateRange,\n onFilter,\n convertedAssetOptions,\n ]);\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1 oui-px-3\">\n <ScrollIndicator className=\"oui-pr-5\">\n <Flex direction=\"row\">{dataFilter}</Flex>\n </ScrollIndicator>\n {convertState.dataSource.map((item) => (\n <ConvertMobileItem\n key={item.convert_id}\n item={item}\n chainsInfo={convertState.chainsInfo as any}\n />\n ))}\n </div>\n );\n};\n\nconst ConvertMobileField: React.FC<ConvertMobileFieldProps> = ({\n label,\n value,\n rule,\n copyable = false,\n className = \"\",\n onClick,\n}) => {\n const { t } = useTranslation();\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n return (\n <div\n className={`oui-text-2xs oui-font-semibold oui-text-base-contrast-80 [&_p]:oui-text-base-contrast-36 ${className}`}\n onClick={onClick}\n >\n <p>{label}</p>\n <Text.formatted rule={rule} copyable={copyable} onCopy={onCopy}>\n {value || \"-\"}\n </Text.formatted>\n </div>\n );\n};\n\nconst ConvertMobileItem: React.FC<ConvertMobileItemProps> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n if (!item) {\n return null;\n }\n\n const totalHaircut = item.details.reduce(\n (sum: number, detail: ConvertTransaction) => sum + detail.haircut,\n 0,\n );\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-2 oui-rounded-xl oui-bg-base-9 oui-p-2\">\n <div className=\"oui-flex oui-justify-between\">\n <div className=\"oui-flex oui-items-center oui-text-xs oui-font-semibold oui-text-base-contrast-80\">\n <ConvertedAssetColumn convertedAssets={item.converted_asset} />\n <div\n className=\"oui-ml-2 oui-text-primary\"\n onClick={() => {\n modal.show(ConverHistoryItemDetailsDialog, {\n item,\n chainsInfo: props.chainsInfo,\n });\n }}\n >\n {t(\"portfolio.overview.column.convert.details\")}\n </div>\n </div>\n <Text.formatted\n className=\"oui-text-2xs oui-text-base-contrast-36\"\n rule=\"date\"\n >\n {item.created_time}\n </Text.formatted>\n </div>\n\n {/* 5 fields in grid container: 3 per row, wrap to next line */}\n <div className=\"oui-grid oui-grid-cols-3 oui-gap-2\">\n <ConvertMobileField\n label={t(\"portfolio.overview.column.convert.usdcAmount\")}\n value={item.received_qty}\n />\n <ConvertMobileField label={t(\"common.fee\")} value={totalHaircut} />\n <ConvertMobileField\n label={t(\"portfolio.overview.column.convert.convertId\")}\n value={item.convert_id}\n copyable={true}\n />\n <ConvertMobileField\n label={t(\"common.type\")}\n value={item.type?.charAt(0).toUpperCase() + item.type?.slice(1)}\n />\n <ConvertMobileField\n label={t(\"common.status\")}\n value={item.status?.charAt(0).toUpperCase() + item.status?.slice(1)}\n />\n </div>\n </div>\n );\n};\n\ntype ConvertHistoryItemDetailsDialogProps = {\n item: ConvertRecord;\n chainsInfo: any[];\n};\n\nconst ConverHistoryItemDetailsDialog =\n modal.create<ConvertHistoryItemDetailsDialogProps>((props) => {\n const { item, chainsInfo } = props;\n const { t } = useTranslation();\n const { visible, hide, resolve, reject, onOpenChange } = useModal();\n\n return (\n <SimpleSheet\n title={t(\"portfolio.overview.convert.dialog.title.details\")}\n open={visible}\n onOpenChange={onOpenChange}\n >\n <div className=\"oui-flex oui-h-[300px] oui-flex-col oui-gap-3 oui-overflow-y-auto oui-rounded-lg oui-bg-base-7 oui-p-2\">\n {item.details.map((detail, index) => (\n <>\n <div className=\"oui-flex oui-flex-col oui-gap-2\">\n <div className=\"oui-flex oui-items-center oui-gap-1\">\n <TokenIcon name={detail.converted_asset} size=\"xs\" />\n <div className=\"oui-text-xs oui-text-base-contrast-80\">\n {detail.converted_asset}\n </div>\n </div>\n <div className=\"oui-grid oui-grid-cols-3 oui-gap-2\">\n <ConvertMobileField\n label={t(\"common.qty\")}\n value={detail.converted_qty}\n />\n <ConvertMobileField\n label={t(\"portfolio.overview.column.convert.usdcAmount\")}\n value={detail.received_qty}\n />\n <ConvertMobileField label=\"Fee\" value={detail.haircut} />\n <ConvertMobileField\n label={t(\"common.txId\")}\n copyable={!!detail.tx_id}\n rule=\"txId\"\n value={detail.tx_id}\n onClick={() => {\n if (detail.tx_id) {\n const chainInfo = chainsInfo.find(\n (item) => item.chain_id == detail.chain_id,\n );\n if (chainInfo?.explorer_base_url) {\n window.open(\n `${chainInfo.explorer_base_url}/tx/${detail.tx_id}`,\n \"_blank\",\n );\n }\n }\n }}\n />\n <ConvertMobileField\n label={t(\"transfer.network\")}\n value={\n chainsInfo.find(\n (item) => item.chain_id == detail.chain_id,\n )?.name || \"-\"\n }\n />\n <ConvertMobileField\n label={t(\"common.result\")}\n value={\n detail.result\n ? detail.result.charAt(0).toUpperCase() +\n detail.result.slice(1)\n : \"-\"\n }\n />\n </div>\n </div>\n {index < item.details.length - 1 && <Divider />}\n </>\n ))}\n </div>\n </SimpleSheet>\n );\n });\n","import { useMemo } from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { useOverviewContext } from \"../provider/overviewContext\";\n\nexport const useAssetsChartScript = () => {\n const assetHistory = useOverviewContext();\n\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { state } = useAccount();\n\n const filteredData = useDataTap(assetHistory.data, {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n fallbackData: assetHistory.createFakeData(\n {\n account_value: 0,\n // pnl: 0,\n },\n { account_value: 500 },\n ),\n });\n\n const _data = useMemo(() => {\n if (filteredData?.length ?? 0 > 0) return filteredData;\n return assetHistory.createFakeData(\n {\n account_value: 0,\n // pnl: 0,\n },\n { account_value: 500 },\n );\n }, [filteredData]);\n\n const invisible =\n wrongNetwork || disabledConnect || !assetHistory.data.length;\n\n return {\n ...assetHistory,\n data: _data,\n invisible,\n } as const;\n};\n\nexport type useAssetsChartScriptReturn = ReturnType<\n typeof useAssetsChartScript\n>;\n","import { createContext, useContext } from \"react\";\nimport { TWType } from \"@orderly.network/hooks\";\nimport { UseRewardsDataReturn } from \"../mobile/useRewardsData.script\";\nimport { useAssetsHistoryDataReturn } from \"../shared/useAssetHistory\";\n\nexport type OverviewContextState = {\n // period: PeriodType;\n type?: TWType;\n} & useAssetsHistoryDataReturn &\n UseRewardsDataReturn;\n\nexport const OverviewContext = createContext<OverviewContextState>(\n {} as OverviewContextState,\n);\n\nexport const useOverviewContext = () => {\n return useContext(OverviewContext);\n};\n","import { AssetLineChart } from \"@orderly.network/chart\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Card } from \"@orderly.network/ui\";\nimport { PeriodTitle } from \"../shared/periodHeader\";\nimport { useAssetsChartScriptReturn } from \"./assetsChart.script\";\n\nexport type AssetsLineChartProps = {} & useAssetsChartScriptReturn;\n\nexport const AssetsChart = (props: AssetsLineChartProps) => {\n const { onPeriodChange, periodTypes, period } = props;\n const { t } = useTranslation();\n\n return (\n <Card\n title={\n <PeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title={t(\"common.assets\")}\n />\n }\n id=\"portfolio-overview-assets-chart\"\n classNames={{\n content: \"oui-h-[168px] oui-pb-0\",\n }}\n >\n <AssetLineChart data={props.data as any} invisible={props.invisible} />\n {/* <PnlLineChart data={data} /> */}\n {/* <LineChart data={data} /> */}\n </Card>\n );\n};\n","import { useMemo } from \"react\";\nimport { CardTitle, Flex, Select, Text } from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { PeriodType } from \"./useAssetHistory\";\n\nexport const PeriodTitle = (props: {\n onPeriodChange: (period: PeriodType) => void;\n periodTypes: string[];\n period: PeriodType;\n title: string;\n}) => {\n const { t } = useTranslation();\n\n const periodLabel = useMemo(() => {\n return {\n [PeriodType.WEEK]: t(\"common.select.7d\"),\n [PeriodType.MONTH]: t(\"common.select.30d\"),\n [PeriodType.QUARTER]: t(\"common.select.90d\"),\n };\n }, [t]);\n\n return (\n <Flex justify={\"between\"}>\n <CardTitle>{props.title}</CardTitle>\n\n <div className={\"oui-min-w-14\"}>\n <Select.options\n size={\"xs\"}\n value={props.period}\n onValueChange={props.onPeriodChange}\n options={props.periodTypes.map((item) => ({\n value: item,\n label: periodLabel[item as PeriodType],\n }))}\n />\n </div>\n </Flex>\n );\n};\n","import { useMemo, useState } from \"react\";\nimport { subDays, format } from \"date-fns\";\nimport {\n useAssetsHistory,\n useCollateral,\n useLocalStorage,\n useStatisticsDaily,\n} from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\n\nexport enum PeriodType {\n WEEK = \"7D\",\n MONTH = \"30D\",\n QUARTER = \"90D\",\n}\n\nexport const useAssetsHistoryData = (\n localKey: string,\n options?: {\n isRealtime?: boolean;\n },\n) => {\n const [today] = useState(() => new Date());\n\n const { isRealtime = false } = options || {};\n const periodTypes = Object.values(PeriodType);\n const [period, setPeriod] = useLocalStorage<PeriodType>(\n localKey,\n PeriodType.WEEK,\n );\n\n const { totalValue } = useCollateral();\n\n const getStartDate = (value: PeriodType) => {\n switch (value) {\n case PeriodType.MONTH:\n return subDays(today, 35);\n case PeriodType.QUARTER:\n return subDays(today, 95);\n default:\n return subDays(today, 10);\n }\n };\n\n const periodValue = useMemo(() => {\n switch (period) {\n case PeriodType.WEEK:\n return 7;\n case PeriodType.MONTH:\n return 30;\n case PeriodType.QUARTER:\n return 90;\n default:\n return 7;\n }\n }, [period]);\n\n const [startDate, setStartDate] = useState(getStartDate(period));\n // const nowStamp = useRef(new Date().getTime().toString());\n // const now = useRef(new Date());\n\n // const endDate = useMemo(() => addDays(today, 1), [today]);\n const endDate = today;\n\n const [data] = useStatisticsDaily(\n {\n startDate: startDate.toISOString().split(\"T\")[0],\n endDate: endDate.toISOString().split(\"T\")[0],\n },\n {\n ignoreAggregation: true,\n },\n );\n\n const [assetHistory] = useAssetsHistory({\n startTime: subDays(today, 2).getTime(),\n endTime: endDate.getTime(),\n pageSize: 50,\n });\n\n const onPeriodChange = (value: PeriodType) => {\n setStartDate(getStartDate(value));\n setPeriod(value);\n };\n\n // const lastItem = data[data.length - 1];\n\n const calculateLastPnl = (inputs: {\n lastItem: API.DailyRow;\n assetHistory: ReadonlyArray<API.AssetHistoryRow> | API.AssetHistoryRow[];\n totalValue: number | null;\n }) => {\n if (totalValue == null) {\n return null;\n }\n // today daily pnl = totalValue - lastItem.account_value - deposit + withdraw\n let value = new Decimal(totalValue).sub(inputs.lastItem.account_value);\n\n // subtraction of deposit and withdraw\n if (\n Array.isArray(inputs.assetHistory) &&\n inputs.assetHistory.length > 0 &&\n typeof inputs.lastItem.snapshot_time !== \"undefined\"\n ) {\n // find a list with the timestamp greater than the last item timestamp and trans_status = success;\n const list = [];\n\n for (let i = 0; i < inputs.assetHistory.length; i++) {\n const item = inputs.assetHistory[i];\n if (item.created_time > inputs.lastItem.snapshot_time) {\n list.push(item);\n }\n }\n\n // calculate the sum of deposit and withdraw\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (item.side === \"DEPOSIT\") {\n // value -= item.amount;\n if (item.trans_status === \"COMPLETED\") {\n value = value.sub(item.amount);\n }\n } else if (item.side === \"WITHDRAW\") {\n if (item.trans_status !== \"FAILED\") {\n value = value.add(item.amount);\n }\n }\n }\n }\n\n return value.toNumber();\n };\n\n const calculate = (data: API.DailyRow[], totalValue: number | null) => {\n const lastItem = data[data.length - 1];\n\n return {\n ...lastItem,\n date: getUTCStr(today),\n perp_volume: 0,\n account_value:\n totalValue !== null ? totalValue : (lastItem?.account_value ?? 0),\n pnl: calculateLastPnl({ lastItem, assetHistory, totalValue }) ?? 0,\n };\n };\n\n const mergeData = (\n data: ReadonlyArray<API.DailyRow> | API.DailyRow[],\n totalValue: number | null,\n ) => {\n if (!Array.isArray(data) || data.length === 0) {\n return data;\n }\n\n if (data[data.length - 1].date === getUTCStr(today)) {\n return data;\n }\n\n return data.concat([calculate(data, totalValue)]);\n };\n\n const calculateData = (\n data: ReadonlyArray<API.DailyRow> | API.DailyRow[],\n realtime: boolean,\n ) => {\n const _data = !realtime ? data : mergeData(data, totalValue);\n\n return _data.slice(Math.max(0, _data.length - periodValue));\n };\n\n const calculatedData = useMemo(() => {\n /**\n * need the totalValue and data are all ready, else return null;\n */\n if (totalValue == null) {\n return [];\n }\n return calculateData(data, isRealtime);\n }, [data, totalValue, assetHistory, isRealtime]);\n\n const aggregateValue = useMemo(() => {\n let vol = zero;\n let pnl = zero;\n let roi = zero;\n\n if (Array.isArray(calculatedData) && calculatedData.length) {\n calculatedData.forEach((d) => {\n // vol = vol.add(d.perp_volume);\n pnl = pnl.add(d.pnl);\n });\n\n const tail = calculatedData[0];\n\n const dataTailIndex = data.findIndex((d) => d.date === tail.date);\n\n const lastAccountValue = data[dataTailIndex - 1]?.account_value;\n\n // console.log(data, calculatedData, tail, dataTailIndex);\n\n if (typeof lastAccountValue === \"undefined\" || lastAccountValue === 0) {\n roi = zero;\n } else {\n roi = pnl.div(lastAccountValue);\n }\n }\n\n if (data.length > 0) {\n for (let i = 0; i < periodValue; i++) {\n const item = data[data.length - 1 - i];\n\n if (item) {\n vol = vol.add(item.perp_volume ?? 0);\n }\n }\n }\n\n // console.log(\"---------------------------\");\n\n return { vol: vol.toNumber(), pnl: pnl.toNumber(), roi: roi.toNumber() };\n }, [calculatedData, data, periodValue]);\n\n const createFakeData = (\n start: Partial<API.DailyRow>,\n end: Partial<API.DailyRow>,\n ) => {\n return Array.from({ length: 2 }, (_, i) => {\n const date = format(i === 0 ? startDate : new Date(), \"yyyy-MM-dd\");\n\n return {\n date,\n ...(i === 0 ? start : end),\n };\n });\n };\n\n return {\n periodTypes,\n period,\n onPeriodChange,\n data: calculatedData,\n aggregateValue,\n createFakeData,\n volumeUpdateDate: data?.[data.length - 1]?.date ?? \"\",\n } as const;\n};\n\nexport type useAssetsHistoryDataReturn = ReturnType<\n typeof useAssetsHistoryData\n>;\n\nfunction getUTCStr(date: Date) {\n const year = date.getUTCFullYear();\n const month = `0${date.getUTCMonth() + 1}`.slice(-2);\n const day = `0${date.getUTCDate()}`.slice(-2);\n\n return `${year}-${month}-${day}`;\n}\n","import { useAssetsChartScript } from \"./assetsChart.script\";\nimport { AssetsChart } from \"./assetsChart.ui\";\n\nexport const AssetsChartWidget = () => {\n const state = useAssetsChartScript();\n return <AssetsChart {...state} />;\n};\n","import { useMemo, ReactNode } from \"react\";\nimport { PnLBarChart, PnlLineChart } from \"@orderly.network/chart\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { EMPTY_LIST } from \"@orderly.network/types\";\nimport {\n Card,\n Grid,\n Box,\n Statistic,\n Text,\n Flex,\n Tooltip,\n cn,\n} from \"@orderly.network/ui\";\nimport { PeriodTitle } from \"../shared/periodHeader\";\nimport { PeriodType } from \"../shared/useAssetHistory\";\nimport { UsePerformanceScriptReturn } from \"./performance.script\";\n\nexport type PerformanceUIProps = {\n // periodTypes: string[];\n // period: string;\n // onPeriodChange: (period: string) => void;\n} & UsePerformanceScriptReturn;\n\nexport const PerformanceUI = (props: PerformanceUIProps) => {\n const {\n periodTypes,\n period,\n onPeriodChange,\n aggregateValue,\n invisible,\n visible,\n volumeUpdateDate,\n } = props;\n const { t } = useTranslation();\n\n const periodLabel = useMemo(() => {\n return {\n [PeriodType.WEEK]: t(\"common.select.7d\"),\n [PeriodType.MONTH]: t(\"common.select.30d\"),\n [PeriodType.QUARTER]: t(\"common.select.90d\"),\n };\n }, [t]);\n return (\n <Card\n // @ts-ignore\n title={\n <PeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title={t(\"portfolio.overview.performance\")}\n />\n }\n id=\"portfolio-overview-performance\"\n >\n <Grid cols={3} gap={4}>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={4}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n <Statistic\n label={\n <LabelWithHint\n label={t(\"portfolio.overview.performance.roi\", {\n period: periodLabel[period as PeriodType],\n })}\n hint={t(\"portfolio.overview.performance.roi.tooltip\")}\n />\n }\n // @ts-ignore\n valueProps={{\n rule: \"percentages\",\n coloring: true,\n visible,\n }}\n >\n {invisible ? \"--\" : aggregateValue.roi}\n </Statistic>\n </Box>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={4}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n <Statistic\n label={\n <LabelWithHint\n label={t(\"portfolio.overview.performance.pnl\", {\n period: periodLabel[period as PeriodType],\n })}\n hint={t(\"portfolio.overview.performance.pnl.tooltip\")}\n />\n }\n // @ts-ignore\n valueProps={{\n coloring: true,\n showIdentifier: true,\n visible,\n }}\n >\n {invisible ? \"--\" : aggregateValue.pnl}\n </Statistic>\n </Box>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={4}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n <Statistic\n classNames={{\n label: \"oui-w-full\",\n }}\n label={\n <Flex justify={\"between\"}>\n <span>\n <LabelWithHint\n label={t(\"portfolio.overview.performance.volume\", {\n period: periodLabel[period as PeriodType],\n })}\n hint={t(\"portfolio.overview.performance.volume.tooltip\")}\n />\n </span>\n <span>{volumeUpdateDate}</span>\n </Flex>\n }\n >\n {invisible ? \"--\" : aggregateValue.vol}\n </Statistic>\n </Box>\n </Grid>\n <Grid cols={2} gap={4}>\n <PerformancePnL\n data={props.data ?? EMPTY_LIST}\n invisible={props.invisible}\n />\n <CumulativePnlChart\n data={props.data ?? EMPTY_LIST}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n </Grid>\n </Card>\n );\n};\n\ntype LabelWithHintProps = {\n label: string;\n hint?: ReactNode;\n};\n\nconst LabelWithHint: React.FC<LabelWithHintProps> = (props) => {\n const { label, hint } = props;\n return (\n <Tooltip\n open={hint ? undefined : false}\n content={hint}\n className=\"oui-max-w-[240px] oui-bg-base-6 \"\n arrow={{ className: \"oui-fill-base-6\" }}\n delayDuration={300}\n >\n <Text\n size=\"xs\"\n intensity={36}\n className={cn(\n hint &&\n \"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\",\n )}\n >\n {label}\n </Text>\n </Tooltip>\n );\n};\n\nexport const PerformancePnL = (props: {\n data: ReadonlyArray<any> | any[];\n invisible: boolean;\n}) => {\n // console.log(props.data);\n // const tickValues = useMemo(() => {\n // if (!Array.isArray(props.data) || !props.data.length) return;\n // return [props.data[0].date, props.data[props.data?.length - 1].date];\n // }, [props.data]);\n const { t } = useTranslation();\n return (\n <Box mt={4} height={\"188px\"}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n {t(\"portfolio.overview.performance.dailyPnl\")}\n </Text>\n <Box r=\"md\" className=\"oui-border oui-border-line-4 oui-h-[188px]\">\n <PnLBarChart\n data={props.data}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n </Box>\n </Box>\n );\n};\n\nexport const CumulativePnlChart = (props: {\n data: ReadonlyArray<any> | any[];\n invisible: boolean;\n}) => {\n const { t } = useTranslation();\n\n return (\n <Box mt={4}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n {t(\"portfolio.overview.performance.cumulativePnl\")}\n </Text>\n <Box r=\"md\" className=\"oui-border oui-border-line-4 oui-h-[188px]\">\n <PnlLineChart\n data={props.data}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n {/* <Chart data={props.data} x={\"date\"} y={\"pnl\"}>\n <Axis orientation=\"left\" />\n </Chart> */}\n </Box>\n </Box>\n );\n};\n","import { useMemo } from \"react\";\nimport { useAccount, useLocalStorage } from \"@orderly.network/hooks\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { useOverviewContext } from \"../provider/overviewContext\";\n\nexport const usePerformanceScript = () => {\n const ctx = useOverviewContext();\n const [visible] = useLocalStorage(\"orderly_assets_visible\", true);\n\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { state } = useAccount();\n const filteredData = useDataTap(ctx.data, {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n fallbackData: ctx.createFakeData(\n {\n account_value: 0,\n pnl: 0,\n },\n { account_value: 500, pnl: 500 },\n ),\n // fallbackData:\n // ctx.data && ctx.data.length >= 2\n // ? [ctx.data[0], ctx.data[ctx.data.length - 1]]\n // : ctx.createFakeData(\n // {\n // account_value: 0,\n // pnl: 0,\n // },\n // { account_value: 1000, pnl: 1000 }\n // ),\n });\n\n const _data = useMemo(() => {\n if (filteredData?.length ?? 0 > 0) return filteredData;\n return ctx.createFakeData(\n {\n account_value: 0,\n pnl: 0,\n },\n { account_value: 500, pnl: 500 },\n );\n }, [filteredData]);\n\n const invisible =\n wrongNetwork ||\n disabledConnect ||\n (state.status < AccountStatusEnum.EnableTrading &&\n state.status !== AccountStatusEnum.EnableTradingWithoutConnected);\n\n return {\n ...ctx,\n data: _data,\n invisible,\n visible,\n };\n};\n\nexport type UsePerformanceScriptReturn = ReturnType<\n typeof usePerformanceScript\n>;\n","import { PerformanceUI } from \"./performance.ui\";\nimport { usePerformanceScript } from \"./performance.script\";\n\nexport const PerformanceWidget = () => {\n const state = usePerformanceScript();\n\n return <PerformanceUI {...state} />;\n};\n","import { Grid, useScreen } from \"@orderly.network/ui\";\nimport { AssetsChartWidget } from \"./assetChart\";\nimport { AssetWidget } from \"./assets\";\nimport { HistoryDataGroupWidget } from \"./historyDataGroup\";\nimport { MobileOverview } from \"./mobile\";\nimport { PerformanceWidget } from \"./performance\";\nimport { OverviewProvider } from \"./provider/overviewProvider\";\n\nexport const OverviewPage = () => {\n const { isMobile } = useScreen();\n return (\n <OverviewProvider>\n {isMobile ? (\n <MobileOverview />\n ) : (\n <Grid cols={2} gap={4}>\n <AssetWidget />\n <AssetsChartWidget />\n <Grid.span colSpan={2}>\n <PerformanceWidget />\n </Grid.span>\n <Grid.span colSpan={2}>\n <HistoryDataGroupWidget />\n </Grid.span>\n </Grid>\n )}\n </OverviewProvider>\n );\n};\n","import { FC } from \"react\";\nimport { ENVType, useGetEnv } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { DepositStatusWidget } from \"@orderly.network/ui-transfer\";\nimport { useLayoutContext } from \"../../../layout/context\";\nimport { useAssetScript } from \"../assets\";\nimport { AccountStatusMobile } from \"./accountStatus.ui.mobile\";\nimport { AffiliateCardMobile } from \"./affiliateCard.ui.mobile\";\nimport { PortfolioHandleMobile } from \"./portfolioHandle.ui.mobile\";\nimport { PortfolioValueMobile } from \"./portfolioVaule.ui.mobile\";\nimport { SettingRouterMobile } from \"./settingRouter.ui.mobile\";\nimport { TraderCardMobile } from \"./traderCard.ui.mobile\";\nimport { TradingRewardsCardMobile } from \"./tradingRewardsCard.ui.mobile\";\nimport { useRewardsDataScript } from \"./useRewardsData.script\";\n\nexport const MobileOverview: FC = (props) => {\n const {\n canTrade,\n onWithdraw,\n onDeposit,\n portfolioValue,\n unrealPnL,\n unrealROI,\n visible,\n namespace,\n toggleVisible,\n onTransfer,\n isMainAccount,\n hasSubAccount,\n } = useAssetScript();\n const { t } = useTranslation();\n const rewardsData = useRewardsDataScript();\n const layoutContext = useLayoutContext();\n const { onRouteChange } = useAppContext();\n const env = useGetEnv();\n\n const goToClaim = () => {\n const url = `https://${\n env !== ENVType.prod ? `${env}-` : \"\"\n }app.orderly.network/tradingRewards`;\n window.open(url, \"_blank\");\n };\n\n const navigateToPortfolioHistory =\n typeof onRouteChange === \"function\"\n ? () => {\n onRouteChange({\n href: \"/portfolio/history\",\n name: t(\"trading.history\"),\n });\n }\n : undefined;\n\n // console.log('rewards data', rewardsData, layoutContext, props);\n\n return (\n <>\n <div className=\"oui-my-1 oui-px-3\">\n <AccountStatusMobile />\n </div>\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n height={\"100%\"}\n className=\"oui-gap-5 oui-px-3\"\n >\n <Flex direction=\"column\" width=\"100%\" gapY={2}>\n <PortfolioValueMobile\n toggleVisible={toggleVisible}\n portfolioValue={portfolioValue}\n unrealPnL={unrealPnL}\n unrealROI={unrealROI}\n visible={visible}\n canTrade={canTrade}\n namespace={namespace}\n routerAdapter={layoutContext?.routerAdapter}\n />\n <DepositStatusWidget\n className=\"oui-mb-2\"\n onClick={navigateToPortfolioHistory}\n />\n </Flex>\n\n <PortfolioHandleMobile\n disabled={!canTrade}\n onWithdraw={onWithdraw}\n onDeposit={onDeposit}\n onTransfer={onTransfer}\n isMainAccount={isMainAccount}\n routerAdapter={layoutContext?.routerAdapter}\n hasSubAccount={hasSubAccount}\n />\n <Flex\n direction={\"row\"}\n width={\"100%\"}\n height={\"100%\"}\n className=\"oui-gap-3\"\n >\n <Flex direction=\"column\" className=\"oui-flex-1 oui-gap-3\">\n <AffiliateCardMobile\n referralInfo={rewardsData.referralInfo}\n routerAdapter={layoutContext?.routerAdapter}\n />\n <TraderCardMobile\n referralInfo={rewardsData.referralInfo}\n routerAdapter={layoutContext?.routerAdapter}\n />\n </Flex>\n <Flex direction=\"column\" className=\"oui-flex-1\">\n <TradingRewardsCardMobile {...rewardsData} goToClaim={goToClaim} />\n </Flex>\n </Flex>\n <SettingRouterMobile routerAdapter={layoutContext?.routerAdapter} />\n </Flex>\n </>\n );\n};\n","import { FC, SVGProps, useCallback, useMemo } from \"react\";\nimport {\n parseJSON,\n useAccount,\n useChains,\n useLocalStorage,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum, ChainNamespace } from \"@orderly.network/types\";\nimport {\n cn,\n modal,\n toast,\n formatAddress,\n Flex,\n CopyIcon,\n ChainIcon,\n} from \"@orderly.network/ui\";\n\ninterface StatusInfo {\n title: string;\n description: string;\n titleColor?: any;\n titleClsName?: string;\n}\n\nconst useCurrentStatus = () => {\n const { state, account } = useAccount();\n const { wrongNetwork, disabledConnect, connectWallet } = useAppContext();\n const { t } = useTranslation();\n\n const statusText = {\n wrongNetwork: {\n description: t(\"connector.wrongNetwork.tooltip\"),\n rootClass: \"oui-bg-[linear-gradient(15deg,#D25F00_0%,transparent_30%)]\",\n },\n connectWallet: {\n description: t(\"connector.trade.connectWallet.tooltip\"),\n rootClass: \"oui-bg-[linear-gradient(15deg,#27FDFE_0%,transparent_30%)]\",\n },\n notSignedIn: {\n description: t(\"connector.trade.createAccount.tooltip\"),\n rootClass: \"oui-bg-[linear-gradient(15deg,#335FFC_0%,transparent_30%)]\",\n },\n disabledTrading: {\n description: t(\"connector.trade.enableTrading.tooltip\"),\n rootClass: \"oui-bg-[linear-gradient(15deg,#335FFC_0%,transparent_30%)]\",\n },\n default: {\n description: \"\",\n rootClass: \"\",\n arrowIconClass: \"\",\n textClass: \"\",\n },\n };\n\n return useMemo(() => {\n if (disabledConnect) {\n return statusText.connectWallet;\n }\n\n if (wrongNetwork) {\n return statusText.wrongNetwork;\n }\n\n switch (state.status) {\n case AccountStatusEnum.NotConnected:\n return statusText.connectWallet;\n case AccountStatusEnum.NotSignedIn:\n return statusText.notSignedIn;\n case AccountStatusEnum.DisabledTrading:\n return statusText.disabledTrading;\n default:\n return statusText.default;\n }\n }, [state.status, wrongNetwork]);\n};\n\nexport function EVMChainPopover({ children }: { children: React.ReactNode }) {\n // const [chains] = useState(getChainsByNetwork(\"mainnet\"));\n const [chains] = useChains(\"mainnet\", {\n pick: \"network_infos\",\n });\n const { t } = useTranslation();\n\n const showDialog = () => {\n modal.dialog({\n title: t(\"connector.privy.supportedEvmChain\"),\n size: \"xs\",\n content: (\n <div>\n <div className=\"oui-p-1 oui-grid oui-grid-cols-2 oui-gap-x-2 oui-gap-y-3 oui-text-2xs oui-text-base-contrast-54\">\n {chains.map((item, key) => (\n <div\n key={key}\n className=\"oui-flex oui-items-center oui-justify-start oui-gap-1\"\n >\n <ChainIcon chainId={item.chain_id} size=\"2xs\" />\n <div>{item.name}</div>\n </div>\n ))}\n </div>\n </div>\n ),\n });\n };\n\n return <button onClick={showDialog}>{children}</button>;\n}\n\nexport const MoreIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M8.00521 6.66797C8.74161 6.66797 9.33854 7.26464 9.33854 8.0013C9.33854 8.73797 8.74161 9.33464 8.00521 9.33464C7.26881 9.33464 6.67188 8.73797 6.67188 8.0013C6.67188 7.26464 7.26881 6.66797 8.00521 6.66797Z\" />\n <path d=\"M3.33333 6.66797C4.06973 6.66797 4.66667 7.26464 4.66667 8.0013C4.66667 8.73797 4.06973 9.33464 3.33333 9.33464C2.59693 9.33464 2 8.73797 2 8.0013C2 7.26464 2.59693 6.66797 3.33333 6.66797Z\" />\n <path d=\"M12.6666 6.66797C13.403 6.66797 14 7.26464 14 8.0013C14 8.73797 13.403 9.33464 12.6666 9.33464C11.9302 9.33464 11.3333 8.73797 11.3333 8.0013C11.3333 7.26464 11.9302 6.66797 12.6666 6.66797Z\" />\n </svg>\n);\n\nconst EVMChains = () => {\n return (\n <div className=\"oui-relative oui-flex oui-items-center oui-justify-center\">\n <div className=\"oui-flex oui-h-[18px] oui-items-center oui-justify-center \">\n <img\n src=\"https://oss.orderly.network/static/sdk/portfolio/chains.png\"\n className=\"oui-relative oui-z-0 oui-h-[18px] oui-w-[49px]\"\n />\n </div>\n <div className=\"oui-relative oui-left-[-9px] oui-flex oui-items-center oui-justify-center oui-gap-1\">\n <div className=\"oui-flex oui-size-[18px] oui-items-center oui-justify-center oui-rounded-full oui-bg-[#282e3a]\">\n <EVMChainPopover>\n <MoreIcon\n className=\"oui-relative oui-z-10 oui-size-3 oui-text-base-contrast-54 hover:oui-text-base-contrast\"\n style={{ zIndex: 1 }}\n />\n </EVMChainPopover>\n </div>\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast\">\n Evm\n </div>\n </div>\n </div>\n );\n};\n\nconst ShowAccount: FC = () => {\n const { state, account } = useAccount();\n const { namespace } = useWalletConnector();\n const { t } = useTranslation();\n const onCopyAddress = () => {\n navigator.clipboard.writeText(state.address ?? \"\");\n toast.success(t(\"common.copy.copied\"));\n };\n\n const currentNamespace = useMemo(() => {\n if (namespace) {\n return namespace;\n }\n if (state.status === AccountStatusEnum.EnableTradingWithoutConnected) {\n return getLinkDeviceStorage()?.chainNamespace;\n }\n return null;\n }, [namespace, state.status]);\n\n const leftNode = useMemo(() => {\n if (!state.address) {\n return;\n }\n return (\n <Flex className=\"oui-text-base oui-text-base-contrast\" gapX={2}>\n {formatAddress(state.address ?? \"\")}\n <button\n className=\"oui-cursor-pointer\"\n onClick={() => {\n onCopyAddress();\n }}\n >\n <CopyIcon\n size={18}\n className=\"oui-text-base-contrast-80\"\n opacity={1}\n />\n </button>\n </Flex>\n );\n }, [state.address]);\n const rightNode = useMemo(() => {\n if (currentNamespace === ChainNamespace.evm) {\n return <EVMChains />;\n }\n\n return (\n <Flex gapX={1} itemAlign={\"center\"} className=\"oui-text-2xs\">\n <img\n src=\"https://oss.orderly.network/static/sdk/solana-logo.png\"\n className=\"oui-w-[15px]\"\n />\n Solana\n </Flex>\n );\n }, [currentNamespace]);\n\n const bgClass = useMemo(() => {\n let bg = \"\";\n if (currentNamespace == ChainNamespace.evm) {\n bg =\n \"oui-bg-[linear-gradient(15deg,#283BEE_-11%,transparent_30%,transparent_77%,#A53411_100%)]\";\n } else if (currentNamespace == ChainNamespace.solana) {\n bg =\n \"oui-bg-[linear-gradient(15deg,#7400D0_-11%,transparent_30%,transparent_77%,#009A7E_100%)]\";\n }\n return bg;\n }, [currentNamespace]);\n return (\n <div\n className={cn([\n \"oui-flex oui-h-[44px] oui-w-full oui-items-center oui-justify-between oui-rounded-[10px] oui-px-3 oui-py-[10px]\",\n bgClass,\n ])}\n >\n {leftNode}\n {rightNode}\n </div>\n );\n};\n\nexport const AccountStatusMobile: FC = () => {\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n const { description, rootClass } = useCurrentStatus();\n\n const alreadyShowAccount = useMemo(() => {\n if (state.status === AccountStatusEnum.EnableTradingWithoutConnected) {\n return true;\n }\n if (wrongNetwork) {\n return false;\n }\n return state.status >= AccountStatusEnum.EnableTrading;\n }, [state.status, wrongNetwork]);\n\n if (alreadyShowAccount) {\n return <ShowAccount />;\n }\n\n return (\n <div\n className={cn([\n \"oui-flex oui-h-[44px] oui-w-full oui-items-center oui-justify-center oui-rounded-[10px] oui-px-3 oui-py-[10px]\",\n rootClass,\n // \"oui-bg-linear-65\",\n // \"oui-from-[-20%]\",\n // \"oui-to-[40%]\",\n // \" oui-from-[#FF7B00]\",\n // \" oui-to-[#FFEA00]\",\n ])}\n >\n <div\n className={cn(\n \"oui-flex oui-items-center oui-justify-end oui-rounded-[10px] oui-text-xs oui-font-semibold\",\n \"oui-text-base-contrast-54\",\n )}\n >\n {description}\n </div>\n </div>\n );\n};\ntype LinkDeviceStorage = { chainId: number; chainNamespace: ChainNamespace };\n\nfunction getLinkDeviceStorage() {\n try {\n const linkDeviceStorage = localStorage.getItem(\"orderly_link_device\");\n const json = linkDeviceStorage ? parseJSON(linkDeviceStorage) : null;\n return json as LinkDeviceStorage;\n } catch (err) {\n console.error(\"getLinkDeviceStorage\", err);\n }\n}\n","import { FC } from \"react\";\nimport { isNumber } from \"lodash\";\nimport { RefferalAPI as API } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Flex,\n Text,\n AffiliateIcon,\n ChevronRightIcon,\n cn,\n} from \"@orderly.network/ui\";\nimport { RouterAdapter } from \"@orderly.network/ui-scaffold\";\nimport { commifyOptional } from \"@orderly.network/utils\";\n\ntype AffiliateCardMobileProps = {\n referralInfo?: API.ReferralInfo;\n routerAdapter?: RouterAdapter;\n};\n\nexport const AffiliateCardMobile: FC<AffiliateCardMobileProps> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n className=\"\n oui-via-21.6% \n oui-via-83.23% \n oui-relative \n oui-h-[112px] \n oui-w-full \n oui-flex-col \n oui-items-start \n oui-rounded-xl \n oui-border \n oui-border-solid \n oui-border-[rgba(var(--oui-gradient-primary-start)/0.36)] \n oui-bg-gradient-to-r\n oui-from-[rgba(var(--oui-gradient-primary-end)/0.12)]\n oui-to-[rgba(var(--oui-gradient-primary-start)/0.12)]\n oui-p-3\n \"\n >\n <Flex className=\"oui-w-full oui-flex-row oui-justify-between oui-items-center\">\n <Flex className=\"oui-flex-col oui-items-start\">\n <Text className=\"oui-text-base-contrast oui-text-base oui-font-semibold\">\n {t(\"affiliate.asAffiliate.affilates\")}\n </Text>\n <Text className=\"oui-text-2xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"affiliate.commission\")}\n </Text>\n </Flex>\n <AffiliateIcon />\n </Flex>\n <Flex className=\"oui-mt-auto oui-w-full oui-flex-row oui-items-center oui-gap-1\">\n <img\n src=\"https://oss.orderly.network/static/symbol_logo/USDC.png\"\n alt=\"USDC\"\n className=\"oui-size-5\"\n />\n <Text\n className={cn(\n \"oui-text-xs oui-font-semibold\",\n isNumber(\n props?.referralInfo?.referrer_info[\"30d_referrer_rebate\"],\n ) && props?.referralInfo?.referrer_info[\"30d_referrer_rebate\"] != 0\n ? \"oui-text-base-contrast\"\n : \"oui-text-base-contrast-36\",\n )}\n >\n {commifyOptional(\n props?.referralInfo?.referrer_info[\"30d_referrer_rebate\"],\n { fix: 2, fallback: \"--\" },\n )}\n </Text>\n <Text className=\"oui-text-xs oui-font-semibold oui-text-base-contrast-36\">\n (30D)\n </Text>\n <ChevronRightIcon\n size={18}\n color=\"white\"\n className=\"oui-ml-auto\"\n onClick={() =>\n props?.routerAdapter?.onRouteChange({\n href: \"/rewards/affiliate?tab=affiliate\",\n name: t(\"tradingRewards.rewards\"),\n })\n }\n />\n </Flex>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Flex,\n Text,\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n CalendarMinusIcon,\n ArrowLeftRightIcon,\n} from \"@orderly.network/ui\";\nimport { RouterAdapter } from \"@orderly.network/ui-scaffold\";\nimport { PortfolioLeftSidebarPath } from \"../../../layout\";\n\ntype Props = {\n disabled: boolean;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n onTransfer?: () => void;\n isMainAccount?: boolean;\n routerAdapter?: RouterAdapter;\n hasSubAccount?: boolean;\n};\n\nexport const PortfolioHandleMobile: FC<Props> = (props) => {\n const { t } = useTranslation();\n\n const onGotoHistory = () => {\n props.routerAdapter?.onRouteChange({\n href: PortfolioLeftSidebarPath.History,\n name: t(\"trading.history\"),\n });\n };\n\n return (\n <Flex\n direction={\"row\"}\n width={\"100%\"}\n height={\"71px\"}\n className=\"oui-gap-3 oui-bg-transparent\"\n >\n {props.isMainAccount && (\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n onClick={props?.onDeposit}\n >\n <div className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\">\n <ArrowDownSquareFillIcon size={28} color=\"white\" opacity={1} />\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"common.deposit\")}\n </Text>\n </Flex>\n )}\n {props.hasSubAccount && (\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n onClick={props?.onTransfer}\n >\n <div className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\">\n <ArrowLeftRightIcon size={28} color=\"white\" opacity={1} />\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"common.transfer\")}\n </Text>\n </Flex>\n )}\n {props.isMainAccount && (\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n onClick={props?.onWithdraw}\n >\n <div className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\">\n <ArrowUpSquareFillIcon size={28} color=\"white\" opacity={1} />\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"common.withdraw\")}\n </Text>\n </Flex>\n )}\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n >\n <div\n className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\"\n onClick={onGotoHistory}\n >\n <CalendarMinusIcon\n size={28}\n color=\"white\"\n opacity={1}\n viewBox=\"0 0 28 28\"\n className=\"oui-w-[28px] oui-h-[28px]\"\n />\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"trading.history\")}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { parseJSON, useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AccountStatusEnum, ChainNamespace } from \"@orderly.network/types\";\nimport {\n Flex,\n Text,\n cn,\n ArrowRightShortIcon,\n EyeIcon,\n} from \"@orderly.network/ui\";\nimport { RouterAdapter } from \"@orderly.network/ui-scaffold\";\nimport { PortfolioLeftSidebarPath } from \"../../../layout\";\n\ntype Props = {\n portfolioValue: number | null;\n unrealPnL: number;\n unrealROI: number;\n visible: boolean;\n namespace: string | null;\n toggleVisible: () => void;\n canTrade: boolean;\n routerAdapter?: RouterAdapter;\n};\n\nexport const PortfolioValueMobile: FC<Props> = (props) => {\n const { t } = useTranslation();\n const { state } = useAccount();\n\n const currentNamespace = useMemo(() => {\n if (props.namespace) {\n return props.namespace;\n }\n if (state.status === AccountStatusEnum.EnableTradingWithoutConnected) {\n return getLinkDeviceStorage()?.chainNamespace;\n }\n return null;\n }, [props.namespace, state.status]);\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n height={\"100%\"}\n className={cn([\n \"oui-relative oui-items-start oui-overflow-hidden oui-rounded-2xl oui-bg-base-9\",\n currentNamespace === ChainNamespace.evm && \"oui-bg-[#283BEE]\",\n currentNamespace === ChainNamespace.solana && \"oui-bg-[#630EAD]\",\n ])}\n p={4}\n >\n <Flex direction=\"row\" gapX={1} itemAlign={\"center\"}>\n <Text className=\"oui-text-sm oui-text-base-contrast-54\">\n {t(\"portfolio.overview.handle.title\")}\n </Text>\n <EyeIcon\n size={16}\n className={cn(\n props.canTrade ? \"oui-text-base-contrast-54\" : \"oui-hidden\",\n )}\n onClick={props.toggleVisible}\n />\n </Flex>\n <Flex\n direction=\"row\"\n gapX={1}\n itemAlign={\"baseline\"}\n className=\"oui-mt-1\"\n >\n <Text.numeral\n visible={props.visible}\n className=\"oui-text-3xl oui-font-bold oui-text-base-contrast\"\n >\n {props.portfolioValue ?? \"--\"}\n </Text.numeral>\n <Text className=\"oui-text-base oui-font-bold oui-text-base-contrast-80\">\n USDC\n </Text>\n </Flex>\n <Flex\n direction=\"row\"\n gapX={1}\n itemAlign={\"center\"}\n className=\"oui-text-sm oui-text-base-contrast\"\n >\n <Text.numeral visible={props.visible}>\n {props.unrealPnL ?? \"--\"}\n </Text.numeral>\n <Text.numeral\n visible={props.visible}\n rule=\"percentages\"\n prefix={\"(\"}\n suffix={\")\"}\n >\n {props.unrealROI ?? \"--\"}\n </Text.numeral>\n </Flex>\n <div\n className=\"oui-absolute oui-right-0 oui-top-0 oui-flex oui-h-full oui-items-center oui-justify-center oui-px-4\"\n onClick={() =>\n props.routerAdapter?.onRouteChange({\n href: PortfolioLeftSidebarPath.Assets,\n name: \"Assets\",\n })\n }\n >\n <ArrowRightShortIcon size={18} color=\"white\" opacity={0.54} />\n </div>\n </Flex>\n );\n};\n\ntype LinkDeviceStorage = { chainId: number; chainNamespace: ChainNamespace };\n\nfunction getLinkDeviceStorage() {\n try {\n const linkDeviceStorage = localStorage.getItem(\"orderly_link_device\");\n const json = linkDeviceStorage ? parseJSON(linkDeviceStorage) : null;\n return json as LinkDeviceStorage;\n } catch (err) {\n console.error(\"getLinkDeviceStorage\", err);\n }\n}\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Flex,\n Text,\n SettingFillIcon,\n ChevronRightIcon,\n} from \"@orderly.network/ui\";\nimport { RouterAdapter } from \"@orderly.network/ui-scaffold\";\nimport { PortfolioLeftSidebarPath } from \"../../../layout\";\n\ntype Props = {\n routerAdapter?: RouterAdapter;\n};\n\nexport const SettingRouterMobile: FC<Props> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n direction={\"row\"}\n width={\"100%\"}\n className=\"oui-cursor-pointer oui-items-center oui-gap-2 oui-rounded-xl oui-bg-base-9 oui-p-4 oui-mb-3\"\n onClick={() =>\n props?.routerAdapter?.onRouteChange({\n href: PortfolioLeftSidebarPath.Setting,\n name: t(\"portfolio.setting\"),\n })\n }\n >\n <SettingFillIcon size={18} opacity={0.98} color=\"white\" />\n <Text className=\"oui-text-base oui-font-semibold oui-text-base-contrast-80\">\n {t(\"portfolio.setting\")}\n </Text>\n <ChevronRightIcon\n className=\"oui-ml-auto\"\n size={18}\n opacity={0.36}\n color=\"white\"\n />\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { isNumber } from \"lodash\";\nimport { RefferalAPI as API } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Flex,\n Text,\n TraderMobileIcon,\n ChevronRightIcon,\n cn,\n} from \"@orderly.network/ui\";\nimport { RouterAdapter } from \"@orderly.network/ui-scaffold\";\nimport { commifyOptional } from \"@orderly.network/utils\";\n\ntype TraderCardMobileProps = {\n referralInfo?: API.ReferralInfo;\n routerAdapter?: RouterAdapter;\n};\n\nexport const TraderCardMobile: FC<TraderCardMobileProps> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n className=\"\n oui-via-21.6% \n oui-via-83.23% \n oui-relative \n oui-h-[112px] \n oui-w-full \n oui-flex-col \n oui-items-start \n oui-rounded-xl \n oui-border\n oui-border-solid \n oui-border-[rgba(var(--oui-gradient-success-start)/0.36)]\n oui-bg-gradient-to-r\n oui-from-[rgba(var(--oui-gradient-success-end)/0.12)]\n oui-to-[rgba(var(--oui-gradient-success-start)/0.12)]\n oui-p-3\n \"\n >\n <Flex className=\"oui-w-full oui-flex-row oui-justify-between oui-items-center\">\n <Flex className=\"oui-flex-col oui-items-start\">\n <Text className=\"oui-text-base-contrast oui-text-base oui-font-semibold\">\n {t(\"affiliate.trader.rebates\")}\n </Text>\n <Text className=\"oui-text-2xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"affiliate.trader.tradingRebates\")}\n </Text>\n </Flex>\n <TraderMobileIcon />\n </Flex>\n\n <Flex\n className={cn(\n \"oui-mt-auto oui-w-full oui-flex-row oui-items-center oui-gap-1\",\n )}\n >\n <img\n src=\"https://oss.orderly.network/static/symbol_logo/USDC.png\"\n alt=\"USDC\"\n className=\"oui-size-5\"\n />\n <Text\n className={cn(\n \"oui-text-xs oui-font-semibold\",\n isNumber(\n props?.referralInfo?.referee_info?.[\"30d_referee_rebate\"],\n ) && props?.referralInfo?.referee_info?.[\"30d_referee_rebate\"] != 0\n ? \"oui-text-base-contrast\"\n : \"oui-text-base-contrast-36\",\n )}\n >\n {commifyOptional(\n props?.referralInfo?.referee_info?.[\"30d_referee_rebate\"],\n { fix: 2, fallback: \"--\" },\n )}\n </Text>\n <Text className=\"oui-text-xs oui-font-semibold oui-text-base-contrast-36\">\n (30D)\n </Text>\n <ChevronRightIcon\n size={18}\n color=\"white\"\n className=\"oui-ml-auto\"\n onClick={() =>\n props?.routerAdapter?.onRouteChange({\n href: \"/rewards/affiliate?tab=trader\",\n name: t(\"tradingRewards.rewards\"),\n })\n }\n />\n </Flex>\n </Flex>\n );\n};\n","import { FC, useState, useEffect } from \"react\";\nimport { isNumber } from \"lodash\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Flex,\n Text,\n TradingRewardsIcon,\n ChevronRightIcon,\n OrderlyIcon,\n EsOrderlyIcon,\n cn,\n modal,\n} from \"@orderly.network/ui\";\nimport { UseRewardsDataReturn } from \"./useRewardsData.script\";\n\ntype TradingRewardsCardMobileProps = UseRewardsDataReturn & {\n isSignIn: boolean;\n wrongNetwork: boolean;\n goToClaim: () => void;\n};\n\nexport const TradingRewardsCardMobile: FC<TradingRewardsCardMobileProps> = (\n props,\n) => {\n const { t } = useTranslation();\n\n const curEpochInfo = props.epochList?.[1].curEpochInfo;\n // const startTime = curEpochInfo?.start_time;\n const endTime = curEpochInfo?.end_time;\n const curEpochId = curEpochInfo?.epoch_id;\n // const max_reward_amount = curEpochInfo?.max_reward_amount;\n\n const isOrder = curEpochInfo\n ? `${curEpochInfo?.epoch_token}`.toLowerCase() === \"order\"\n : undefined;\n\n const onClaim = (event: React.MouseEvent<SVGSVGElement>) => {\n if (!props.isSignIn || props.wrongNetwork) {\n event.stopPropagation();\n event.preventDefault();\n modal.alert({\n title: t(\"common.tips\"),\n message: (\n <Text intensity={54}>\n {props.wrongNetwork\n ? t(\"connector.wrongNetwork.tooltip\")\n : t(\"affiliate.connectWallet.tooltip\")}\n </Text>\n ),\n });\n } else {\n props.goToClaim();\n }\n };\n\n return (\n <Flex\n className=\"\n oui-via-21.6% \n oui-via-83.23% \n oui-relative \n oui-h-[236px] \n oui-w-full \n oui-flex-col \n oui-items-start\n oui-rounded-xl \n oui-border \n oui-border-solid \n oui-border-[rgba(var(--oui-gradient-secondary-start)/0.36)] \n oui-bg-gradient-to-r\n oui-from-[rgba(var(--oui-gradient-secondary-end)/0.12)]\n oui-to-[rgba(var(--oui-gradient-secondary-start)/0.12)]\n oui-p-3\n \"\n >\n <Flex className=\"oui-w-full oui-flex-row oui-justify-between oui-items-center\">\n <Flex className=\"oui-flex-col oui-items-start\">\n <Text className=\"oui-text-base-contrast oui-text-base oui-font-semibold oui-whitespace-pre max-[400px]:oui-text-[15px]\">\n {t(\"common.tradingRewards\")}\n </Text>\n <Text className=\"oui-text-2xs oui-font-normal oui-whitespace-pre oui-text-base-contrast-54\">\n {t(\"tradingRewards.subtitle.mm\")}\n </Text>\n </Flex>\n <TradingRewardsIcon />\n </Flex>\n <Flex\n direction=\"row\"\n itemAlign={\"center\"}\n className=\"oui-mb-3 oui-mt-[35px] oui-w-full oui-justify-center oui-gap-1.5\"\n >\n <Text className=\"oui-text-sm oui-font-normal oui-text-base-contrast-80\">\n {t(\"tradingRewards.epoch\")}\n </Text>\n <Text className=\"oui-text-base-contrast oui-text-sm oui-font-bold\">\n {curEpochId}\n </Text>\n </Flex>\n <Countdown targetTimestamp={endTime} />\n <Flex className=\"oui-mt-auto oui-w-full oui-flex-row oui-items-center oui-gap-1\">\n {isOrder ? (\n <OrderlyIcon className=\"oui-size-5\" />\n ) : (\n <EsOrderlyIcon className=\"oui-size-5\" />\n )}\n <Text\n className={cn(\n \"oui-text-xs oui-font-semibold\",\n isNumber(props?.curEpochEstimate?.est_r_wallet)\n ? \"oui-text-base-contrast\"\n : \"oui-text-base-contrast-36\",\n )}\n >\n {props?.curEpochEstimate?.est_r_wallet ?? \"--\"}\n </Text>\n <Flex className=\"oui-ml-auto\">\n <ChevronRightIcon\n size={18}\n color=\"white\"\n className=\"oui-ml-auto\"\n onClick={onClaim}\n />\n </Flex>\n </Flex>\n </Flex>\n );\n};\n\nconst Countdown: FC<{\n targetTimestamp?: number;\n}> = ({ targetTimestamp }) => {\n const [timeLeft, setTimeLeft] = useState({\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n });\n\n useEffect(() => {\n const intervalId = setInterval(() => {\n if (typeof targetTimestamp === \"undefined\") return;\n const now = new Date().getTime();\n const distance = targetTimestamp - now;\n\n if (distance < 0) {\n clearInterval(intervalId as unknown as number);\n setTimeLeft({\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n });\n } else {\n const days = Math.floor(distance / (1000 * 60 * 60 * 24));\n const hours = Math.floor(\n (distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60),\n );\n const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\n const seconds = Math.floor((distance % (1000 * 60)) / 1000);\n\n setTimeLeft({ days, hours, minutes, seconds });\n }\n }, 1000);\n\n return () => clearInterval(intervalId as unknown as number);\n }, [targetTimestamp]);\n\n return (\n <Flex\n direction=\"row\"\n itemAlign={\"center\"}\n className=\"oui-w-full oui-justify-around\"\n >\n <CountDownItem type=\"D\" value={timeLeft.days} />\n <CountDownItem type=\"H\" value={timeLeft.hours} />\n <CountDownItem type=\"M\" value={timeLeft.minutes} />\n <CountDownItem type=\"S\" value={timeLeft.seconds} />\n </Flex>\n );\n};\n\nconst CountDownItem = ({ type, value }: { type: string; value: number }) => {\n return (\n <Flex\n direction=\"column\"\n itemAlign={\"center\"}\n className=\"oui-h-11 oui-w-8 oui-rounded-[6px] oui-bg-white/[0.08]\"\n >\n <Text className=\"oui-text-base-contrast oui-text-base oui-font-bold\">\n {value}\n </Text>\n <Text className=\"oui-text-2xs oui-font-normal oui-text-base-contrast-36\">\n {type}\n </Text>\n </Flex>\n );\n};\n","import { useMemo, useRef, useEffect } from \"react\";\nimport {\n useAllBrokers,\n useConfig,\n useCurEpochEstimate,\n useEpochInfo,\n useGetClaimed,\n useAccount,\n RefferalAPI as API,\n usePrivateQuery,\n} from \"@orderly.network/hooks\";\nimport { DistributionId, TWType } from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { useOverviewContext } from \"../provider/overviewContext\";\n\nexport const useRewardsData = ({ type = TWType.normal }: { type?: TWType }) => {\n const totalOrderClaimedReward = useGetClaimed(\n type === TWType.mm ? DistributionId.mmOrder : DistributionId.order,\n );\n const [curEpochEstimate] = useCurEpochEstimate(type);\n const [brokers] = useAllBrokers();\n const { state } = useAccount();\n const { data, mutate } = usePrivateQuery<API.ReferralInfo>(\n \"/v1/referral/info\",\n {\n revalidateOnFocus: true,\n },\n );\n\n const epochList = useEpochInfo(type as TWType);\n const brokerId = useConfig(\"brokerId\");\n const brokerName = useMemo(() => {\n return brokers?.[brokerId];\n }, [brokerId, brokers]);\n\n const lastStete = useRef<AccountStatusEnum>(AccountStatusEnum.NotConnected);\n\n useEffect(() => {\n let timerId: any;\n if (lastStete.current !== state.status) {\n lastStete.current = state.status;\n timerId = setTimeout(() => {\n mutate();\n }, 1000);\n }\n\n return () => {\n if (timerId) clearTimeout(timerId);\n };\n }, [state.status]);\n\n return {\n totalOrderClaimedReward,\n curEpochEstimate,\n epochList,\n brokerName,\n referralInfo: data,\n };\n};\n\nexport const useRewardsDataScript = () => {\n const {\n totalOrderClaimedReward,\n curEpochEstimate,\n epochList,\n brokerName,\n referralInfo,\n } = useOverviewContext();\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n const isSignIn =\n state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected;\n\n return {\n totalOrderClaimedReward,\n curEpochEstimate,\n epochList,\n brokerName,\n isSignIn,\n referralInfo,\n wrongNetwork,\n };\n};\n\nexport type UseRewardsDataReturn = ReturnType<typeof useRewardsData>;\n","import { FC, PropsWithChildren, useMemo } from \"react\";\nimport { TWType } from \"@orderly.network/hooks\";\nimport { useRewardsData } from \"../mobile/useRewardsData.script\";\nimport { useAssetsHistoryData } from \"../shared/useAssetHistory\";\nimport { OverviewContext, OverviewContextState } from \"./overviewContext\";\n\nconst localKey = \"portfolio_performance_period\";\n\nexport const OverviewProvider: FC<PropsWithChildren<{ type?: TWType }>> = (\n props,\n) => {\n const { type, children } = props;\n const state = useAssetsHistoryData(localKey, { isRealtime: true });\n const rewardsData = useRewardsData({ type: type });\n\n const memoizedValue = useMemo<OverviewContextState>(() => {\n return {\n ...state,\n type: type,\n ...rewardsData,\n };\n }, [state, type, rewardsData]);\n\n return (\n <OverviewContext.Provider value={memoizedValue}>\n {children}\n </OverviewContext.Provider>\n );\n};\n","export { FeeTierPage } from \"./page\";\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useAccountInfo,\n usePrivateQuery,\n} from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { dataSource as defaultDataSource } from \"./dataSource\";\nimport { AccountStatusEnum, API } from \"@orderly.network/types\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { Column } from \"@orderly.network/ui\";\nimport { useFeeTierColumns } from \"./column\";\n\nexport type useFeeTierScriptReturn = ReturnType<typeof useFeeTierScript>;\n\nexport type UseFeeTierScriptOptions = {\n dataAdapter?: (\n columns: Column[],\n dataSource: any[]\n ) => { columns: Column[]; dataSource: any[] };\n onRow?: (\n record: any,\n index: number\n ) => {\n normal: any;\n active: any;\n };\n};\n\nexport function useFeeTierScript(options?: UseFeeTierScriptOptions) {\n const { dataAdapter } = options || {};\n const [tier, setTier] = useState<number>();\n const { data } = useAccountInfo();\n const { state } = useAccount();\n\n const cols = useFeeTierColumns();\n\n const { data: volumeStatistics } = usePrivateQuery<\n | {\n perp_volume_last_30_days: number;\n }\n | undefined\n >(\"/v1/volume/user/stats\");\n\n const { columns, dataSource } = useMemo(() => {\n return typeof dataAdapter === \"function\"\n ? dataAdapter(cols, defaultDataSource)\n : {\n columns: cols,\n dataSource: defaultDataSource,\n };\n }, [dataAdapter, cols]);\n\n const getFuturesCurrentTier = (\n feeList: typeof defaultDataSource,\n data: API.AccountInfo\n ) => {\n const { futures_taker_fee_rate = 0, futures_maker_fee_rate = 0 } = data;\n const takerRate = `${new Decimal(futures_taker_fee_rate)\n .mul(0.01)\n .toString()}%`;\n const makerRate = `${new Decimal(futures_maker_fee_rate)\n .mul(0.01)\n .toString()}%`;\n\n for (const item of feeList) {\n if (takerRate === item.taker_fee && makerRate === item.maker_fee) {\n return item.tier;\n }\n }\n };\n\n useEffect(() => {\n if (!data) {\n return;\n }\n\n const tier = getFuturesCurrentTier(dataSource, data);\n setTier(tier!);\n }, [data, dataSource]);\n\n const futures_taker_fee_rate = useMemo(() => {\n const value = data?.futures_taker_fee_rate;\n if (typeof value === \"undefined\") return undefined;\n return `${new Decimal(value).mul(0.01).toString()}%`;\n }, [data]);\n\n const futures_maker_fee_rate = useMemo(() => {\n const value = data?.futures_maker_fee_rate;\n if (typeof value === \"undefined\") return undefined;\n return `${new Decimal(value).mul(0.01).toString()}%`;\n }, [data]);\n\n const authData = useDataTap(\n {\n tier,\n vol: volumeStatistics?.perp_volume_last_30_days,\n takerFeeRate: futures_taker_fee_rate,\n makerFeeRate: futures_maker_fee_rate,\n },\n {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n }\n );\n\n return {\n ...authData,\n columns,\n dataSource,\n onRow: options?.onRow,\n };\n}\n","export const dataSource = [\n {\n tier: 1,\n maker_fee: \"0.03%\",\n taker_fee: \"0.06%\",\n volume_min: 0,\n volume_max: 500000,\n },\n {\n tier: 2,\n maker_fee: \"0.02%\",\n taker_fee: \"0.05%\",\n volume_min: 500000,\n volume_max: 2500000,\n },\n {\n tier: 3,\n maker_fee: \"0.015%\",\n taker_fee: \"0.045%\",\n volume_min: 2500000,\n volume_max: 10000000,\n },\n {\n tier: 4,\n maker_fee: \"0.01%\",\n taker_fee: \"0.04%\",\n volume_min: 10000000,\n volume_max: 50000000,\n },\n {\n tier: 5,\n maker_fee: \"0.005%\",\n taker_fee: \"0.035%\",\n volume_min: 50000000,\n volume_max: 125000000,\n or: \"/\",\n staking_min: 300000,\n staking_max: null,\n },\n {\n tier: 6,\n maker_fee: \"0%\",\n taker_fee: \"0.03%\",\n volume_min: 125000000,\n volume_max: null,\n or: \"/\",\n staking: null,\n staking_min: null,\n staking_max: null,\n },\n];\n","import { useMemo } from \"react\";\nimport { type Column, Text } from \"@orderly.network/ui\";\nimport { numberToHumanStyle } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const useFeeTierColumns = () => {\n const { t } = useTranslation();\n const columns = useMemo(() => {\n return [\n {\n title: t(\"portfolio.feeTier.column.tier\"),\n dataIndex: \"tier\",\n align: \"left\",\n width: 100,\n },\n {\n title: `${t(\"portfolio.feeTier.column.30dVolume\")} (USDC)`,\n dataIndex: \"volume\",\n align: \"center\",\n width: 170,\n render: (value, row) => {\n const { volume_min, volume_max, volume_node } = row;\n\n if (volume_node) return volume_node;\n if (!volume_min && !volume_max) {\n return <div style={{ fontVariantLigatures: \"none\" }}>--</div>;\n }\n\n if (volume_min && !volume_max) {\n return (\n <div>\n {t(\"portfolio.feeTier.column.30dVolume.above\", {\n volume: numberToHumanStyle(\n volume_min,\n volume_min === 2500000 ? 1 : 0\n ),\n })}\n </div>\n );\n }\n return (\n <div>\n {volume_min &&\n numberToHumanStyle(volume_min, volume_min === 2500000 ? 1 : 0)}\n {` - `}\n {volume_max &&\n numberToHumanStyle(volume_max, volume_max === 2500000 ? 1 : 0)}\n </div>\n );\n },\n },\n {\n title: t(\"portfolio.feeTier.column.maker\"),\n dataIndex: \"maker_fee\",\n align: \"right\",\n width: 100,\n render: (value) => {\n return <Text>{value}</Text>;\n },\n },\n {\n title: t(\"portfolio.feeTier.column.taker\"),\n dataIndex: \"taker_fee\",\n align: \"right\",\n width: 100,\n render: (value) => {\n return <Text>{value}</Text>;\n },\n },\n ] as Column[];\n }, [t]);\n\n return columns;\n};\n","import { FC, ReactNode, useCallback, useEffect, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Flex,\n Text,\n Card,\n Divider,\n DataTable,\n Column,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useFeeTierScriptReturn } from \"./feeTier.script\";\n\nexport type FeeTierProps = useFeeTierScriptReturn;\n\nexport const FeeTier: React.FC<FeeTierProps> = (props) => {\n const { columns, dataSource, tier, vol, takerFeeRate, makerFeeRate } = props;\n const { t } = useTranslation();\n return (\n <Card\n title={\n <Flex justify={\"between\"}>\n <Text size=\"lg\">{t(\"portfolio.feeTier\")}</Text>\n <Flex gap={1}>\n <Text size=\"xs\" intensity={54}>\n {t(\"portfolio.feeTier.updatedDailyBy\")}\n </Text>\n <Text size=\"xs\" intensity={80}>\n 2:00 UTC\n </Text>\n </Flex>\n </Flex>\n }\n className=\"w-full\"\n id=\"oui-portfolio-fee-tier\"\n >\n <Divider />\n <FeeTierHeader\n tier={tier!}\n vol={vol!}\n takerFeeRate={takerFeeRate!}\n makerFeeRate={makerFeeRate!}\n />\n <FeeTierTable\n dataSource={dataSource}\n columns={columns}\n tier={tier}\n onRow={props.onRow}\n />\n </Card>\n );\n};\n\nexport type FeeTierHeaderProps = {\n tier?: number;\n vol?: number;\n takerFeeRate?: string;\n makerFeeRate?: string;\n};\n\nexport const FeeTierHeader: React.FC<FeeTierHeaderProps> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex direction=\"row\" gapX={4} my={4} itemAlign={\"stretch\"}>\n <FeeTierHeaderItem\n label={t(\"portfolio.feeTier.header.yourTier\")}\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.tier || \"--\"}\n </Text.gradient>\n }\n />\n <FeeTierHeaderItem\n label={`${t(\"portfolio.feeTier.header.30dVolume\")} (USDC)`}\n value={\n <Text.numeral rule=\"price\" dp={2} rm={Decimal.ROUND_DOWN}>\n {typeof props.vol !== undefined ? `${props.vol}` : \"-\"}\n </Text.numeral>\n }\n />\n <FeeTierHeaderItem\n label={t(\"portfolio.feeTier.header.takerFeeRate\")}\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.takerFeeRate || \"--\"}\n </Text.gradient>\n }\n />\n <FeeTierHeaderItem\n label={t(\"portfolio.feeTier.header.makerFeeRate\")}\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.makerFeeRate || \"--\"}\n </Text.gradient>\n }\n />\n </Flex>\n );\n};\n\nexport type FeeTierHeaderItemProps = {\n label: string;\n value: ReactNode;\n};\n\nexport const FeeTierHeaderItem: React.FC<FeeTierHeaderItemProps> = (props) => {\n return (\n <Box\n gradient=\"neutral\"\n r=\"lg\"\n px={4}\n py={2}\n angle={184}\n width=\"100%\"\n border\n borderColor={6}\n >\n <Text\n as=\"div\"\n intensity={36}\n size=\"2xs\"\n weight=\"semibold\"\n className=\"oui-leading-[18px]\"\n >\n {props.label}\n </Text>\n\n <Text\n size=\"base\"\n intensity={80}\n className=\"oui-mt-[2px] oui-leading-[24px]\"\n >\n {props.value}\n </Text>\n </Box>\n );\n};\n\ntype FeeTierTableProps = {\n columns: Column[];\n dataSource?: any[];\n page?: number;\n pageSize?: number;\n dataCount?: number;\n tier?: number | null;\n onRow?: (\n record: any,\n index: number,\n ) => {\n normal: any;\n active: any;\n };\n};\n\nexport const FeeTierTable: FC<FeeTierTableProps> = (props) => {\n const [top, setTop] = useState<undefined | number>(undefined);\n useEffect(() => {\n const parentRect = document\n .getElementById(\"oui-fee-tier-content\")\n ?.getBoundingClientRect();\n const elementRect = document\n .getElementById(\"oui-fee-tier-current\")\n ?.getBoundingClientRect();\n\n if (elementRect && parentRect && !!props.tier) {\n const offsetTop = elementRect.top - parentRect.top;\n setTop(offsetTop);\n } else {\n setTop(undefined);\n }\n }, [props.tier]);\n\n const onRow = useCallback(\n (record: any, index: number) => {\n const config = props?.onRow?.(record, index) ?? {\n normal: undefined,\n active: undefined,\n };\n if (index + 1 == props.tier) {\n const innerConfig = {\n id: \"oui-fee-tier-current\",\n \"data-state\": \"active\",\n className:\n \"group oui-h-12 oui-text-[rgba(0,0,0,0.88)] oui-pointer-events-none\",\n };\n return {\n ...innerConfig,\n ...config.active,\n };\n }\n\n return {\n \"data-state\": \"none\",\n ...{ className: \"oui-h-12\" },\n ...config.normal,\n };\n },\n [props.tier, props.onRow],\n );\n\n return (\n <Box\n id=\"oui-fee-tier-content\"\n className=\"oui-relative oui-border-b oui-border-line-4\"\n >\n {top && (\n <Box\n angle={90}\n gradient=\"brand\"\n className=\"oui-absolute oui-w-full oui-rounded-md\"\n style={{\n top: `${top}px`,\n height: \"48px\",\n }}\n />\n )}\n <DataTable\n bordered\n className=\"oui-font-semibold\"\n classNames={{\n root: \"oui-bg-transparent\",\n }}\n onRow={onRow}\n columns={props.columns}\n dataSource={props.dataSource}\n />\n </Box>\n );\n};\n","import { FC } from \"react\";\nimport { useFeeTierScript, UseFeeTierScriptOptions } from \"./feeTier.script\";\nimport { FeeTier } from \"./feeTier.ui\";\n\nexport type FeeTierWidgetProps = UseFeeTierScriptOptions;\n\nexport const FeeTierWidget: FC<FeeTierWidgetProps> = (props) => {\n const state = useFeeTierScript(props);\n return <FeeTier {...state} />;\n};\n","import { FC } from \"react\";\nimport { FeeTierWidget, FeeTierWidgetProps } from \"./feeTier.widget\";\n\nexport type FeeTierPageProps = FeeTierWidgetProps;\n\nexport const FeeTierPage: FC<FeeTierPageProps> = (props) => {\n return <FeeTierWidget {...props} />;\n};\n","import { useMemo, useState } from \"react\";\nimport React from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Flex,\n Text,\n Divider,\n Box,\n Tabs,\n TabPanel,\n DataFilter,\n formatAddress,\n} from \"@orderly.network/ui\";\nimport {\n LiquidationWidget,\n PositionHistoryWidget,\n PositionsProps,\n CombinePositionsWidget,\n PositionsWidget,\n} from \"@orderly.network/ui-positions\";\nimport type { SelectOption } from \"@orderly.network/ui/src/select/withOptions\";\nimport { AccountType } from \"../assets/assets.ui\";\n\nenum TabsType {\n positions = \"Positions\",\n positionHistory = \"Position history\",\n liquidation = \"Liquidation\",\n}\n\nexport const PositionsPage: React.FC<PositionsProps> = (props) => {\n const [tab, setTab] = useState(TabsType.positions);\n const { t } = useTranslation();\n const { state, isMainAccount } = useAccount();\n\n const subAccounts = state.subAccounts ?? [];\n\n const [selectedAccount, setAccount] = React.useState<string>(AccountType.ALL);\n\n const onAccountFilter = React.useCallback(\n (filter: { name: string; value: string }) => {\n const { name, value } = filter;\n if (name === \"account\") {\n setAccount(value);\n }\n },\n [],\n );\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\n\n return (\n <Flex\n // p={6}\n direction={\"column\"}\n itemAlign={\"start\"}\n gap={4}\n width=\"100%\"\n height=\"100%\"\n >\n <Flex>\n <Text size=\"lg\">{t(\"common.positions\")}</Text>\n </Flex>\n <Divider className=\"oui-w-full\" />\n {/* 26(title height) + 1(divider) + 32 (padding) */}\n <Box width=\"100%\" className=\"oui-h-[calc(100%_-_59px)]\">\n <Tabs\n value={tab}\n onValueChange={(e) => setTab(e as any)}\n classNames={{\n tabsList: \"!oui-border-none oui-pb-1\",\n tabsContent: \"oui-h-[calc(100%_-_28px)]\",\n }}\n className=\"oui-h-full\"\n >\n <TabPanel value={TabsType.positions} title={t(\"common.positions\")}>\n {isMainAccount && (\n <DataFilter\n onFilter={onAccountFilter}\n items={[\n {\n type: \"select\",\n name: \"account\",\n value: selectedAccount,\n options: memoizedOptions,\n },\n ]}\n />\n )}\n {isMainAccount ? (\n <CombinePositionsWidget\n selectedAccount={selectedAccount}\n {...props}\n />\n ) : (\n <PositionsWidget {...props} />\n )}\n </TabPanel>\n <TabPanel\n value={TabsType.positionHistory}\n title={t(\"positions.positionHistory\")}\n >\n <PositionHistoryWidget {...props} />\n </TabPanel>\n <TabPanel\n value={TabsType.liquidation}\n title={t(\"positions.liquidation\")}\n >\n <LiquidationWidget />\n </TabPanel>\n </Tabs>\n </Box>\n </Flex>\n );\n};\n","import { FC, SVGProps, useRef } from \"react\";\nimport React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Button, Divider, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { OrderListInstance, OrdersWidget } from \"@orderly.network/ui-orders\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const OrdersPage = (props: { sharePnLConfig?: SharePnLConfig }) => {\n const { sharePnLConfig } = props;\n const { t } = useTranslation();\n\n const ordersRef = useRef<OrderListInstance>(null);\n\n const onDownload = () => {\n ordersRef.current?.download?.();\n };\n\n return (\n <Flex\n // p={6}\n direction={\"column\"}\n itemAlign={\"start\"}\n gap={4}\n width=\"100%\"\n height=\"100%\"\n >\n <Flex width=\"100%\" justify=\"between\">\n <Text size=\"lg\">{t(\"common.orders\")}</Text>\n <Tooltip content={t(\"orders.download.tooltip\")}>\n <Button\n color=\"gray\"\n size=\"sm\"\n className=\"oui-bg-base-4\"\n onClick={onDownload}\n >\n {t(\"common.download\")}\n <TooltipIcon className=\"oui-text-base-contrast-36 oui-ml-[5px]\" />\n </Button>\n </Tooltip>\n </Flex>\n <Divider className=\"oui-w-full\" />\n {/* 26(title height) + 1(divider) + 32 (padding) */}\n <Box width=\"100%\" className=\"oui-h-[calc(100%_-_59px)]\">\n <OrdersWidget ref={ordersRef} sharePnLConfig={sharePnLConfig} />\n </Box>\n </Flex>\n );\n};\n\nconst TooltipIcon = React.forwardRef<SVGSVGElement, SVGProps<SVGSVGElement>>(\n (props, ref) => {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={ref}\n {...props}\n >\n <path d=\"M5.999 1.007a5 5 0 1 0 0 10 5 5 0 0 0 0-10m0 2.5a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1m0 1.5a.5.5 0 0 1 .5.5v2.5a.5.5 0 0 1-1 0v-2.5a.5.5 0 0 1 .5-.5\" />\n </svg>\n );\n },\n);\n","export { APIManagerWidget } from \"./apiManager.widget\";\nexport { APIManagerPage } from \"./apiManager.page\";\n","import { FC, useState } from \"react\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Button,\n Card,\n CopyIcon,\n Flex,\n PlusIcon,\n Column,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport {\n AuthGuardEmpty,\n AuthGuardDataTable,\n AuthGuardTooltip,\n} from \"@orderly.network/ui-connector\";\nimport {\n ApiManagerScriptReturns,\n capitalizeFirstChar,\n} from \"./apiManager.script\";\nimport { CreateAPIKeyDialog } from \"./dialog/createApiKey\";\nimport { CreatedAPIKeyDialog } from \"./dialog/createdApiKey\";\nimport { DeleteAPIKeyDialog } from \"./dialog/deleteApiKey\";\nimport { EditAPIKeyDialog } from \"./dialog/editApiKey\";\n\nexport const APIManager: FC<ApiManagerScriptReturns> = (props) => {\n const { t } = useTranslation();\n return (\n <Card\n title={t(\"portfolio.apiKeys\")}\n id=\"portfolio-apikey-manager\"\n className=\"oui-bg-base-9 oui-font-semibold\"\n >\n <Flex\n direction={\"column\"}\n gap={4}\n width={\"100%\"}\n className=\"oui-font-semibold\"\n >\n <AccountInfo {...props} />\n <Subtitle {...props} />\n </Flex>\n <div>\n <KeyList {...props} />\n <CreateAPIKeyDialog {...props} />\n <CreatedAPIKeyDialog {...props} />\n </div>\n </Card>\n );\n};\n\nconst AccountInfo: FC<ApiManagerScriptReturns> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n width={\"100%\"}\n gap={4}\n className=\"oui-border-t-2 oui-border-line-6 oui-pt-4\"\n >\n <Flex\n py={2}\n px={4}\n direction={\"column\"}\n itemAlign={\"start\"}\n r=\"xl\"\n gradient=\"neutral\"\n angle={27}\n border\n className=\"oui-w-1/2\"\n >\n <Text size=\"xs\" intensity={36}>\n {t(\"common.accountId\")}\n </Text>\n <Text.formatted\n size=\"base\"\n inlist={80}\n rule={\"address\"}\n copyable={props.accountId !== \"--\"}\n copyIconSize={16}\n onCopy={props.onCopyAccountId}\n copyIconTestid=\"oui-testid-apiKey-accountInfo-accountId-copy-btn\"\n >\n {props.accountId}\n </Text.formatted>\n </Flex>\n <Flex\n py={2}\n px={4}\n direction={\"column\"}\n itemAlign={\"start\"}\n r=\"xl\"\n gradient=\"neutral\"\n angle={27}\n border\n className=\"oui-w-1/2\"\n >\n <Text size=\"xs\" intensity={36}>\n {t(\"portfolio.apiKey.uid\")}\n </Text>\n <Text size=\"base\" inlist={80}>\n {props.userId}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst Subtitle: FC<ApiManagerScriptReturns> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n width={\"100%\"}\n direction={\"row\"}\n className=\"oui-text-sm oui-border-b-2 oui-border-line-6 oui-pb-4\"\n >\n <Flex direction={\"column\"} itemAlign={\"start\"} width={\"100%\"} gap={1}>\n <Text intensity={54}>{t(\"portfolio.apiKey.description\")}</Text>\n <Flex\n itemAlign={\"center\"}\n className=\"oui-text-primary-light oui-fill-primary-light hover:oui-text-primary-darken oui-cursor-pointer oui-text-2xs md:oui-text-xs xl:oui-text-sm\"\n onClick={props.onReadApiGuide}\n >\n <Text>{t(\"portfolio.apiKey.readApiGuide\")}</Text>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M4.008 7.995c0-.368.298-.666.666-.666H9.71L7.733 5.331l.937-.936 3.143 3.122c.13.13.195.304.195.479a.67.67 0 0 1-.195.478L8.67 11.596l-.937-.937 1.978-1.998H4.674a.666.666 0 0 1-.666-.666\" />\n </svg>\n </Flex>\n </Flex>\n <AuthGuardTooltip\n side=\"top\"\n tooltip={{\n connectWallet: t(\"portfolio.apiKey.create.connectWallet.tooltip\"),\n signIn: t(\"portfolio.apiKey.create.createAccount.tooltip\"),\n enableTrading: t(\"portfolio.apiKey.create.enableTrading.tooltip\"),\n wrongNetwork: t(\"portfolio.apiKey.create.wrongNetwork.tooltip\"),\n }}\n >\n <Button\n size=\"md\"\n icon={<PlusIcon />}\n variant=\"contained\"\n color=\"primary\"\n onClick={props.onCreateApiKey}\n disabled={!props.canCreateApiKey}\n // className=\"disabled:oui-cursor-default\"\n data-testid=\"oui-testid-apiKey-createApiKey-btn\"\n >\n {t(\"portfolio.apiKey.create.dialog.title\")}\n </Button>\n </AuthGuardTooltip>\n </Flex>\n );\n};\n\nconst KeyList: FC<ApiManagerScriptReturns> = (props) => {\n const { t } = useTranslation();\n const columns: Column<APIKeyItem>[] = [\n {\n title: t(\"portfolio.apiKey.column.apiKey\"),\n dataIndex: \"orderly_key\",\n render: (value) => {\n return (\n <Text.formatted\n rule={\"\"}\n copyable\n copyIconSize={16}\n onCopy={() => {\n props.onCopyApiKey?.(value);\n }}\n >\n {formatKey(value)}\n </Text.formatted>\n );\n },\n },\n {\n title: t(\"portfolio.apiKey.column.permissionType\"),\n dataIndex: \"scope\",\n render: (value) =>\n value\n ?.split(\",\")\n .map((e: any) => capitalizeFirstChar(`${e}`))\n .join(\", \"),\n },\n {\n title: t(\"portfolio.apiKey.column.restrictedIP\"),\n dataIndex: \"ip_restriction_list\",\n render: (value) => {\n let ip = value.join(\",\");\n if (ip.length === 0) {\n ip = \"--\";\n }\n return (\n <Tooltip content={ip} className=\"oui-max-w-[200px] oui-break-all\">\n <Flex gap={1}>\n <div className=\" oui-overflow-ellipsis oui-overflow-hidden\">\n {ip}\n </div>\n {ip !== \"--\" && (\n <Box width={16} height={16} className=\"oui-cursor-pointer\">\n <CopyIcon\n color=\"white\"\n opacity={0.54}\n size={16}\n onClick={(e) => {\n navigator.clipboard.writeText(ip);\n props?.onCopyIP();\n }}\n />\n </Box>\n )}\n </Flex>\n </Tooltip>\n );\n },\n },\n {\n title: t(\"portfolio.apiKey.column.expirationDate\"),\n dataIndex: \"expiration\",\n render: (value) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd\">\n {value}\n </Text.formatted>\n ),\n },\n {\n title: \"\",\n type: \"action\",\n dataIndex: \"action\",\n width: 120,\n render: (_, item) => {\n return (\n <Flex direction={\"row\"} gap={2}>\n <EditButton\n item={item}\n onUpdate={props.doEdit}\n verifyIP={props.verifyIP}\n />\n <DeleteButton item={item} onDelete={props.doDelete} />\n </Flex>\n );\n },\n },\n ];\n return (\n <AuthGuardDataTable\n bordered\n columns={columns}\n loading={props.isLoading}\n dataSource={props.keys}\n emptyView={<AuthGuardEmpty />}\n classNames={{}}\n pagination={props.pagination}\n manualPagination={false}\n />\n );\n};\n\nconst EditButton: FC<{\n item: APIKeyItem;\n onUpdate: (item: APIKeyItem, ip?: string) => Promise<void>;\n verifyIP: (ip: string) => string;\n}> = (props) => {\n const { item, onUpdate, verifyIP } = props;\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n\n return (\n <>\n <Button\n size=\"xs\"\n color=\"primary\"\n variant=\"contained\"\n onClick={(e) => {\n e.stopPropagation();\n setOpen(true);\n }}\n data-testid=\"oui-testid-apiKey-keyList-edit-btn\"\n >\n {t(\"common.edit\")}\n </Button>\n\n {open && (\n <EditAPIKeyDialog\n item={item}\n open={open}\n setOpen={setOpen}\n onUpdate={onUpdate}\n verifyIP={verifyIP}\n />\n )}\n </>\n );\n};\n\nconst DeleteButton: FC<{\n item: APIKeyItem;\n onDelete: (item: APIKeyItem) => Promise<void>;\n}> = (props) => {\n const { item, onDelete } = props;\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n return (\n <>\n <Button\n size=\"xs\"\n color=\"gray\"\n variant=\"contained\"\n onClick={(e) => {\n e.stopPropagation();\n setOpen(true);\n }}\n data-testid=\"oui-testid-apiKey-keyList-delete-btn\"\n >\n {t(\"common.delete\")}\n </Button>\n\n {open && (\n <DeleteAPIKeyDialog\n item={item}\n open={open}\n setOpen={setOpen}\n onDelete={onDelete}\n />\n )}\n </>\n );\n};\n\nexport function formatKey(value: string): string {\n if (typeof value === \"undefined\") return \"-\";\n const key = `${value}`.replace(\"ed25519:\", \"\").slice(0, 6);\n return `${key}*****`;\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n APIKeyItem,\n ScopeType,\n useAccount,\n useApiKeyManager,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { toast, usePagination } from \"@orderly.network/ui\";\n\nexport type GenerateKeyInfo = {\n key: string;\n screctKey: string;\n ip?: string;\n permissions?: string;\n};\n\nexport const useApiManagerScript = (props?: {\n filterTags?: [string];\n keyStatus?: string;\n}) => {\n const { filterTags, keyStatus } = props ?? {};\n const [showCreateDialog, setShowCreateDialog] = useState(false);\n const [showCreatedDialog, setShowCreatedDialog] = useState(false);\n const [generateKey, setGenerateKey] = useState<GenerateKeyInfo | undefined>();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { state, account } = useAccount();\n const { t } = useTranslation();\n\n const canCreateApiKey =\n !wrongNetwork &&\n !disabledConnect &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected);\n\n const [\n keys,\n {\n generateOrderlyKey,\n setIPRestriction,\n removeOrderlyKey,\n resetOrderlyKeyIPRestriction,\n refresh,\n isLoading,\n error,\n },\n ] = useApiKeyManager({\n keyInfo: { key_status: keyStatus },\n });\n\n const [curPubKey, setCurPubKey] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n account.keyStore\n .getOrderlyKey()\n ?.getPublicKey()\n .then((pubKey) => {\n setCurPubKey(pubKey);\n });\n }, [account, state]);\n\n const onCreateApiKey = () => {\n setShowCreateDialog(true);\n };\n const onReadApiGuide = () => {\n window.open(\n \"https://orderly.network/docs/build-on-omnichain/evm-api/api-authentication#api-authentication\",\n \"_blank\",\n );\n };\n\n const hideCreateDialog = () => {\n setShowCreateDialog(false);\n };\n\n const doCreate = async (\n ipRestriction?: string,\n scope?: ScopeType,\n ): Promise<number> => {\n try {\n const createdSuccess = (\n res: {\n key: string;\n secretKey: string;\n },\n ip?: string,\n ) => {\n const { key, secretKey } = res;\n hideCreateDialog();\n setGenerateKey({\n key: key,\n screctKey: secretKey,\n ip: ip,\n permissions: scope\n ?.split(\",\")\n ?.map((e) => capitalizeFirstChar(e))\n .join(\", \"),\n });\n setShowCreatedDialog(true);\n };\n\n const generateKeyRes = await generateOrderlyKey(scope);\n\n toast.success(t(\"portfolio.apiKey.created\"));\n console.log(\"xxx generateKeyRes\", generateKeyRes);\n\n if ((ipRestriction?.length || 0) > 0) {\n const key = generateKeyRes.key.startsWith(\"ed25519:\")\n ? generateKeyRes.key\n : `ed25519:${generateKeyRes.key}`;\n const res = await setIPRestriction(key, ipRestriction!);\n console.log(\"set ip res\", res);\n if (res.success) {\n createdSuccess(\n generateKeyRes,\n res.data.ip_restriction_list?.join(\",\"),\n );\n }\n } else {\n createdSuccess(generateKeyRes, undefined);\n }\n } catch (err: any) {\n if (err?.message) toast.error(err?.message);\n }\n\n return Promise.resolve(0);\n };\n\n const hideCreatedDialog = () => {\n setShowCreatedDialog(false);\n refresh();\n };\n\n const onCopyApiKeyInfo = () => {\n navigator.clipboard.writeText(JSON.stringify(generateKey));\n toast.success(t(\"portfolio.apiKey.apiInfo.copied\"));\n };\n const doConfirm = () => {\n hideCreatedDialog();\n };\n\n const doDelete = (item: APIKeyItem): Promise<any> => {\n return new Promise(async (resolve) => {\n await removeOrderlyKey(item.orderly_key)\n .then(\n async (data) => {\n if (data?.success) {\n toast.success(t(\"portfolio.apiKey.deleted\"));\n refresh();\n // delete current api key, wiil disconnect\n const curKey = await account.keyStore\n .getOrderlyKey()\n ?.getPublicKey();\n if (item.orderly_key === curKey) {\n account.destroyOrderlyKey();\n }\n }\n resolve(1);\n },\n (reject) => {},\n )\n .catch((err) => {});\n });\n };\n\n const doEdit = async (item: APIKeyItem, ip?: string): Promise<void> => {\n let future;\n if ((ip?.length || 0) === 0) {\n future = resetOrderlyKeyIPRestriction(item.orderly_key, \"ALLOW_ALL_IPS\");\n } else {\n future = setIPRestriction(item.orderly_key, ip!);\n }\n\n const data = await future;\n\n if (data.success) {\n toast.success(t(\"portfolio.apiKey.updated\"));\n refresh();\n return Promise.resolve();\n } else {\n toast.error(data.message);\n }\n return Promise.reject();\n };\n\n const onCopyAccountId = () =>\n toast.success(t(\"portfolio.apiKey.accountId.copied\"));\n const onCopyApiKey = (key?: string) => {\n if (typeof key !== \"undefined\") {\n navigator.clipboard.writeText(key.replace(\"ed25519:\", \"\"));\n }\n toast.success(t(\"portfolio.apiKey.column.apiKey.copy\"));\n };\n const onCopyApiSecretKey = () =>\n toast.success(t(\"portfolio.apiKey.secretKey.copied\"));\n const onCopyIP = () =>\n toast.success(t(\"portfolio.apiKey.column.restrictedIP.copy\"));\n\n const keyList = useMemo(() => {\n return keys?.filter((e) => {\n const filterTag = filterTags ? filterTags?.includes(e.tag) : true;\n const filterCurKey = curPubKey\n ? !e.orderly_key.includes(curPubKey)\n : true;\n return filterTag && filterCurKey;\n });\n }, [keys, filterTags, curPubKey]);\n\n const verifyIP = (ip: string) => {\n const ipRegex =\n /^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(,((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9]))*$/;\n return ipRegex.test(ip)\n ? \"\"\n : \"The IP restriction format is incorrect. Please use the correct format: [xx.xx.xxx.x],[xx.xxx.xxx.xxx]\";\n };\n\n const accountStatus =\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading;\n\n const accountId = useDataTap(state.accountId, {\n accountStatus,\n });\n\n const userId = useDataTap(state.userId, {\n accountStatus,\n });\n\n const { pagination } = usePagination();\n\n return {\n accountId: accountId ?? \"--\",\n userId: userId ?? \"--\",\n onCreateApiKey,\n onReadApiGuide,\n showCreateDialog,\n hideCreateDialog,\n doCreate,\n showCreatedDialog,\n hideCreatedDialog,\n onCopyApiKeyInfo,\n doConfirm,\n doDelete,\n doEdit,\n canCreateApiKey,\n status: state.status,\n keys: keyList,\n generateKey,\n onCopyAccountId,\n wrongNetwork,\n onCopyApiKey,\n onCopyApiSecretKey,\n onCopyIP,\n verifyIP,\n isLoading,\n pagination,\n };\n};\n\nexport function capitalizeFirstChar(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport type ApiManagerScriptReturns = ReturnType<typeof useApiManagerScript>;\n","import { FC, useEffect, useState } from \"react\";\nimport { ScopeType } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { DEFAUL_ORDERLY_KEY_SCOPE } from \"@orderly.network/types\";\nimport { cn, Flex, SimpleDialog, Statistic, Text } from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\n\n// if default orderly key scope includes asset, then enable internal withdraw\nconst enabledAssetPermission = DEFAUL_ORDERLY_KEY_SCOPE.includes(\"asset\");\n\nexport const CreateAPIKeyDialog: FC<ApiManagerScriptReturns> = (props) => {\n const [ipText, setIpText] = useState(\"\");\n const [read, setRead] = useState(true);\n const [trade, setTrade] = useState(true);\n const [asset, setAsset] = useState(enabledAssetPermission);\n const [hint, setHint] = useState(\"\");\n const { t } = useTranslation();\n\n useEffect(() => {\n if (!props.showCreateDialog) {\n setIpText(\"\");\n setRead(true);\n setTrade(true);\n setHint(\"\");\n }\n }, [props.showCreateDialog]);\n\n useEffect(() => {\n if (ipText.length === 0) setHint(\"\");\n }, [ipText]);\n\n return (\n <SimpleDialog\n size=\"sm\"\n open={props.showCreateDialog}\n onOpenChange={(open) => {\n props.hideCreateDialog?.();\n }}\n title={t(\"portfolio.apiKey.create.dialog.title\")}\n actions={{\n primary: {\n label: t(\"common.confirm\"),\n className: \"oui-w-[120px] lg:oui-w-[154px]\",\n \"data-testid\": \"oui-testid-apiKey-createApiKey-dialog-comfirm-btn\",\n onClick: async () => {\n if (ipText.length > 0) {\n const hint = props.verifyIP(ipText);\n setHint(hint);\n if (hint.length > 0) {\n return;\n }\n }\n\n const scopes: string[] = [];\n if (read) {\n scopes.push(\"read\");\n }\n if (trade) {\n scopes.push(\"trading\");\n }\n if (enabledAssetPermission && asset) {\n scopes.push(\"asset\");\n }\n await props.doCreate(ipText, scopes.join(\",\") as ScopeType);\n },\n disabled: !trade && !read && !asset,\n size: \"md\",\n },\n }}\n classNames={{\n footer: \"oui-justify-center\",\n content:\n \"oui-bg-base-8 oui-w-[300px] lg:oui-w-[360px] oui-font-semibold\",\n }}\n >\n <Flex direction={\"column\"} gap={6}>\n <Flex direction={\"column\"} gap={1} width={\"100%\"} itemAlign={\"start\"}>\n <Text intensity={54} size=\"2xs\">\n {t(\"portfolio.apiKey.create.ipRestriction\")}\n </Text>\n <textarea\n data-testid=\"oui-testid-apiKey-createApiKey-dialog-textarea\"\n placeholder={t(\"portfolio.apiKey.create.ipRestriction.placeholder\")}\n className={cn(\n \"oui-h-[100px] oui-w-full oui-rounded-xl oui-bg-base-6 oui-p-3 oui-text-sm oui-text-base-contrast-80\",\n \"oui-border-0 oui-outline-none focus:oui-border-2 focus:oui-border-primary-darken\",\n \"oui-placeholder-base-contrast-20\",\n hint.length > 0 &&\n \"oui-outline-1 oui-outline-danger focus:oui-outline-none\",\n )}\n value={ipText}\n onChange={(e) => {\n setIpText(e.target.value);\n }}\n style={{\n resize: \"none\",\n }}\n />\n {hint.length > 0 && (\n <Flex gap={1} className=\"oui-relative\">\n <div\n className={cn(\n \"oui-absolute oui-top-[10px]\",\n \"oui-size-1 oui-rounded-full oui-bg-danger\",\n )}\n />\n <Text color=\"danger\" size=\"xs\" className=\"oui-ml-2\">\n {hint}\n </Text>\n </Flex>\n )}\n </Flex>\n <Statistic\n label={\n <Text size=\"xs\" intensity={54}>\n {t(\"portfolio.apiKey.permissions\")}\n </Text>\n }\n className=\"oui-w-full\"\n >\n <Flex\n direction={\"row\"}\n gap={6}\n itemAlign={\"start\"}\n className=\"oui-mt-2\"\n >\n <Checkbox\n size={18}\n checked={read}\n onCheckedChange={(e) => setRead(e as boolean)}\n label={t(\"portfolio.apiKey.permissions.read\")}\n testid=\"oui-testid-apiKey-createApiKey-dialog-read-checkbox\"\n />\n <Checkbox\n size={18}\n checked={trade}\n onCheckedChange={(e) => setTrade(e as boolean)}\n label={t(\"portfolio.apiKey.permissions.trading\")}\n testid=\"oui-testid-apiKey-createApiKey-dialog-trading-checkbox\"\n />\n {enabledAssetPermission && (\n <Checkbox\n size={18}\n checked={asset}\n onCheckedChange={(e) => setAsset(e as boolean)}\n label={t(\"portfolio.apiKey.permissions.asset\")}\n testid=\"oui-testid-apiKey-createApiKey-dialog-asset-checkbox\"\n />\n )}\n </Flex>\n </Statistic>\n </Flex>\n </SimpleDialog>\n );\n};\n\nexport const Checkbox: FC<{\n size?: number;\n checked: boolean;\n onCheckedChange: (checked?: boolean) => void;\n disabled?: boolean;\n label: string;\n testid?: string;\n}> = (props) => {\n return (\n <button\n disabled={props.disabled}\n onClick={(e) => {\n props.onCheckedChange(!props.checked);\n }}\n className={\n \"oui-flex oui-items-center oui-gap-2 disabled:oui-cursor-not-allowed disabled:oui-opacity-50\"\n }\n data-testid={props.testid}\n >\n {props.checked ? (\n <svg\n width={\"props.size\"}\n height={props.size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.99072 2.92981C4.78172 2.92981 2.99072 4.72071 2.99072 6.92981V16.9298C2.99072 19.1389 4.78172 20.9298 6.99072 20.9298H16.9907C19.1997 20.9298 20.9907 19.1389 20.9907 16.9298V6.92981C20.9907 4.72071 19.1997 2.92981 16.9907 2.92981H6.99072ZM16.9853 7.31211C17.2125 7.09537 17.5236 7 17.8218 7C18.1201 7 18.4312 7.09537 18.6584 7.31211C19.1139 7.74546 19.1139 8.47384 18.6584 8.9072L10.5077 16.675C10.0534 17.1083 9.28909 17.1083 8.83472 16.675L5.34077 13.3459C4.88641 12.9126 4.88641 12.1841 5.34077 11.7508C5.79631 11.3175 6.56057 11.3175 7.01493 11.7508L9.67122 14.2822L16.9853 7.31211Z\"\n fill=\"white\"\n fillOpacity=\"0.54\"\n />\n </svg>\n ) : (\n <svg\n width={props.size}\n height={props.size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.99072 2.92981C4.78172 2.92981 2.99072 4.72071 2.99072 6.92981V16.9298C2.99072 19.1389 4.78172 20.9298 6.99072 20.9298H16.9907C19.1997 20.9298 20.9907 19.1389 20.9907 16.9298V6.92981C20.9907 4.72071 19.1997 2.92981 16.9907 2.92981H6.99072ZM6.99072 4.92981H16.9907C18.0957 4.92981 18.9907 5.82521 18.9907 6.92981V16.9298C18.9907 18.0344 18.0957 18.9298 16.9907 18.9298H6.99072C5.88572 18.9298 4.99072 18.0344 4.99072 16.9298V6.92981C4.99072 5.82521 5.88572 4.92981 6.99072 4.92981Z\"\n fill=\"white\"\n fillOpacity=\"0.54\"\n />\n </svg>\n )}\n\n <Text\n intensity={54}\n size=\"sm\"\n className=\"oui-whitespace-nowrap oui-break-normal\"\n >\n {props.label}\n </Text>\n </button>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n CopyIcon,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n} from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\n\nexport const CreatedAPIKeyDialog: FC<ApiManagerScriptReturns> = (props) => {\n const ip = props.generateKey?.ip ?? \"--\";\n const { t } = useTranslation();\n return (\n <SimpleDialog\n size=\"sm\"\n open={props.showCreatedDialog}\n onOpenChange={(open) => {\n props.hideCreatedDialog?.();\n }}\n title={t(\"portfolio.apiKey.created\")}\n actions={{\n primary: {\n label: t(\"common.ok\"),\n \"data-testid\": \"oui-testid-apiKey-createdApiKey-dialog-ok-btn\",\n className:\n \"oui-w-[120px] lg:oui-w-[154px] oui-bg-base-2 hover:oui-bg-base-3\",\n size: \"md\",\n onClick: async () => {\n return props.doConfirm();\n },\n },\n secondary: {\n label: t(\"portfolio.apiKey.created.button.copyApiInfo\"),\n \"data-testid\": \"oui-testid-apiKey-createdApiKey-dialog-copy-btn\",\n className:\n \"oui-w-[120px] lg:oui-w-[154px] oui-bg-primary-darken hover:oui-opacity-80\",\n size: \"md\",\n onClick: async () => {\n return props.onCopyApiKeyInfo();\n },\n },\n }}\n classNames={{\n footer: \"oui-justify-center\",\n content:\n \"oui-bg-base-8 oui-w-[300px] lg:oui-w-[360px] oui-font-semibold\",\n body: \"oui-py-0 oui-pt-5\",\n }}\n >\n <Flex direction={\"column\"} gap={4} itemAlign={\"start\"}>\n <Statistic label={t(\"common.accountId\")}>\n <Text.formatted\n size=\"sm\"\n intensity={80}\n copyable\n copyIconSize={16}\n className=\"oui-break-all\"\n onCopy={props.onCopyAccountId}\n data-testid=\"oui-testid-apiKey-createdApiKey-dialog-key-span\"\n >\n {props.accountId}\n </Text.formatted>\n </Statistic>\n <Statistic label={t(\"portfolio.apiKey.column.apiKey\")}>\n <Text.formatted\n size=\"sm\"\n intensity={80}\n copyable\n copyIconSize={16}\n className=\"oui-break-all\"\n onCopy={() => props.onCopyApiKey(props.generateKey?.key)}\n data-testid=\"oui-testid-apiKey-createdApiKey-dialog-key-span\"\n >\n {props.generateKey?.key}\n </Text.formatted>\n </Statistic>\n <Statistic label={t(\"portfolio.apiKey.secretKey\")}>\n <Text.formatted\n size=\"sm\"\n intensity={80}\n copyable\n copyIconSize={16}\n className=\"oui-break-all\"\n onCopy={props.onCopyApiSecretKey}\n >\n {props.generateKey?.screctKey}\n </Text.formatted>{\" \"}\n </Statistic>\n <Statistic label={t(\"portfolio.apiKey.ip\")}>\n <Flex\n width={320}\n gap={1}\n itemAlign={\"center\"}\n className=\"oui-text-base-contrast-80 oui-text-sm\"\n >\n <Box className=\"oui-max-h-[100px] oui-flex-1 oui-overflow-hidden oui-text-ellipsis oui-line-clamp-5 oui-break-all\">\n {ip}\n </Box>\n {ip !== \"--\" && (\n <Box\n width={16}\n height={16}\n className=\"oui-cursor-pointer oui-flex-shrink-0\"\n >\n <CopyIcon\n color=\"white\"\n opacity={0.54}\n size={16}\n onClick={(e) => {\n if (props.generateKey?.ip)\n navigator.clipboard.writeText(props.generateKey?.ip);\n props?.onCopyIP();\n }}\n />\n </Box>\n )}\n </Flex>\n </Statistic>\n <Statistic label={t(\"portfolio.apiKey.permissions\")}>\n <Text\n size=\"sm\"\n intensity={80}\n data-testid=\"oui-testid-apiKey-createdApiKey-dialog-permissions-span\"\n >\n {props.generateKey?.permissions}\n </Text>\n </Statistic>\n <div></div>\n <Text color=\"warning\" size=\"xs\" className=\"oui-text-center\">\n {t(\"portfolio.apiKey.created.warning\")}\n </Text>\n </Flex>\n </SimpleDialog>\n );\n};\n","import { FC } from \"react\";\nimport { Flex, SimpleDialog, Text } from \"@orderly.network/ui\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\nimport { formatKey } from \"../apiManager.ui\";\nimport { useTranslation, Trans } from \"@orderly.network/i18n\";\n\nexport const DeleteAPIKeyDialog: FC<{\n item: APIKeyItem;\n open: boolean;\n setOpen?: any;\n onDelete?: (item: APIKeyItem) => Promise<void>;\n}> = (props) => {\n const { item, open, setOpen, onDelete } = props;\n const { t } = useTranslation();\n return (\n <SimpleDialog\n size=\"sm\"\n open={open}\n onOpenChange={setOpen}\n title={t(\"portfolio.apiKey.delete.dialog.title\")}\n actions={{\n primary: {\n label: t(\"common.confirm\"),\n \"data-testid\": \"oui-testid-apiKey-deleteApiKey-dialog-confirm-btn\",\n className: \"oui-w-[120px] lg:oui-w-[154px]\",\n size: \"md\",\n onClick: async () => {\n await props.onDelete?.(item);\n setOpen(false);\n },\n },\n secondary: {\n label: t(\"common.cancel\"),\n className: \"oui-w-[120px] lg:oui-w-[154px]\",\n size: \"md\",\n onClick: async () => {\n setOpen(false);\n },\n },\n }}\n classNames={{\n footer: \"oui-justify-center\",\n content:\n \"oui-bg-base-8 oui-w-[300px] lg:oui-w-[360px] oui-font-semibold\",\n }}\n >\n <Flex className=\"oui-text-xs\">\n {/* @ts-ignore */}\n <Trans\n i18nKey=\"portfolio.apiKey.delete.dialog.description\"\n values={{ apiKey: formatKey(item?.orderly_key) }}\n components={[<Text color=\"primary\" className=\"oui-px-1\" />]}\n />\n </Flex>\n </SimpleDialog>\n );\n};\n","import { FC, useEffect, useState } from \"react\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { DEFAUL_ORDERLY_KEY_SCOPE } from \"@orderly.network/types\";\nimport { cn, Flex, SimpleDialog, Statistic, Text } from \"@orderly.network/ui\";\nimport { Checkbox } from \"./createApiKey\";\n\n// if default orderly key scope includes asset, then enable internal withdraw\nconst enabledAssetPermission = DEFAUL_ORDERLY_KEY_SCOPE.includes(\"asset\");\n\nexport const EditAPIKeyDialog: FC<{\n item: APIKeyItem;\n open: boolean;\n setOpen?: any;\n onUpdate?: (item: APIKeyItem, ip?: string) => Promise<void>;\n verifyIP: (ip: string) => string;\n}> = (props) => {\n const { item, open, setOpen, onUpdate } = props;\n const [ipText, setIpText] = useState(item.ip_restriction_list?.join(\",\"));\n const [read, setRead] = useState(true);\n const [trade, setTrade] = useState(true);\n const [asset, setAsset] = useState(enabledAssetPermission);\n const [hint, setHint] = useState(\"\");\n const { t } = useTranslation();\n\n useEffect(() => {\n setIpText(item.ip_restriction_list.join(\",\"));\n const scope = item.scope?.toLocaleLowerCase() || \"\";\n\n setRead(scope.includes(\"read\"));\n setTrade(scope.includes(\"trading\"));\n if (enabledAssetPermission) {\n setAsset(scope.includes(\"asset\"));\n }\n }, [item]);\n\n useEffect(() => {\n if (ipText.length === 0) setHint(\"\");\n }, [ipText]);\n\n return (\n <SimpleDialog\n size=\"sm\"\n open={open}\n onOpenChange={setOpen}\n title={t(\"portfolio.apiKey.edit.dialog.title\")}\n actions={{\n primary: {\n label: t(\"common.confirm\"),\n \"data-testid\": \"oui-testid-apiKey-editApiKey-dialog-confirm-btn\",\n className: \"oui-w-[120px] lg:oui-w-[154px]\",\n onClick: async () => {\n if (ipText.length > 0) {\n const hint = props.verifyIP(ipText);\n setHint(hint);\n if (hint.length > 0) {\n return;\n }\n }\n await props.onUpdate?.(item, ipText);\n setOpen(false);\n },\n disabled: item.ip_restriction_list.join(\",\") === ipText,\n size: \"md\",\n fullWidth: true,\n },\n }}\n classNames={{\n footer: \"oui-justify-center\",\n content:\n \"oui-bg-base-8 oui-w-[300px] lg:oui-w-[360px] oui-font-semibold\",\n }}\n >\n <Flex direction={\"column\"} gap={6}>\n {/* <TextField label={\"IP restriction (optional)\"} rows={5} className=\"oui-w-full oui-h-auto\" classNames={{\n input: \"oui-h-[100px]\",\n root: \"oui-h-[100px]\"\n }}/> */}\n <Flex direction={\"column\"} gap={1} width={\"100%\"} itemAlign={\"start\"}>\n <Text intensity={54} size=\"2xs\">\n {t(\"portfolio.apiKey.create.ipRestriction\")}\n </Text>\n <textarea\n data-testid=\"oui-testid-apiKey-editApiKey-dialog-textarea\"\n placeholder={t(\"portfolio.apiKey.create.ipRestriction.placeholder\")}\n className={cn(\n \"oui-h-[100px] oui-w-full oui-rounded-xl oui-bg-base-6 oui-p-3 oui-text-sm oui-text-base-contrast-80\",\n \"oui-border-0 oui-outline-none focus:oui-border-2 focus:oui-border-primary-darken\",\n \"oui-placeholder-base-contrast-20\",\n hint.length > 0 &&\n \"oui-outline-1 oui-outline-danger focus:oui-outline-none\",\n )}\n value={ipText}\n onChange={(e) => {\n setIpText(e.target.value);\n }}\n style={{\n resize: \"none\",\n }}\n />\n {hint.length > 0 && (\n <Flex gap={1} className=\"oui-relative\">\n <div\n className={cn(\n \"oui-absolute oui-top-[10px]\",\n \"oui-size-1 oui-rounded-full oui-bg-danger\",\n )}\n />\n <Text color=\"danger\" size=\"xs\" className=\"oui-ml-2\">\n {hint}\n </Text>\n </Flex>\n )}\n </Flex>\n <Statistic\n label={\n <Text size=\"xs\" intensity={54}>\n {t(\"portfolio.apiKey.permissions\")}\n </Text>\n }\n className=\"oui-w-full\"\n >\n <Flex\n direction={\"row\"}\n gap={6}\n itemAlign={\"start\"}\n className=\"oui-mt-2\"\n >\n <Checkbox\n disabled\n size={18}\n checked={read}\n onCheckedChange={(e) => setRead(e as boolean)}\n label={t(\"portfolio.apiKey.permissions.read\")}\n />\n <Checkbox\n disabled\n size={18}\n checked={trade}\n onCheckedChange={(e) => setTrade(e as boolean)}\n label={t(\"portfolio.apiKey.permissions.trading\")}\n />\n {enabledAssetPermission && (\n <Checkbox\n disabled\n size={18}\n checked={asset}\n onCheckedChange={(e) => setAsset(e as boolean)}\n label={t(\"portfolio.apiKey.permissions.asset\")}\n />\n )}\n </Flex>\n </Statistic>\n </Flex>\n </SimpleDialog>\n );\n};\n","import { APIManager } from \"./apiManager.ui\";\nimport { useApiManagerScript } from \"./apiManager.script\";\n\n\nexport const APIManagerWidget = (props?: {\n filterTags?: [string];\n keyStatus?: string;\n}) => {\n const state = useApiManagerScript(props);\n return <APIManager {...state} />;\n};\n","import { APIManagerWidget } from \"./apiManager.widget\";\n\n/**\n * API key manager page\n * @param filterTags filterTags\n * @param keyStatus filterTags default is \"ACTIVE\"\n * @returns\n */\nexport const APIManagerPage = (props: {\n filterTags?: [string];\n keyStatus?: string;\n}) => {\n const { filterTags, keyStatus = \"ACTIVE\" } = props;\n return <APIManagerWidget filterTags={filterTags} keyStatus={keyStatus}/>;\n};\n","export { SettingWidget } from \"./setting.widget\";\nexport { SettingPage } from \"./setting.page\";\n","import { FC } from \"react\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { SettingScriptReturns } from \"./setting.script\";\nimport { SettingDesktop } from \"./setting.ui.desktop\";\nimport { SettingMobile } from \"./setting.ui.mobile\";\n\nexport const Setting: FC<SettingScriptReturns> = (props) => {\n const { isMobile } = useScreen();\n if (isMobile) {\n return (\n <div className=\"oui-px-3\">\n <SettingMobile {...props} />\n </div>\n );\n }\n return <SettingDesktop {...props} />;\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Card, Flex, Switch, Text } from \"@orderly.network/ui\";\nimport { AuthGuardTooltip } from \"@orderly.network/ui-connector\";\nimport { SettingScriptReturns } from \"./setting.script\";\n\nexport const SettingDesktop: FC<SettingScriptReturns> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Card\n title={t(\"portfolio.setting.systemUpgrade\")}\n id=\"portfolio-apikey-manager\"\n className=\"oui-bg-base-9 oui-font-semibold\"\n >\n <Flex\n direction={\"row\"}\n gap={4}\n width={\"100%\"}\n itemAlign={\"center\"}\n pt={4}\n className=\"oui-border-t-2 oui-border-line-6 oui-font-semibold\"\n >\n <Flex direction={\"column\"} itemAlign={\"start\"} className=\"oui-flex-1\">\n <Text intensity={80} size=\"base\">\n {t(\"portfolio.setting.cancelOpenOrders\")}\n </Text>\n <Text intensity={54} size=\"sm\">\n {t(\"portfolio.setting.cancelOpenOrders.description\")}\n </Text>\n </Flex>\n\n <AuthGuardTooltip align=\"end\">\n <Switch\n checked={props.maintenance_cancel_orders}\n onCheckedChange={(e) => {\n props.setMaintainConfig(e);\n }}\n disabled={props.isSetting || !props.canTouch}\n data-testid=\"oui-testid-setting-switch-btn\"\n />\n </AuthGuardTooltip>\n </Flex>\n </Card>\n );\n};\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Card,\n Flex,\n Switch,\n Text,\n ChevronRightIcon,\n} from \"@orderly.network/ui\";\nimport { AuthGuardTooltip } from \"@orderly.network/ui-connector\";\nimport { LanguageSwitcherWidget } from \"@orderly.network/ui-scaffold\";\nimport { SettingScriptReturns } from \"./setting.script\";\n\nexport const SettingMobile: FC<SettingScriptReturns> = (props) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState<boolean>(false);\n const onLanguageChange = () => {\n setOpen(true);\n };\n\n return (\n <>\n <Flex mt={1} mb={2} p={4} intensity={900} r=\"xl\" itemAlign=\"center\">\n <LanguageSwitcherWidget open={open} onOpenChange={setOpen} />\n <Flex\n className=\"oui-cursor-pointer\"\n itemAlign=\"center\"\n width=\"100%\"\n onClick={onLanguageChange}\n >\n <Text\n size=\"base\"\n weight=\"semibold\"\n intensity={80}\n className=\"oui-ml-2\"\n >\n {t(\"languageSwitcher.language\")}\n </Text>\n <ChevronRightIcon\n size={18}\n className=\"oui-ml-auto oui-text-base-contrast-36\"\n />\n </Flex>\n </Flex>\n\n <Card\n // @ts-ignore\n title={\n <div className=\"oui-text-sm\">\n {t(\"portfolio.setting.systemUpgrade\")}\n </div>\n }\n id=\"portfolio-apikey-manager\"\n className=\"oui-bg-base-9 oui-font-semibold\"\n classNames={{ root: \"oui-p-4\", content: \"!oui-pt-3\" }}\n >\n <Flex\n direction={\"row\"}\n gap={4}\n width={\"100%\"}\n itemAlign={\"center\"}\n pt={3}\n className=\"oui-font-semibold oui-border-t-2 oui-border-line-6\"\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1 oui-gap-2\"\n >\n <Text intensity={80} size=\"xs\">\n {t(\"portfolio.setting.cancelOpenOrders\")}\n </Text>\n <Text intensity={36} size=\"2xs\" className=\"oui-font-normal\">\n {t(\"portfolio.setting.cancelOpenOrders.description\")}\n </Text>\n <AuthGuardTooltip>\n <Switch\n className=\"oui-mt-1\"\n checked={props.maintenance_cancel_orders}\n onCheckedChange={(e) => {\n props.setMaintainConfig(e);\n }}\n disabled={props.isSetting || !props.canTouch}\n data-testid=\"oui-testid-setting-switch-btn\"\n />\n </AuthGuardTooltip>\n </Flex>\n </Flex>\n </Card>\n </>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport {\n useAccount,\n useAccountInfo,\n useDebouncedCallback,\n useMutation,\n} from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\n\nexport type SettingScriptReturns = {\n maintenance_cancel_orders?: boolean;\n setMaintainConfig: (maintenance_cancel_order_flag: boolean) => void;\n isSetting: boolean;\n canTouch: boolean;\n};\n\nexport const useSettingScript = (): SettingScriptReturns => {\n const { data, mutate: refresh } = useAccountInfo();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const [update, { isMutating }] = useMutation(\"/v1/client/maintenance_config\");\n const [checked, setChecked] = useState(false);\n\n useEffect(() => {\n setChecked(data?.maintenance_cancel_orders || false);\n }, [data]);\n\n const updateCheckState = useDebouncedCallback((value: boolean) => {\n // if (value === data?.maintenance_cancel_orders) return;\n update({\n maintenance_cancel_order_flag: value,\n }).then((data) => {\n if (data.success) {\n toast.success(value ? \"Opened\" : \"Closed\");\n } else {\n setChecked(!value);\n }\n });\n }, 300);\n\n const setMaintainConfig = (maintenance_cancel_order_flag: boolean) => {\n setChecked(maintenance_cancel_order_flag);\n updateCheckState(maintenance_cancel_order_flag);\n };\n const { state } = useAccount();\n\n const canTouch =\n !wrongNetwork &&\n !disabledConnect &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected);\n\n return {\n maintenance_cancel_orders: checked, //data?.maintenance_cancel_orders,\n setMaintainConfig,\n isSetting: false,\n canTouch,\n };\n};\n","import { Setting } from \"./setting.ui\";\nimport { useSettingScript } from \"./setting.script\";\n\n\nexport const SettingWidget = () => {\n const state = useSettingScript();\n return <Setting {...state} />;\n};\n","import { SettingWidget } from \"./setting.widget\";\n\nexport const SettingPage = () => {\n return <SettingWidget />\n};","export { AssetsPage } from \"./page\";\n","import React from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { useAssetsScript, useAssetsScriptReturn } from \"./assets.script\";\nimport { AssetsTable } from \"./assets.ui\";\nimport { AssetsTableMobile } from \"./assets.ui.mobile\";\n\nexport type AssetsWidgetProps = useAssetsScriptReturn;\n\nexport const AssetsWidget: React.FC = () => {\n const state = useAssetsScript();\n const accountState = useAccount();\n const { isMobile } = useScreen();\n\n if (isMobile) {\n return <AssetsTableMobile {...state} {...accountState} />;\n }\n\n return <AssetsTable {...state} {...accountState} />;\n};\n","import { useCallback, useEffect, useMemo } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useLocalStorage,\n useIndexPricesStream,\n useTokensInfo,\n} from \"@orderly.network/hooks\";\nimport { account } from \"@orderly.network/perp\";\nimport { modal } from \"@orderly.network/ui\";\nimport {\n DepositAndWithdrawWithDialogId,\n TransferDialogId,\n} from \"@orderly.network/ui-transfer\";\nimport { zero } from \"@orderly.network/utils\";\nimport { useAccountsData } from \"../../hooks/useAccountsData\";\nimport {\n calculateAssetValue,\n getIndexPrice,\n useAssetTotalValue,\n} from \"../../hooks/useAssetTotalValue\";\nimport { useAssetsMultiFilter } from \"../../hooks/useAssetsAccountFilter\";\nimport { useAssetsColumns } from \"./column\";\n\nconst ORDERLY_ASSETS_VISIBLE_KEY = \"orderly_assets_visible\";\n\nexport const useAssetsScript = () => {\n const [visible, setVisible] = useLocalStorage<boolean>(\n ORDERLY_ASSETS_VISIBLE_KEY,\n true,\n );\n\n const { state, subAccount, isMainAccount } = useAccount();\n const { holding = [] } = useCollateral();\n const { data: indexPrices } = useIndexPricesStream();\n\n const tokensInfo = useTokensInfo();\n\n const subAccounts = state.subAccounts ?? [];\n\n useEffect(() => {\n if (holding.length > 0) {\n subAccount.refresh();\n }\n }, [holding]);\n\n // Use the extracted total value hook\n const totalValue = useAssetTotalValue();\n\n const toggleVisible = () => {\n // @ts-ignore\n setVisible((visible: boolean) => !visible);\n };\n\n const assetsOptions = useMemo(() => {\n return (\n tokensInfo?.map((item) => ({\n label: item.token,\n value: item.token,\n })) || []\n );\n }, [tokensInfo]);\n\n // Use the extracted accounts data hook\n const allAccounts = useAccountsData();\n\n // Use the extracted account and asset filter hook\n const {\n selectedAccount,\n selectedAsset,\n filteredData: filtered,\n onFilter,\n } = useAssetsMultiFilter(allAccounts);\n\n // Enhanced filtered data with additional calculations for children\n const enhancedFiltered = useMemo(() => {\n return filtered.map((accountData) => {\n // Enhance each child (holding) with calculated fields\n const enhancedChildren =\n accountData.children?.map((holding) => {\n const tokenInfo = tokensInfo?.find(\n (item) => item.token === holding.token,\n );\n\n // Use extracted function for index price calculation\n const indexPrice = getIndexPrice(holding.token, indexPrices);\n\n // Use extracted function for asset value calculation\n const assetValue = calculateAssetValue(\n holding.holding,\n holding.token,\n indexPrices,\n ).toNumber();\n\n // Calculate collateral ratio for this token\n const collateralRatio = tokenInfo\n ? account.collateralRatio({\n baseWeight: tokenInfo.base_weight ?? 0,\n discountFactor: tokenInfo.discount_factor ?? 0,\n collateralQty: holding.holding,\n collateralCap: tokenInfo?.user_max_qty ?? holding.holding,\n indexPrice: indexPrice,\n })\n : zero;\n\n // Calculate collateral contribution for this token\n const collateralContribution = account.collateralContribution({\n collateralQty: holding.holding,\n collateralCap: tokenInfo?.user_max_qty ?? holding.holding,\n collateralRatio: collateralRatio.toNumber(),\n indexPrice: indexPrice,\n });\n\n return {\n ...holding,\n indexPrice,\n assetValue,\n collateralRatio,\n collateralContribution,\n };\n }) || [];\n\n return {\n ...accountData,\n children: enhancedChildren,\n };\n });\n }, [filtered, indexPrices, tokensInfo]);\n\n const handleTransfer = useCallback((accountId: string, token: string) => {\n if (!accountId) {\n return;\n }\n modal.show(TransferDialogId, {\n toAccountId: accountId,\n token,\n });\n }, []);\n\n const handleConvert = (accountId: string, token: string) => {\n modal.show(\"ConvertDialogId\", {\n accountId,\n token,\n });\n };\n\n const showTransfer = isMainAccount ? subAccounts.length > 0 : true;\n\n const assetsColumns = useAssetsColumns({\n onTransfer: showTransfer ? handleTransfer : undefined,\n onConvert: handleConvert,\n });\n\n const openDepositAndWithdraw = useCallback(\n (viewName: \"deposit\" | \"withdraw\") => {\n modal.show(DepositAndWithdrawWithDialogId, {\n activeTab: viewName,\n });\n },\n [],\n );\n\n const onDeposit = useCallback(() => {\n openDepositAndWithdraw(\"deposit\");\n }, []);\n\n const onWithdraw = useCallback(() => {\n openDepositAndWithdraw(\"withdraw\");\n }, []);\n\n return {\n columns: assetsColumns,\n dataSource: enhancedFiltered, // Use enhanced filtered data with calculated children\n visible: visible as boolean,\n onToggleVisibility: toggleVisible,\n selectedAccount,\n selectedAsset,\n onFilter,\n totalValue,\n hasSubAccount: subAccounts.length > 0,\n onDeposit,\n onWithdraw,\n holding,\n assetsOptions,\n };\n};\n\nexport type useAssetsScriptReturn = ReturnType<typeof useAssetsScript> &\n ReturnType<typeof useAccount>;\n","import { useMemo } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useIndexPricesStream,\n} from \"@orderly.network/hooks\";\nimport { SubAccount } from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useAccountsData } from \"./useAccountsData\";\n\nconst isNumber = (val: unknown): val is number => {\n return typeof val === \"number\" && !Number.isNaN(val);\n};\n\n// Extract index price calculation logic\nexport const getIndexPrice = (\n token: string,\n indexPrices?: Record<string, number>,\n) => {\n return token === \"USDC\" ? 1 : (indexPrices?.[`PERP_${token}_USDC`] ?? 0);\n};\n\n// Extract asset value calculation logic\nexport const calculateAssetValue = (\n holding: number,\n token: string,\n indexPrices?: Record<string, number>,\n) => {\n const indexPrice = getIndexPrice(token, indexPrices);\n return new Decimal(holding).mul(indexPrice);\n};\n\nexport const calculateTotalHolding = (\n data: SubAccount[] | SubAccount[\"holding\"],\n indexPrices?: Record<string, number>,\n) => {\n let total = new Decimal(0);\n for (const item of data) {\n if (Array.isArray(item.holding)) {\n for (const hol of item.holding) {\n if (isNumber(hol.holding)) {\n // Use extracted function for asset value calculation\n const assetValue = calculateAssetValue(\n hol.holding,\n hol.token,\n indexPrices,\n );\n total = total.plus(assetValue);\n }\n }\n } else if (isNumber(item.holding) && \"token\" in item) {\n // Use extracted function for asset value calculation\n const assetValue = calculateAssetValue(\n item.holding,\n (item as any).token,\n indexPrices,\n );\n total = total.plus(assetValue);\n }\n }\n return total;\n};\n\n/**\n * Hook to calculate total asset value across all accounts\n * @returns {number} Total asset value in USDC\n */\nexport const useAssetTotalValue = () => {\n const { state, isMainAccount } = useAccount();\n const { holding = [] } = useCollateral();\n const { data: indexPrices } = useIndexPricesStream();\n const allAccounts = useAccountsData();\n\n const subAccounts = state.subAccounts ?? [];\n\n // Calculate main account total value\n const mainTotalValue = useMemo<Decimal>(\n () => calculateTotalHolding(holding, indexPrices),\n [holding, indexPrices],\n );\n\n // Calculate sub accounts total value\n const subTotalValue = useMemo<Decimal>(\n () => calculateTotalHolding(subAccounts, indexPrices),\n [subAccounts, indexPrices],\n );\n\n // Calculate final total value\n const totalValue = useMemo<number>(() => {\n if (isMainAccount) {\n return mainTotalValue.plus(subTotalValue).toNumber();\n } else {\n const find = allAccounts.find((item) => item.id === state.accountId);\n if (Array.isArray(find?.children)) {\n return calculateTotalHolding(find.children, indexPrices).toNumber();\n }\n return 0;\n }\n }, [\n isMainAccount,\n mainTotalValue,\n subTotalValue,\n allAccounts,\n state.accountId,\n indexPrices,\n ]);\n\n return totalValue;\n};\n","import React from \"react\";\nimport { useTokensInfo } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Button, cn, Flex, Text, TokenIcon } from \"@orderly.network/ui\";\nimport type { Column } from \"@orderly.network/ui\";\n\nexport interface ColumnsOptions {\n onTransfer?: (accountId: string, token: string) => void;\n onConvert?: (accountId: string, token: string) => void;\n}\n\n// Define the enhanced holding interface with calculated fields\ninterface EnhancedHolding {\n token: string;\n holding: number;\n indexPrice: number;\n assetValue: number;\n collateralRatio: number;\n collateralContribution: number;\n account_id: string;\n}\n\nexport const useAssetsColumns = (options: ColumnsOptions) => {\n const { t } = useTranslation();\n const tokensInfo = useTokensInfo();\n const { onTransfer, onConvert } = options;\n const columns = React.useMemo<Column[]>(() => {\n return [\n {\n title: t(\"portfolio.overview.column.token\"),\n dataIndex: \"token\",\n align: \"left\",\n width: 150,\n render(val: string) {\n return (\n <Flex itemAlign=\"center\" gap={2}>\n <TokenIcon name={val} />\n {val}\n </Flex>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.qty\"),\n dataIndex: \"holding\",\n align: \"left\",\n width: 140,\n render(val: number, record) {\n const findToken = tokensInfo?.find(\n ({ token }) => token === record.token,\n );\n return (\n <Text.numeral dp={findToken?.decimals ?? 6} padding={false}>\n {val}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.indexPrice\"),\n dataIndex: \"indexPrice\",\n align: \"left\",\n width: 140,\n render(val: number) {\n return (\n <Text.numeral rule=\"price\" dp={6} currency=\"$\" padding={false}>\n {val}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.assetValue\"),\n dataIndex: \"assetValue\",\n align: \"left\",\n width: 140,\n render(val: number) {\n return (\n <Text.numeral rule=\"price\" dp={6} currency=\"$\" padding={false}>\n {val}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.collateralRatio\"),\n dataIndex: \"collateralRatio\",\n align: \"left\",\n width: 140,\n render(val: number) {\n return (\n <Text.numeral dp={2} suffix=\"%\">\n {val * 100}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"transfer.deposit.collateralContribution\"),\n dataIndex: \"collateralContribution\",\n align: \"left\",\n width: 140,\n render(val: number) {\n return (\n <Text.numeral rule=\"price\" dp={6} currency=\"$\" padding={false}>\n {val}\n </Text.numeral>\n );\n },\n },\n {\n title: null,\n dataIndex: \"account_id\",\n align: \"right\",\n width: 180,\n render(id: string, record: EnhancedHolding) {\n return (\n <Flex itemAlign=\"center\" gap={3}>\n <Button\n size={\"sm\"}\n variant={\"outlined\"}\n color={\"secondary\"}\n onClick={() => onConvert?.(id, record.token)}\n className={cn(\n record.token === \"USDC\" ? \"oui-invisible\" : \"oui-visible\",\n )}\n >\n {t(\"transfer.convert\")}\n </Button>\n {onTransfer && (\n <Button\n size={\"sm\"}\n variant={\"outlined\"}\n color={\"secondary\"}\n onClick={() => onTransfer?.(id, record.token)}\n >\n {t(\"common.transfer\")}\n </Button>\n )}\n </Flex>\n );\n },\n },\n ];\n }, [t, tokensInfo, onTransfer, onConvert]);\n return columns;\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Button,\n cn,\n TokenIcon,\n Text,\n formatAddress,\n DataFilter,\n modal,\n} from \"@orderly.network/ui\";\nimport { SelectOption } from \"@orderly.network/ui/src/select/withOptions\";\nimport { useAssetsScriptReturn } from \"./assets.script\";\nimport { AccountType } from \"./assets.ui\";\n\nexport const AssetsTableMobile = (props: useAssetsScriptReturn) => {\n // console.log(props);\n const { t } = useTranslation();\n\n const subAccounts = props.state.subAccounts ?? [];\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const ALL_ASSETS: SelectOption = {\n label: \"All assets\",\n value: \"all\",\n };\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\n\n // Create asset options from holding data - optimized and consistent with desktop\n const memoizedAssets = useMemo(() => {\n return [ALL_ASSETS, ...props.assetsOptions];\n }, [props.assetsOptions]);\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1 oui-px-3 oui-pb-4\">\n <div>\n {props.isMainAccount && (\n <DataFilter\n onFilter={props.onFilter}\n className=\"oui-border-none oui-py-2\"\n items={[\n {\n size: \"sm\",\n type: \"picker\",\n name: \"account\",\n value: props.selectedAccount,\n options: memoizedOptions,\n },\n {\n size: \"sm\",\n type: \"picker\",\n name: \"asset\",\n value: props.selectedAsset,\n options: memoizedAssets,\n },\n ]}\n />\n )}\n </div>\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n {props.dataSource.map((assets) => (\n <>\n <AccountTag name={assets.description ?? \"sub account\"} />\n {assets.children.map((child: any) => (\n <AssetMobileItem\n item={child}\n key={`${child.token}-${child.account_id}`}\n />\n ))}\n </>\n ))}\n </div>\n </div>\n );\n};\n\ntype AssetMobileItemProps = {\n item: any;\n};\n\nconst AssetMobileItem: FC<AssetMobileItemProps> = ({ item }) => {\n const { t } = useTranslation();\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-3 oui-rounded-xl oui-bg-base-9 oui-p-4\">\n <div className=\"oui-flex oui-items-center oui-justify-between\">\n <div className=\"oui-flex oui-flex-col\">\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"common.token\")}\n </div>\n <div className=\"oui-flex oui-items-center oui-gap-1 oui-text-xs oui-font-semibold oui-text-base-contrast-80\">\n <TokenIcon name={item.token} className=\"oui-size-4\" /> {item.token}\n </div>\n </div>\n <div className=\"oui-flex oui-flex-col\">\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"common.quantity\")}\n </div>\n <div>\n <Text.numeral dp={6} padding={false}>\n {item.holding}\n </Text.numeral>\n </div>\n </div>\n <div className=\"oui-flex oui-flex-col\">\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"transfer.deposit.collateralContribution\")}\n </div>\n <div className=\"oui-flex oui-items-center oui-gap-1 oui-self-end oui-text-xs oui-font-semibold oui-text-base-contrast-80\">\n <Text.numeral dp={6} padding={false}>\n {item.collateralContribution}\n </Text.numeral>\n <div className=\"oui-text-base-contrast-36\">USDC</div>\n </div>\n </div>\n </div>\n <div className=\"oui-flex oui-gap-2\">\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"gray\"\n onClick={() =>\n modal.show(\"ConverSheetId\", {\n accountId: item.account_id,\n token: item.token,\n })\n }\n disabled={item.token === \"USDC\"}\n className={cn(\n \"oui-flex-1 oui-border-white/[0.36] oui-text-base-contrast-54\",\n item.token === \"USDC\" &&\n \"hover:!oui-bg-transparent disabled:oui-border-white/[0.16] disabled:!oui-bg-transparent disabled:oui-text-base-contrast-20\",\n )}\n >\n {t(\"transfer.convert\")}\n </Button>\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"gray\"\n onClick={() =>\n modal.show(\"TransferSheetId\", {\n accountId: item.account_id,\n token: item.token,\n })\n }\n className={cn(\n \"oui-flex-1 oui-border-white/[0.36] oui-text-base-contrast-54\",\n )}\n >\n {t(\"common.transfer\")}\n </Button>\n </div>\n </div>\n );\n};\n\nconst AccountTag: FC<{ name: string }> = ({ name }) => {\n return (\n <div className=\"oui-mt-2 oui-flex oui-h-[18px] oui-w-fit oui-items-center oui-rounded oui-bg-white/[0.06] oui-px-2 oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {name}\n </div>\n );\n};\n","import React from \"react\";\nimport { AssetsWidget, AssetsWidgetProps } from \"./assets.widget\";\n\nexport type AssetsPageProps = AssetsWidgetProps;\n\nexport const AssetsPage: React.FC = () => {\n return <AssetsWidget />;\n};\n","export { HistoryPage } from \"./history.page\";\nexport { HistoryWidget } from \"./history.page\";\n","import { HistoryDataGroupWidget } from \"../overview/historyDataGroup\";\n\nexport const HistoryWidget = () => {\n return <HistoryDataGroupWidget />;\n};\n\nexport const HistoryPage = () => {\n return <HistoryDataGroupWidget />;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/layout/layout.widget.tsx","../src/layout/layout.script.tsx","../src/layout/layout.ui.tsx","../src/layout/layout.ui.mobile.tsx","../src/layout/context.tsx","../src/pages/overview/index.tsx","../src/pages/overview/assets/assets.script.ts","../src/pages/overview/assets/assets.ui.tsx","../src/pages/overview/assets/assetsHeader.tsx","../src/pages/overview/assets/assets.widget.tsx","../src/pages/overview/historyDataGroup/historyDataGroup.widget.tsx","../src/pages/overview/historyDataGroup/historyDataGroup.script.ts","../src/pages/overview/historyDataGroup/historyDataGroup.ui.desktop.tsx","../src/pages/overview/TransferHistory/transfer.widget.tsx","../src/pages/overview/TransferHistory/transfer.ui.tsx","../src/pages/overview/TransferHistory/column.tsx","../src/pages/overview/TransferHistory/useDataSource.script.ts","../src/pages/overview/helper/date.ts","../src/pages/overview/VaultsHistory/transfer.ui.tsx","../src/pages/overview/VaultsHistory/column.tsx","../src/pages/overview/VaultsHistory/useDataSource.script.ts","../src/pages/overview/VaultsHistory/transfer.widget.tsx","../src/pages/overview/assetHistory/column.tsx","../src/pages/overview/assetHistory/assetHistory.script.ts","../src/pages/overview/assetHistory/assetHistory.ui.tsx","../src/pages/overview/assetHistory/assetHistory.widget.tsx","../src/pages/overview/assetHistory/assetHistory.ui.mobile.tsx","../src/pages/overview/distribution/distribution.widget.tsx","../src/pages/overview/distribution/distribution.ui.tsx","../src/pages/overview/distribution/column.tsx","../src/pages/overview/distribution/distribution.ui.mobile.tsx","../src/pages/overview/distribution/useDataSource.script.ts","../src/pages/overview/funding/fundingHistory.widget.tsx","../src/pages/overview/funding/fundingHistory.ui.tsx","../src/pages/overview/funding/column.tsx","../src/pages/overview/funding/fundingHistory.ui.mobile.tsx","../src/pages/overview/funding/useDataSource.script.ts","../src/pages/overview/historyDataGroup/historyDataGroup.ui.mobile.tsx","../src/pages/assets/convert.widget.tsx","../src/pages/assets/convert.script.ts","../src/hooks/useAccountsData.ts","../src/hooks/useAssetsAccountFilter.ts","../src/pages/assets/assets.ui.tsx","../src/pages/assets/convert.ui.desktop.tsx","../src/pages/assets/convert.column.tsx","../src/pages/assets/convert.ui.mobile.tsx","../src/pages/overview/assetChart/assetsChart.script.ts","../src/pages/overview/provider/overviewContext.tsx","../src/pages/overview/assetChart/assetsChart.ui.tsx","../src/pages/overview/shared/periodHeader.tsx","../src/pages/overview/shared/useAssetHistory.ts","../src/pages/overview/assetChart/assetsChart.widget.tsx","../src/pages/overview/performance/performance.ui.tsx","../src/pages/overview/performance/performance.script.ts","../src/pages/overview/performance/performance.widget.tsx","../src/pages/overview/main.tsx","../src/pages/overview/mobile/mobile.widget.tsx","../src/pages/overview/mobile/accountStatus.ui.mobile.tsx","../src/pages/overview/mobile/affiliateCard.ui.mobile.tsx","../src/pages/overview/mobile/portfolioHandle.ui.mobile.tsx","../src/pages/overview/mobile/portfolioVaule.ui.mobile.tsx","../src/pages/overview/mobile/settingRouter.ui.mobile.tsx","../src/pages/overview/mobile/traderCard.ui.mobile.tsx","../src/pages/overview/mobile/tradingRewardsCard.ui.mobile.tsx","../src/pages/overview/mobile/useRewardsData.script.ts","../src/pages/overview/provider/overviewProvider.tsx","../src/pages/feeTier/index.tsx","../src/pages/feeTier/feeTier.script.ts","../src/pages/feeTier/column.tsx","../src/pages/feeTier/dataSource.ts","../src/pages/feeTier/feeTier.ui.tsx","../src/pages/feeTier/feeTier.widget.tsx","../src/pages/feeTier/page.tsx","../src/pages/positions/page.tsx","../src/pages/orders/page.tsx","../src/pages/api/index.ts","../src/pages/api/apiManager.ui.tsx","../src/pages/api/apiManager.script.tsx","../src/pages/api/dialog/createApiKey.tsx","../src/pages/api/dialog/createdApiKey.tsx","../src/pages/api/dialog/deleteApiKey.tsx","../src/pages/api/dialog/editApiKey.tsx","../src/pages/api/apiManager.widget.tsx","../src/pages/api/apiManager.page.tsx","../src/pages/setting/index.ts","../src/pages/setting/setting.ui.tsx","../src/pages/setting/setting.ui.desktop.tsx","../src/pages/setting/setting.ui.mobile.tsx","../src/pages/setting/setting.script.tsx","../src/pages/setting/setting.widget.tsx","../src/pages/setting/setting.page.tsx","../src/pages/assets/index.tsx","../src/pages/assets/assets.widget.tsx","../src/pages/assets/assets.script.ts","../src/hooks/useAssetTotalValue.ts","../src/pages/assets/column.tsx","../src/pages/assets/assets.ui.mobile.tsx","../src/pages/assets/page.tsx","../src/pages/history/index.tsx","../src/pages/history/history.page.tsx"],"names":["useScreen","useEffect","useMemo","useState","useMediaQuery","useTranslation","useScaffoldContext","jsx","PortfolioLeftSidebarPath","usePortfolioLayoutScript","props","routerAdapter","current","setCurrent","t","items","hideSideBar","item","cn","Scaffold","SideBar","PortfolioLayout","children","leftSideProps","classNames","rest","LeftSidebar","expanded","setExpand","open","e","Flex","Box","MainNavMobile","BottomNav","createContext","useContext","LayoutContext","useLayoutContext","LayoutProvider","sideOpen","setSideOpen","memoizedValue","jsxs","PortfolioLayoutMobile","Fragment","PortfolioLayoutWidget","state","isMobile","overview_exports","__export","AssetHistory","AssetHistoryWidget","AssetWidget","AssetsChart","AssetsChartWidget","AssetsUI","DistributionHistoryDesktop","DistributionHistoryMobile","DistributionHistoryWidget","FundingHistoryWidget","HistoryDataGroupWidget","OverviewPage","OverviewProvider","PerformanceUI","PerformanceWidget","useAssetHistoryColumns","useAssetHistoryScript","useAssetsChartScript","useFundingHistoryColumns","useFundingHistoryHook","usePerformanceScript","useCallback","useAccount","useCollateral","useLeverage","useLocalStorage","usePositionStream","useWalletConnector","useAppContext","AccountStatusEnum","modal","LeverageWidgetWithDialogId","DepositAndWithdrawWithDialogId","DepositAndWithdrawWithSheetId","TransferDialogId","TransferSheetId","useAssetScript","connect","namespace","isMainAccount","totalValue","freeCollateral","wrongNetwork","disabledConnect","data","curLeverage","visible","setVisible","handleDomId","subAccounts","canTrade","onLeverageEdit","onDeposit","onWithdraw","onTransfer","Card","Divider","Grid","Either","Statistic","Text","EyeIcon","gradientTextVariants","EditIcon","EyeCloseIcon","AuthGuard","ArrowDownSquareFillIcon","ArrowLeftRightIcon","ArrowUpSquareFillIcon","Button","CardTitle","AssetsHeader","NoValue","AssetStatistic","connectWallet","useHistoryDataGroupScript","active","setActive","AssetHistorySideEnum","ArrowLeftRightSquareFill","FeeTierIcon","ServerFillIcon","TabPanel","Tabs","VaultsIcon","produce","DataFilter","formatAddress","AuthGuardDataTable","React","TokenIcon","toast","Badge","capitalizeString","useColumns","onCopy","sub","val","subAccount","TransferHistoryUI","dataSource","queryParameter","isLoading","selectedAccount","onFilter","side","dateRange","ALL_ACCOUNTS","MAIN_ACCOUNT","memoizedOptions","value","columns","draft","row","getDate","getMonth","getYear","set","useTransferHistory","usePagination","subtractDaysFromCurrentDate","differenceInDays","setHours","parseDateRangeForFilter","from","to","useTransferHistoryHook","today","date","setDateRange","page","pageSize","setPage","parsePagination","setAccount","setSide","meta","filteredData","onAccountFilter","filter","pagination","TransferHistoryWidget","accountState","record","VaultsHistoryUI","useVaultsHistory","useVaultsHistoryHook","onDateRangeFilter","VaultsHistoryWidget","AssetHistoryStatusEnum","capitalizeFirstLetter","Decimal","options","chainsInfo","isDeposit","isWeb3Wallet","txIdColumn","href","accountIdColumn","accountId","recoed","netAmount","useAssetsHistory","useQuery","useTokensInfo","d","tokensInfo","target","setTarget","startTime","endTime","assetData","assetMeta","assetLoading","transferData","transferLoading","transferMeta","findToken","token","ListView","ArrowRightShortIcon","EmptyDataState","AssetHistoryMobile","loadMore","getStatusText","status","renderHistoryItem","formattedAmount","getTxLink","chainInfo","chain","itemColor","amountView","statusView","timeView","txIdView","accountIdView","index","isValidating","type","TYPES","getTypeText","renderItem","useDistributionHistory","useDistributionHistoryHook","setType","useSymbolsInfo","FundingHistoryDesktop","symbols","symbol","FundingHistoryMobile","switchPaymentType","paymentType","useFundingFeeHistory","setSymbol","HistoryDataGroupDesktop","onTabChange","useIndexPricesStream","useSubAccountQuery","EMPTY_LIST","EMPTY_HOLDING","useAccountsData","holding","pick","ArrowDownShortIcon","TotalValue","onToggleVisibility","Icon","DepositAndWithdrawButton","mergedDisabled","AssetsTable","selectedAsset","assetsOptions","ALL_ASSETS","memoizedAssetOptions","ConvertHistoryWidget","useAssetsAccountFilter","setSelectedAccount","name","useAssetsMultiFilter","setSelectedAsset","accountFiltered","account","filteredChildren","child","useConvertScript","indexPrices","allAccounts","statusFilter","setStatusFilter","convertedAssetFilter","setConvertedAssetFilter","convertedAssetOptions","assetOptions","queryUrl","params","size","summary","dataRows","totalConversions","totalUSDCReceived","sum","totalFees","detailSum","detail","DataTable","SimpleDialog","useModal","Tooltip","ConvertedAssetColumn","convertedAssets","assets","tooltipContent","asset","useConvertColumns","onDetailsClick","qty","details","totalHaircut","convertId","useConvertDetailColumns","haircut","txId","venue","result","CONVERT_STATUS_OPTIONS","ConvertDetailsModal","onOpenChange","detailColumns","ConvertDesktopUI","convertState","dataFilter","SimpleSheet","ScrollIndicator","ConvertMobileUI","ConvertMobileItem","ConvertMobileField","label","rule","copyable","className","onClick","ConverHistoryItemDetailsDialog","hide","resolve","reject","HistoryDataGroupMobile","useDataTap","OverviewContext","useOverviewContext","assetHistory","_data","invisible","AssetLineChart","Select","useRef","subDays","format","usePrivateQuery","useStatisticsDaily","zero","PeriodType","convertToUSDCAndOperate","amount","op","indexPrice","delta","useAssetsHistoryData","localKey","isRealtime","periodTypes","period","setPeriod","getStartDate","periodValue","startDate","setStartDate","endDate","totalDeposit","transferOutHistory","transferInHistory","onPeriodChange","lastItem","totalTransferIn","acc","totalTransferOut","calculateLastPnl","inputs","list","i","calculate","getUTCStr","mergeData","calculateData","realtime","calculatedData","aggregateValue","vol","pnl","roi","tail","dataTailIndex","lastAccountValue","start","end","_","year","month","day","PeriodTitle","periodLabel","PnLBarChart","PnlLineChart","volumeUpdateDate","LabelWithHint","PerformancePnL","CumulativePnlChart","hint","ctx","ENVType","useGetEnv","DepositStatusWidget","parseJSON","useChains","ChainNamespace","CopyIcon","ChainIcon","useCurrentStatus","statusText","EVMChainPopover","chains","key","MoreIcon","EVMChains","ShowAccount","onCopyAddress","currentNamespace","getLinkDeviceStorage","leftNode","rightNode","bgClass","bg","AccountStatusMobile","description","rootClass","linkDeviceStorage","isNumber","AffiliateIcon","ChevronRightIcon","commifyOptional","AffiliateCardMobile","CalendarMinusIcon","PortfolioHandleMobile","onGotoHistory","PortfolioValueMobile","SettingFillIcon","SettingRouterMobile","TraderMobileIcon","TraderCardMobile","TradingRewardsIcon","OrderlyIcon","EsOrderlyIcon","TradingRewardsCardMobile","curEpochInfo","curEpochId","isOrder","onClaim","event","Countdown","targetTimestamp","timeLeft","setTimeLeft","intervalId","now","distance","days","hours","minutes","seconds","CountDownItem","useAllBrokers","useConfig","useCurEpochEstimate","useEpochInfo","useGetClaimed","DistributionId","TWType","useRewardsData","totalOrderClaimedReward","curEpochEstimate","brokers","mutate","epochList","brokerId","brokerName","lastStete","timerId","useRewardsDataScript","referralInfo","isSignIn","MobileOverview","portfolioValue","unrealPnL","unrealROI","toggleVisible","hasSubAccount","rewardsData","layoutContext","onRouteChange","env","goToClaim","url","navigateToPortfolioHistory","feeTier_exports","FeeTierPage","useAccountInfo","numberToHumanStyle","useFeeTierColumns","volume_min","volume_max","volume_node","useFeeTierScript","dataAdapter","tier","setTier","cols","volumeStatistics","getFuturesCurrentTier","feeList","futures_taker_fee_rate","futures_maker_fee_rate","takerRate","makerRate","FeeTierHeaderItem","needCustom","widgetConfigs","customTag","FeeTierHeader","FeeTierTable","top","setTop","parentRect","elementRect","offsetTop","onRow","config","originalTable","customTable","FeeTier","takerFeeRate","makerFeeRate","customHeader","FeeTierWidget","page_exports","PositionsPage","LiquidationWidget","PositionHistoryWidget","CombinePositionsWidget","PositionsWidget","tab","setTab","OrdersPage","OrdersWidget","sharePnLConfig","ordersRef","onDownload","TooltipIcon","ref","api_exports","APIManagerPage","APIManagerWidget","PlusIcon","AuthGuardEmpty","AuthGuardTooltip","useApiKeyManager","useApiManagerScript","filterTags","keyStatus","showCreateDialog","setShowCreateDialog","showCreatedDialog","setShowCreatedDialog","generateKey","setGenerateKey","canCreateApiKey","keys","generateOrderlyKey","setIPRestriction","removeOrderlyKey","resetOrderlyKeyIPRestriction","refresh","error","curPubKey","setCurPubKey","pubKey","onCreateApiKey","onReadApiGuide","hideCreateDialog","doCreate","ipRestriction","scope","createdSuccess","res","ip","secretKey","capitalizeFirstChar","generateKeyRes","err","hideCreatedDialog","onCopyApiKeyInfo","doConfirm","doDelete","curKey","doEdit","future","onCopyAccountId","onCopyApiKey","onCopyApiSecretKey","onCopyIP","keyList","filterTag","filterCurKey","verifyIP","accountStatus","userId","str","CreateAPIKeyDialog","ipText","setIpText","read","setRead","trade","setTrade","setHint","scopes","Checkbox","CreatedAPIKeyDialog","Trans","DeleteAPIKeyDialog","setOpen","onDelete","formatKey","EditAPIKeyDialog","onUpdate","APIManager","AccountInfo","Subtitle","KeyList","EditButton","DeleteButton","setting_exports","SettingPage","SettingWidget","Switch","SettingDesktop","LanguageSwitcherWidget","SettingMobile","Setting","useDebouncedCallback","useMutation","useSettingScript","update","isMutating","checked","setChecked","updateCheckState","setMaintainConfig","maintenance_cancel_order_flag","canTouch","assets_exports","AssetsPage","getIndexPrice","calculateAssetValue","calculateTotalHolding","total","hol","assetValue","useAssetTotalValue","mainTotalValue","subTotalValue","find","useAssetsColumns","onConvert","id","ORDERLY_ASSETS_VISIBLE_KEY","useAssetsScript","filtered","enhancedFiltered","accountData","enhancedChildren","tokenInfo","collateralRatio","collateralContribution","handleTransfer","handleConvert","showTransfer","assetsColumns","openDepositAndWithdraw","viewName","AssetsTableMobile","memoizedAssets","AccountTag","AssetMobileItem","AssetsWidget","history_exports","HistoryPage","HistoryWidget"],"mappings":"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","sourcesContent":["import { FC, PropsWithChildren } from \"react\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { usePortfolioLayoutScript } from \"./layout.script\";\nimport { PortfolioLayout, PortfolioLayoutProps } from \"./layout.ui\";\nimport { PortfolioLayoutMobile } from \"./layout.ui.mobile\";\n\nexport type PortfolioLayoutWidgetProps = PortfolioLayoutProps;\n\nexport const PortfolioLayoutWidget: FC<\n PropsWithChildren<PortfolioLayoutWidgetProps>\n> = (props) => {\n const state = usePortfolioLayoutScript({\n current: props.leftSideProps?.current,\n });\n const { isMobile } = useScreen();\n\n return (\n <>\n {isMobile ? (\n // @ts-ignore\n <PortfolioLayoutMobile {...state} {...props} />\n ) : (\n <PortfolioLayout {...state} {...props} />\n )}\n </>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useMediaQuery } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { SideMenuItem, useScaffoldContext } from \"@orderly.network/ui-scaffold\";\n\nexport enum PortfolioLeftSidebarPath {\n Overview = \"/portfolio\",\n Positions = \"/portfolio/positions\",\n Orders = \"/portfolio/orders\",\n Assets = \"/portfolio/assets\",\n FeeTier = \"/portfolio/feeTier\",\n ApiKey = \"/portfolio/apiKey\",\n Setting = \"/portfolio/setting\",\n History = \"/portfolio/history\",\n}\n\nexport type UseLayoutBuilderOptions = {\n current?: string;\n};\n\nexport const usePortfolioLayoutScript = (props: UseLayoutBuilderOptions) => {\n const { routerAdapter } = useScaffoldContext();\n const [current, setCurrent] = useState(\n props.current ?? routerAdapter?.currentPath ?? \"/portfolio\",\n );\n const { t } = useTranslation();\n\n useEffect(() => {\n if (props.current || routerAdapter?.currentPath) {\n setCurrent(props.current || routerAdapter?.currentPath || \"/portfolio\");\n }\n }, [props.current, routerAdapter?.currentPath]);\n\n const items = useMemo(() => {\n return [\n {\n name: t(\"common.overview\"),\n href: PortfolioLeftSidebarPath.Overview,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.24316 2.19727C3.58641 2.19727 2.24316 3.54044 2.24316 5.19727V12.6973C2.24316 14.3541 3.58641 15.6973 5.24316 15.6973H12.7432C14.3999 15.6973 15.7432 14.3541 15.7432 12.6973V5.19727C15.7432 3.54044 14.3999 2.19727 12.7432 2.19727H5.24316ZM5.24316 3.69727H12.7432C13.5719 3.69727 14.2432 4.36882 14.2432 5.19727V12.6973C14.2432 13.2484 13.9319 13.734 13.4894 13.9947C13.3454 12.2235 11.4427 11.1973 8.99316 11.1973C6.54366 11.1973 4.60341 12.251 4.48566 13.9997C4.04241 13.739 3.74316 13.2484 3.74316 12.6973V5.19727C3.74316 4.36882 4.41441 3.69727 5.24316 3.69727ZM8.99316 5.19727C7.54341 5.19727 6.36816 6.37252 6.36816 7.82227C6.36816 9.27202 7.54341 10.4473 8.99316 10.4473C10.4429 10.4473 11.6182 9.27202 11.6182 7.82227C11.6182 6.37252 10.4429 5.19727 8.99316 5.19727Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"common.positions\"),\n href: PortfolioLeftSidebarPath.Positions,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.51 3.021a3 3 0 0 0-3 3v6a3 3 0 0 0 3 3h9a3 3 0 0 0 3-3v-6a3 3 0 0 0-3-3zm2.25 3a.76.76 0 0 1 .54.211.77.77 0 0 1 0 1.078l-.75.75a.77.77 0 0 1-.54.211h-.75a.75.75 0 0 1 0-1.5h.422l.54-.539a.76.76 0 0 1 .539-.21m3 .75h3a.75.75 0 0 1 0 1.5h-3a.75.75 0 0 1 0-1.5m-3 2.25a.76.76 0 0 1 .54.211.77.77 0 0 1 0 1.079l-.75.75a.77.77 0 0 1-.54.21h-.75a.75.75 0 0 1 0-1.5h.422l.54-.539a.76.76 0 0 1 .539-.21m3 .75h3a.75.75 0 0 1 0 1.5h-3a.75.75 0 0 1 0-1.5\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"common.orders\"),\n href: PortfolioLeftSidebarPath.Orders,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.693 1.5C4.229 1.5 3.02 2.61 3.02 4.006v9.984c0 1.398 1.208 2.508 2.672 2.508h6.657c1.463 0 2.671-1.11 2.671-2.508V6.726c0-2.672-2.579-5.227-5.25-5.227zm4.828 1.593c1.33.352 2.562 1.58 2.906 2.906h-1.734c-.667 0-1.172-.472-1.172-1.008zm-3.75 2.906h.75a.75.75 0 0 1 0 1.5h-.75a.75.75 0 0 1 0-1.5m0 3h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5m0 3h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"common.assets\"),\n href: PortfolioLeftSidebarPath.Assets,\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n >\n <path\n d=\"M9 1.5C4.85 1.5 1.5 4.85 1.5 9C1.5 13.15 4.85 16.5 9 16.5C13.15 16.5 16.5 13.15 16.5 9C16.5 4.85 13.15 1.5 9 1.5ZM8.17529 3.75H9.67529V4.94971L10.125 5.17529C10.35 5.32529 10.5756 5.47471 10.7256 5.69971C10.8756 5.92471 11.0256 6.14971 11.1006 6.44971C11.1756 6.74971 11.25 7.05029 11.25 7.42529H9.82471C9.82471 6.97529 9.75059 6.67471 9.60059 6.44971C9.45059 6.22471 9.3 6.14941 9 6.14941C8.85 6.14941 8.7 6.15059 8.625 6.22559L8.39941 6.44971C8.32441 6.52471 8.325 6.675 8.25 6.75C8.175 6.825 8.17529 6.975 8.17529 7.125C8.17529 7.275 8.25 7.35 8.25 7.5C8.25 7.65 8.32441 7.72529 8.39941 7.80029C8.47441 7.95029 8.54971 8.02559 8.69971 8.10059C8.77471 8.17559 8.92441 8.24971 9.14941 8.32471C9.44941 8.47471 9.75059 8.62441 9.97559 8.77441C10.2756 8.92441 10.4994 9.07529 10.6494 9.30029C10.8744 9.52529 11.0256 9.75059 11.1006 9.97559C11.1756 10.2006 11.25 10.5 11.25 10.875C11.25 11.25 11.1756 11.5494 11.1006 11.7744C11.0256 12.0744 10.8756 12.2247 10.7256 12.4497C10.5756 12.5997 10.35 12.7494 10.125 12.8994C9.975 12.9744 9.9 13.0503 9.75 13.0503V14.25H8.25V12.9756C8.1 12.9006 7.95029 12.8997 7.80029 12.8247C7.50029 12.7497 7.35 12.6 7.125 12.375C6.975 12.225 6.82529 11.925 6.67529 11.625C6.60029 11.25 6.52441 10.8753 6.52441 10.4253H8.02441C8.02441 10.6503 8.02559 10.8756 8.10059 11.1006C8.17559 11.3256 8.24971 11.4753 8.32471 11.5503C8.39971 11.6253 8.475 11.6994 8.625 11.7744C8.775 11.8494 8.85 11.8506 9 11.8506C9.15 11.8506 9.225 11.8494 9.375 11.7744C9.525 11.6994 9.60029 11.6253 9.67529 11.5503C9.75029 11.4753 9.74971 11.4 9.82471 11.25C9.89971 11.175 9.89941 11.025 9.89941 10.875C9.89941 10.725 9.82471 10.575 9.82471 10.5C9.82471 10.425 9.75029 10.2747 9.67529 10.1997C9.60029 10.0497 9.525 9.97441 9.375 9.89941L8.92529 9.67529C8.62529 9.52529 8.32559 9.37559 8.10059 9.22559C7.80059 9.07559 7.57529 8.92471 7.42529 8.69971C7.20029 8.54971 7.05059 8.32441 6.97559 8.02441C6.90059 7.79941 6.82471 7.5 6.82471 7.125C6.82471 6.825 6.82441 6.52529 6.89941 6.30029C7.04941 6.07529 7.12559 5.85 7.35059 5.625C7.50059 5.4 7.65029 5.25029 7.80029 5.17529C7.95029 5.10029 8.02529 5.02441 8.17529 5.02441V3.75Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"portfolio.feeTier\"),\n href: PortfolioLeftSidebarPath.FeeTier,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.99829 1.51062C4.34154 1.51062 2.99829 2.85387 2.99829 4.51062V13.5106C2.99829 15.1674 4.34154 16.5106 5.99829 16.5106H11.9983C13.655 16.5106 14.9983 15.1674 14.9983 13.5106V4.51062C14.9983 2.85387 13.655 1.51062 11.9983 1.51062H5.99829ZM5.99829 3.76062H11.9983C12.4123 3.76062 12.7483 4.09662 12.7483 4.51062V6.01062C12.7483 6.42462 12.4123 6.76062 11.9983 6.76062H5.99829C5.58429 6.76062 5.24829 6.42462 5.24829 6.01062V4.51062C5.24829 4.09662 5.58429 3.76062 5.99829 3.76062ZM5.99829 8.26062C6.41229 8.26062 6.74829 8.59662 6.74829 9.01062C6.74829 9.42462 6.41229 9.76062 5.99829 9.76062C5.58429 9.76062 5.24829 9.42462 5.24829 9.01062C5.24829 8.59662 5.58429 8.26062 5.99829 8.26062ZM8.99829 8.26062C9.41229 8.26062 9.74829 8.59662 9.74829 9.01062C9.74829 9.42462 9.41229 9.76062 8.99829 9.76062C8.58429 9.76062 8.24829 9.42462 8.24829 9.01062C8.24829 8.59662 8.58429 8.26062 8.99829 8.26062ZM11.9983 8.26062C12.4123 8.26062 12.7483 8.59662 12.7483 9.01062C12.7483 9.42462 12.4123 9.76062 11.9983 9.76062C11.5843 9.76062 11.2483 9.42462 11.2483 9.01062C11.2483 8.59662 11.5843 8.26062 11.9983 8.26062ZM5.99829 10.5106C6.41229 10.5106 6.74829 10.8466 6.74829 11.2606C6.74829 11.6746 6.41229 12.0106 5.99829 12.0106C5.58429 12.0106 5.24829 11.6746 5.24829 11.2606C5.24829 10.8466 5.58429 10.5106 5.99829 10.5106ZM8.99829 10.5106C9.41229 10.5106 9.74829 10.8466 9.74829 11.2606C9.74829 11.6746 9.41229 12.0106 8.99829 12.0106C8.58429 12.0106 8.24829 11.6746 8.24829 11.2606C8.24829 10.8466 8.58429 10.5106 8.99829 10.5106ZM11.9983 10.5106C12.4123 10.5106 12.7483 10.8466 12.7483 11.2606V13.5106C12.7483 13.9246 12.4123 14.2606 11.9983 14.2606C11.5843 14.2606 11.2483 13.9246 11.2483 13.5106V11.2606C11.2483 10.8466 11.5843 10.5106 11.9983 10.5106ZM5.99829 12.7606C6.41229 12.7606 6.74829 13.0966 6.74829 13.5106C6.74829 13.9246 6.41229 14.2606 5.99829 14.2606C5.58429 14.2606 5.24829 13.9246 5.24829 13.5106C5.24829 13.0966 5.58429 12.7606 5.99829 12.7606ZM8.99829 12.7606C9.41229 12.7606 9.74829 13.0966 9.74829 13.5106C9.74829 13.9246 9.41229 14.2606 8.99829 14.2606C8.58429 14.2606 8.24829 13.9246 8.24829 13.5106C8.24829 13.0966 8.58429 12.7606 8.99829 12.7606Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"portfolio.apiKeys\"),\n href: PortfolioLeftSidebarPath.ApiKey,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9.02124 1.49915C7.77849 1.49915 6.77124 2.5064 6.77124 3.74915C6.77124 4.70015 7.40049 5.55517 8.26974 5.86942L8.27124 8.24915H5.27124C4.85724 8.24915 4.52124 8.58515 4.52124 8.99915L4.52048 12.1304C3.65723 12.4274 3.02124 13.2981 3.02124 14.2491C3.02124 15.4919 4.02849 16.4991 5.27124 16.4991C6.51399 16.4991 7.52124 15.4919 7.52124 14.2491C7.52124 13.2981 6.92499 12.4596 6.02949 12.1206L6.02124 9.74915H9.02124H12.0212L12.0265 12.1319C11.1257 12.4446 10.5212 13.2981 10.5212 14.2491C10.5212 15.4919 11.5285 16.4991 12.7712 16.4991C14.014 16.4991 15.0212 15.4919 15.0212 14.2491C15.0212 13.2981 14.407 12.4611 13.5272 12.1281L13.5212 8.99915C13.5212 8.58515 13.1852 8.24915 12.7712 8.24915H9.77124L9.76899 5.86639C10.642 5.55814 11.2712 4.70015 11.2712 3.74915C11.2712 2.5064 10.264 1.49915 9.02124 1.49915Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"portfolio.setting\"),\n href: PortfolioLeftSidebarPath.Setting,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.72601 1.84159C5.66251 2.17834 4.74527 2.7296 3.93677 3.48185C3.68702 3.7151 3.61052 4.09534 3.77252 4.39609C4.37327 5.50684 3.74476 6.69484 2.39026 6.76309C2.05801 6.78034 1.76477 7.02559 1.68677 7.34884C1.55252 7.90759 1.49927 8.37559 1.49927 8.98984C1.49927 9.50509 1.55476 10.0878 1.66351 10.6068C1.73101 10.9308 2.01302 11.1641 2.34302 11.1933C3.70652 11.3111 4.38152 12.3506 3.77252 13.6773C3.63752 13.9721 3.69902 14.3246 3.93677 14.5443C4.73327 15.2816 5.64826 15.8006 6.72601 16.1381C7.03351 16.2348 7.38076 16.1186 7.56976 15.8568C8.40376 14.7033 9.61352 14.6988 10.4055 15.8568C10.5923 16.1298 10.9343 16.2611 11.2493 16.1613C12.2895 15.8343 13.2585 15.2771 14.0618 14.5443C14.3093 14.3193 14.3745 13.9541 14.226 13.6541C13.602 12.3948 14.3198 11.2383 15.6083 11.2166C15.9503 11.2106 16.2548 10.9856 16.335 10.6541C16.4648 10.1163 16.4993 9.64759 16.4993 8.98984C16.4993 8.42434 16.4325 7.86709 16.3118 7.32559C16.2353 6.98359 15.936 6.74059 15.585 6.73984C14.3168 6.73759 13.6058 5.49109 14.226 4.39609C14.3985 4.09084 14.3445 3.71735 14.085 3.48185C13.2675 2.73935 12.2708 2.15959 11.226 1.84159C10.905 1.74409 10.5638 1.86409 10.3823 2.14609C9.65776 3.27109 8.30477 3.29135 7.59302 2.16935C7.41077 1.8821 7.05001 1.73809 6.72601 1.84159ZM8.99927 5.98984C10.656 5.98984 11.9993 7.33309 11.9993 8.98984C11.9993 10.6466 10.656 11.9898 8.99927 11.9898C7.34252 11.9898 5.99927 10.6466 5.99927 8.98984C5.99927 7.33309 7.34252 5.98984 8.99927 5.98984Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"trading.history\"),\n href: PortfolioLeftSidebarPath.History,\n hide: true,\n },\n ];\n }, [t]);\n\n const hideSideBar = useMediaQuery(\"(max-width: 768px)\");\n\n return {\n items,\n current,\n hideSideBar,\n onItemSelect: (item: SideMenuItem) => {\n if (typeof item.href === \"undefined\") {\n console.warn(\"Item href is not defined\");\n return;\n }\n setCurrent(item.href!);\n routerAdapter?.onRouteChange({\n href: item.href,\n name: item.name,\n });\n },\n };\n};\n\nexport const useCustomSidebarHook = () => {\n const { expanded, setExpand } = useScaffoldContext();\n\n return {\n open: expanded,\n onOpenChange: (open: boolean) => {\n setExpand(open);\n },\n };\n};\n\nexport type usePortfolioLayoutScriptType = ReturnType<\n typeof usePortfolioLayoutScript\n>;\n","import { FC, PropsWithChildren } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn } from \"@orderly.network/ui\";\nimport {\n ScaffoldProps,\n RouterAdapter,\n Scaffold,\n SideBar,\n SideBarProps,\n useScaffoldContext,\n} from \"@orderly.network/ui-scaffold\";\n\nexport type PortfolioLayoutProps = ScaffoldProps & {\n hideSideBar?: boolean;\n items?: SideBarProps[\"items\"];\n};\n\nexport const PortfolioLayout: FC<PropsWithChildren<PortfolioLayoutProps>> = (\n props,\n) => {\n const { children, leftSideProps, classNames, ...rest } = props;\n\n return (\n <Scaffold\n leftSidebar={\n props.hideSideBar ? null : (\n <LeftSidebar\n current={props.routerAdapter?.currentPath}\n routerAdapter={props.routerAdapter}\n items={props.items}\n {...leftSideProps}\n />\n )\n }\n routerAdapter={props.routerAdapter}\n classNames={{\n ...classNames,\n content: cn(\"oui-my-6 oui-px-3\", classNames?.content),\n topNavbar: cn(\"oui-bg-base-9\", classNames?.topNavbar),\n leftSidebar: cn(\n \"oui-rounded-xl oui-bg-base-9\",\n \"oui-m-3 oui-p-4\",\n \"oui-border oui-border-line\",\n classNames?.leftSidebar,\n ),\n }}\n {...rest}\n >\n {children}\n </Scaffold>\n );\n};\n\ntype LeftSidebarProps = SideBarProps & {\n routerAdapter?: RouterAdapter;\n};\n\nconst LeftSidebar: FC<LeftSidebarProps> = (props) => {\n const { expanded, setExpand } = useScaffoldContext();\n const { t } = useTranslation();\n return (\n <SideBar\n title={t(\"common.portfolio\")}\n {...props}\n open={expanded}\n onOpenChange={(open) => setExpand(open)}\n onItemSelect={(e) => {\n props.onItemSelect?.(e);\n props.routerAdapter?.onRouteChange?.({\n href: e.href || \"\",\n name: e.name,\n });\n }}\n />\n );\n};\n","import { FC, PropsWithChildren } from \"react\";\nimport { Flex, Box } from \"@orderly.network/ui\";\nimport {\n MainNavMobile,\n BottomNav,\n type ScaffoldProps,\n} from \"@orderly.network/ui-scaffold\";\nimport { LayoutProvider } from \"./context\";\nimport { usePortfolioLayoutScriptType } from \"./layout.script\";\n\nexport const PortfolioLayoutMobile: FC<\n PropsWithChildren<\n ScaffoldProps & usePortfolioLayoutScriptType & { current?: string }\n >\n> = (props) => {\n return (\n <LayoutProvider {...props}>\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n height={\"100%\"}\n className=\"oui-h-full-screen oui-bg-base-10\"\n >\n <header className=\"oui-sticky oui-top-0 oui-z-10 oui-w-full oui-bg-base-10\">\n <MainNavMobile\n {...props.mainNavProps}\n current={props?.current}\n subItems={props?.items}\n routerAdapter={props.routerAdapter}\n />\n </header>\n <Box className=\"oui-min-h-[calc(100vh-44px-64px-env(safe-area-inset-bottom))] oui-w-full\">\n {props.children}\n </Box>\n <footer className=\"oui-sticky oui-bottom-0 oui-z-10 oui-w-full oui-bg-base-9 oui-pb-[calc(env(safe-area-inset-bottom))]\">\n <BottomNav\n mainMenus={props.bottomNavProps?.mainMenus}\n current={props?.current}\n onRouteChange={props.routerAdapter?.onRouteChange}\n />\n </footer>\n </Flex>\n </LayoutProvider>\n );\n};\n","import React, { createContext, useContext, useState, useMemo } from \"react\";\nimport type { RouterAdapter } from \"@orderly.network/ui-scaffold\";\n\ntype LayoutContextValue = {\n sideOpen: boolean;\n onSideOpenChange: (open: boolean) => void;\n routerAdapter?: RouterAdapter;\n};\n\nconst LayoutContext = createContext<LayoutContextValue>({\n sideOpen: true,\n} as LayoutContextValue);\n\nexport const useLayoutContext = () => {\n return useContext(LayoutContext);\n};\n\nexport const LayoutProvider: React.FC<\n React.PropsWithChildren<{ routerAdapter?: RouterAdapter }>\n> = (props) => {\n const { routerAdapter, children } = props;\n const [sideOpen, setSideOpen] = useState(true);\n const memoizedValue = useMemo<LayoutContextValue>(\n () => ({\n sideOpen: sideOpen,\n onSideOpenChange: setSideOpen,\n routerAdapter: routerAdapter,\n }),\n [sideOpen, setSideOpen, routerAdapter],\n );\n return (\n <LayoutContext.Provider value={memoizedValue}>\n {children}\n </LayoutContext.Provider>\n );\n};\n","export { AssetWidget, AssetsUI } from \"./assets\";\nexport { HistoryDataGroupWidget } from \"./historyDataGroup\";\n\nexport * from \"./assetChart\";\nexport * from \"./assetHistory\";\n\nexport {\n PerformanceUI,\n PerformanceWidget,\n usePerformanceScript,\n} from \"./performance\";\nexport {\n FundingHistoryWidget,\n useFundingHistoryColumns,\n useFundingHistoryHook,\n} from \"./funding\";\n\nexport {\n DistributionHistoryWidget,\n DistributionHistoryMobile,\n DistributionHistoryDesktop,\n} from \"./distribution\";\n\nexport { OverviewPage } from \"./main\";\n\nexport { OverviewProvider } from \"./provider/overviewProvider\";\n","import { useCallback, useMemo } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useLeverage,\n useLocalStorage,\n usePositionStream,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { modal, useScreen } from \"@orderly.network/ui\";\nimport { LeverageWidgetWithDialogId } from \"@orderly.network/ui-leverage\";\nimport {\n DepositAndWithdrawWithDialogId,\n DepositAndWithdrawWithSheetId,\n TransferDialogId,\n TransferSheetId,\n} from \"@orderly.network/ui-transfer\";\n\nexport const useAssetScript = () => {\n const { connect, namespace } = useWalletConnector();\n const { state, isMainAccount } = useAccount();\n const { totalValue, freeCollateral } = useCollateral();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const [data] = usePositionStream();\n const { curLeverage } = useLeverage();\n const [visible, setVisible] = useLocalStorage(\"orderly_assets_visible\", true);\n const { isMobile } = useScreen();\n const handleDomId = isMobile\n ? DepositAndWithdrawWithSheetId\n : DepositAndWithdrawWithDialogId;\n const subAccounts = state.subAccounts ?? [];\n\n const canTrade = useMemo(() => {\n return (\n !wrongNetwork &&\n !disabledConnect &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected)\n );\n }, [state.status, wrongNetwork, disabledConnect]);\n\n const onLeverageEdit = () => {\n modal.show(LeverageWidgetWithDialogId);\n };\n\n const onDeposit = useCallback(() => {\n modal.show(handleDomId, { activeTab: \"deposit\" });\n }, [handleDomId]);\n\n const onWithdraw = useCallback(() => {\n modal.show(handleDomId, { activeTab: \"withdraw\" });\n }, []);\n\n const onTransfer = useCallback(() => {\n if (isMobile) {\n modal.show(TransferSheetId);\n } else {\n modal.show(TransferDialogId);\n }\n }, [isMobile]);\n\n return {\n canTrade,\n connect,\n portfolioValue: totalValue,\n freeCollateral,\n unrealPnL: data.aggregated.total_unreal_pnl,\n unrealROI: data.totalUnrealizedROI,\n currentLeverage: curLeverage,\n onLeverageEdit,\n visible,\n wrongNetwork,\n toggleVisible: () => setVisible(!visible),\n onDeposit,\n onWithdraw,\n onTransfer,\n namespace,\n isMainAccount,\n hasSubAccount: subAccounts?.length > 0,\n } as const;\n};\n\nexport type AssetScriptReturn = ReturnType<typeof useAssetScript>;\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Card,\n Divider,\n Flex,\n Grid,\n Either,\n Statistic,\n Text,\n EyeIcon,\n gradientTextVariants,\n EditIcon,\n EyeCloseIcon,\n} from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { AssetScriptReturn } from \"./assets.script\";\nimport { AssetsHeader } from \"./assetsHeader\";\n\nexport const AssetsUI = (\n props: AssetScriptReturn & { onConnectWallet?: () => void },\n) => {\n const { t } = useTranslation();\n return (\n <Card\n classNames={{\n footer: \"oui-h-[48px]\",\n root: \"oui-h-[240px]\",\n }}\n title={\n <AssetsHeader\n disabled={!props.canTrade}\n isMainAccount={props.isMainAccount}\n onDeposit={props.onDeposit}\n onWithdraw={props.onWithdraw}\n onTransfer={props.onTransfer}\n hasSubAccount={props.hasSubAccount}\n />\n }\n >\n <>\n <Statistic\n label={\n <Flex gap={1}>\n <Text intensity={54}>{t(\"common.totalValue\")}</Text>\n <button\n onClick={() => {\n props.toggleVisible();\n }}\n data-testid=\"oui-testid-portfolio-assets-eye-btn\"\n >\n {props.visible ? (\n <EyeIcon size={16} color={\"white\"} />\n ) : (\n <EyeCloseIcon size={16} color={\"white\"} />\n )}\n </button>\n </Flex>\n }\n >\n <Either value={props.canTrade!} left={<NoValue />}>\n <Text.numeral\n visible={props.visible}\n unit=\"USDC\"\n // @ts-ignore\n style={{ \"--oui-gradient-angle\": \"45deg\" }}\n unitClassName=\"oui-text-base oui-text-base-contrast-80 oui-h-9 oui-ml-1\"\n className={gradientTextVariants({\n className: \"oui-font-bold oui-text-3xl\",\n color: \"brand\",\n })}\n >\n {props.portfolioValue ?? \"--\"}\n </Text.numeral>\n </Either>\n </Statistic>\n <Divider className=\"oui-my-4\" intensity={8} />\n <AuthGuard buttonProps={{ size: \"lg\", fullWidth: true }}>\n <AssetStatistic\n unrealROI={props.unrealROI}\n unrealPnL={props.unrealPnL}\n freeCollateral={props.freeCollateral}\n currentLeverage={props.currentLeverage}\n onLeverageEdit={props.onLeverageEdit}\n visible={props.visible}\n />\n </AuthGuard>\n </>\n </Card>\n );\n};\n\nconst NoValue: FC = () => {\n return (\n <Flex gap={1} className={\"oui-h-9\"}>\n <Text.gradient color=\"brand\" weight=\"bold\">\n --\n </Text.gradient>\n <Text>USDC</Text>\n </Flex>\n );\n};\n\ntype AssetStatisticProps = Pick<\n AssetScriptReturn,\n | \"currentLeverage\"\n | \"unrealPnL\"\n | \"unrealROI\"\n | \"freeCollateral\"\n | \"onLeverageEdit\"\n | \"visible\"\n>;\n\nexport const AssetStatistic = (props: AssetStatisticProps) => {\n const { t } = useTranslation();\n\n return (\n <Grid cols={3} className=\"oui-h-12\">\n <Statistic label={t(\"common.unrealizedPnl\")}>\n <Flex>\n <Text.numeral\n coloring\n size=\"lg\"\n weight=\"semibold\"\n visible={props.visible}\n >\n {props.unrealPnL}\n </Text.numeral>\n <Text.numeral\n coloring\n rule=\"percentages\"\n size=\"sm\"\n weight=\"semibold\"\n prefix={\"(\"}\n suffix=\")\"\n visible={props.visible}\n >\n {props.unrealROI}\n </Text.numeral>\n </Flex>\n </Statistic>\n <Statistic label={t(\"leverage.maxAccountLeverage\")}>\n <Flex itemAlign={\"center\"}>\n <span\n data-testid=\"oui-testid-portfolio-assets-maxAccountLeverage-value\"\n className=\"oui-text-lg\"\n >\n {props.currentLeverage}\n </span>\n <span>x</span>\n <button\n className=\"oui-ml-1\"\n onClick={() => props.onLeverageEdit?.()}\n data-testid=\"oui-testid-portfolio-assets-maxAccountLeverage-edit-btn\"\n >\n <EditIcon color={\"white\"} size={18} />\n </button>\n </Flex>\n </Statistic>\n <Statistic\n label={t(\"portfolio.overview.availableWithdraw\")}\n // @ts-ignore\n align=\"right\"\n // @ts-ignore\n valueProps={{ size: \"lg\", visible: props.visible }}\n >\n {props.freeCollateral}\n </Statistic>\n </Grid>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowLeftRightIcon,\n ArrowUpSquareFillIcon,\n Button,\n CardTitle,\n Flex,\n} from \"@orderly.network/ui\";\n\ntype Props = {\n disabled: boolean;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n onTransfer?: () => void;\n isMainAccount?: boolean;\n hasSubAccount?: boolean;\n};\n\nexport const AssetsHeader: FC<Props> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex justify={\"between\"}>\n <CardTitle>{t(\"common.overview\")}</CardTitle>\n <Flex gap={3}>\n {props.isMainAccount && (\n <Button\n disabled={props.disabled}\n size=\"md\"\n onClick={() => props.onDeposit?.()}\n icon={<ArrowDownSquareFillIcon />}\n data-testid=\"oui-testid-portfolio-assets-deposit-btn\"\n >\n {t(\"common.deposit\")}\n </Button>\n )}\n {props.hasSubAccount && (\n <Button\n disabled={props.disabled}\n size=\"md\"\n color=\"secondary\"\n onClick={() => props.onTransfer?.()}\n icon={<ArrowLeftRightIcon />}\n >\n {t(\"common.transfer\")}\n </Button>\n )}\n {props.isMainAccount && (\n <Button\n disabled={props.disabled}\n size=\"md\"\n color=\"secondary\"\n onClick={() => props.onWithdraw?.()}\n icon={<ArrowUpSquareFillIcon />}\n data-testid=\"oui-testid-portfolio-assets-withdraw-btn\"\n >\n {t(\"common.withdraw\")}\n </Button>\n )}\n </Flex>\n </Flex>\n );\n};\n","import { useAssetScript } from \"./assets.script\";\nimport { AssetsUI } from \"./assets.ui\";\n\nexport const AssetWidget = () => {\n const { connect: connectWallet, ...rest } = useAssetScript();\n return (\n <AssetsUI\n // TODO: remove duplicate props\n onConnectWallet={connectWallet}\n connect={connectWallet}\n {...rest}\n />\n );\n};\n","import { useScreen } from \"@orderly.network/ui\";\nimport { useHistoryDataGroupScript } from \"./historyDataGroup.script\";\nimport { HistoryDataGroupDesktop } from \"./historyDataGroup.ui.desktop\";\nimport { HistoryDataGroupMobile } from \"./historyDataGroup.ui.mobile\";\n\nexport const HistoryDataGroupWidget: React.FC = () => {\n const state = useHistoryDataGroupScript();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <HistoryDataGroupMobile {...state} />;\n }\n return <HistoryDataGroupDesktop {...state} />;\n};\n","import { useState } from \"react\";\n\nexport type TabName =\n | \"deposit\"\n | \"withdraw\"\n | \"funding\"\n | \"distribution\"\n | \"transfer\"\n | \"vaults\";\n\nexport const useHistoryDataGroupScript = () => {\n const [active, setActive] = useState<TabName>(\"deposit\");\n return {\n active,\n onTabChange: setActive as React.Dispatch<React.SetStateAction<string>>,\n } as const;\n};\n","import React, { useEffect } from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AssetHistorySideEnum } from \"@orderly.network/types\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowLeftRightSquareFill,\n ArrowUpSquareFillIcon,\n Card,\n FeeTierIcon,\n ServerFillIcon,\n TabPanel,\n Tabs,\n VaultsIcon,\n} from \"@orderly.network/ui\";\nimport { TransferHistoryWidget } from \"../TransferHistory\";\nimport { VaultsHistoryWidget } from \"../VaultsHistory\";\nimport { AssetHistoryWidget } from \"../assetHistory\";\nimport { DistributionHistoryWidget } from \"../distribution\";\nimport { FundingHistoryWidget } from \"../funding\";\nimport type { TabName } from \"./historyDataGroup.script\";\n\nexport const HistoryDataGroupDesktop: React.FC<{\n active?: TabName;\n onTabChange: (tab: string) => void;\n}> = (props) => {\n const { active = \"deposit\", onTabChange } = props;\n const { t } = useTranslation();\n const { isMainAccount } = useAccount();\n useEffect(() => {\n if (active === \"vaults\" && !isMainAccount) {\n onTabChange(\"deposit\");\n }\n }, [active, isMainAccount]);\n return (\n <Card>\n <Tabs\n value={active}\n onValueChange={onTabChange}\n variant=\"contained\"\n size=\"xl\"\n >\n <TabPanel\n title={t(\"common.deposits\")}\n icon={<ArrowDownSquareFillIcon />}\n value={\"deposit\"}\n >\n <AssetHistoryWidget side={AssetHistorySideEnum.DEPOSIT} />\n </TabPanel>\n <TabPanel\n title={t(\"common.withdrawals\")}\n icon={<ArrowUpSquareFillIcon />}\n value={\"withdraw\"}\n >\n <AssetHistoryWidget side={AssetHistorySideEnum.WITHDRAW} />\n </TabPanel>\n <TabPanel\n title={t(\"common.funding\")}\n icon={<FeeTierIcon />}\n value={\"funding\"}\n >\n <FundingHistoryWidget />\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.distribution\")}\n icon={<ServerFillIcon />}\n value={\"distribution\"}\n >\n <DistributionHistoryWidget />\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.transferHistory\")}\n icon={<ArrowLeftRightSquareFill />}\n value={\"transfer\"}\n >\n <TransferHistoryWidget />\n </TabPanel>\n {isMainAccount && (\n <TabPanel\n value={\"vaults\"}\n icon={<VaultsIcon />}\n title={t(\"portfolio.overview.vaults\")}\n >\n <VaultsHistoryWidget />\n </TabPanel>\n )}\n </Tabs>\n </Card>\n );\n};\n","import React from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { TransferHistoryUI } from \"./transfer.ui\";\nimport { useTransferHistoryHook } from \"./useDataSource.script\";\n\nexport const TransferHistoryWidget: React.FC = () => {\n const state = useTransferHistoryHook();\n const accountState = useAccount();\n return <TransferHistoryUI {...state} {...accountState} />;\n};\n","import React, { useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport type { API } from \"@orderly.network/types\";\nimport { DataFilter, formatAddress } from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport type { SelectOption } from \"@orderly.network/ui/src/select/withOptions\";\nimport { useColumns } from \"./column\";\nimport type { useTransferHistoryHookReturn } from \"./useDataSource.script\";\n\ntype HistoryProps = useTransferHistoryHookReturn;\n\nexport enum AccountType {\n ALL = \"All accounts\",\n MAIN = \"Main accounts\",\n}\n\nexport const TransferHistoryUI: React.FC<\n Readonly<HistoryProps & ReturnType<typeof useAccount>>\n> = (props) => {\n const {\n dataSource,\n queryParameter,\n state,\n isMainAccount,\n isLoading,\n selectedAccount,\n onFilter,\n } = props;\n const { side, dateRange } = queryParameter;\n\n const { t } = useTranslation();\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const subAccounts = state.subAccounts ?? [];\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\n\n const columns = useColumns();\n\n return (\n <>\n <DataFilter\n onFilter={onFilter}\n items={produce(\n [\n {\n type: \"select\",\n name: \"side\",\n value: side,\n options: [\n { value: \"OUT\", label: \"Outflow\" },\n { value: \"IN\", label: \"Inflow\" },\n ],\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ],\n (draft) => {\n if (isMainAccount) {\n draft.unshift({\n type: \"select\",\n name: \"account\",\n value: selectedAccount as any,\n options: memoizedOptions,\n });\n }\n },\n )}\n />\n <AuthGuardDataTable<API.TransferHistoryRow>\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n // isValidating={isValidating}\n className=\"oui-font-semibold\"\n classNames={{ root: \"oui-h-[calc(100%_-_49px)]\" }}\n pagination={props.pagination}\n generatedRowKey={(row) => row.id}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, EMPTY_LIST } from \"@orderly.network/types\";\nimport { Flex, TokenIcon, Text, toast, Badge } from \"@orderly.network/ui\";\nimport type { Column } from \"@orderly.network/ui\";\nimport { capitalizeString } from \"@orderly.network/utils\";\n\nexport const useColumns = () => {\n const { t } = useTranslation();\n const onCopy = () => {\n toast.success(t(\"common.copy.copied\"));\n };\n const { state } = useAccount();\n const sub = state.subAccounts ?? [];\n const columns = React.useMemo<Column<API.TransferHistoryRow>[]>(() => {\n return [\n {\n title: t(\"common.token\"),\n dataIndex: \"token\",\n width: 80,\n render(val: string) {\n return (\n <Flex gapX={2}>\n <TokenIcon name={val} size=\"xs\" />\n <span>{val}</span>\n </Flex>\n );\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"updated_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: `${t(\"transfer.internalTransfer.from\")} (Account ID)`,\n dataIndex: \"from_account_id\",\n render(val: string) {\n const isMainAccount = val === state.mainAccountId;\n const subAccount = sub.find((item) => item.id === val);\n return (\n <Flex itemAlign=\"start\" py={2} gap={1} direction=\"column\">\n <Text.formatted onCopy={onCopy} copyable rule=\"address\">\n {val}\n </Text.formatted>\n <Badge className=\"oui-select-none\" color=\"neutral\" size=\"xs\">\n {isMainAccount\n ? t(\"common.mainAccount\")\n : subAccount?.description || t(\"common.subAccount\")}\n </Badge>\n </Flex>\n );\n },\n },\n {\n title: `${t(\"transfer.internalTransfer.to\")} (Account ID)`,\n dataIndex: \"to_account_id\",\n render(val: string) {\n const isMainAccount = val === state.mainAccountId;\n const subAccount = sub.find((item) => item.id === val);\n return (\n <Flex itemAlign=\"start\" py={2} gap={1} direction=\"column\">\n <Text.formatted onCopy={onCopy} copyable rule=\"address\">\n {val}\n </Text.formatted>\n <Badge className=\"oui-select-none\" color=\"neutral\" size=\"xs\">\n {isMainAccount\n ? t(\"common.mainAccount\")\n : subAccount?.description || t(\"common.subAccount\")}\n </Badge>\n </Flex>\n );\n },\n },\n {\n title: t(\"common.status\"),\n dataIndex: \"status\",\n width: 120,\n render(val: string) {\n return capitalizeString(val);\n },\n },\n {\n title: t(\"common.amount\"),\n dataIndex: \"amount\",\n width: 80,\n },\n ];\n }, [t, state.mainAccountId, sub]);\n return columns;\n};\n","import React from \"react\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\nimport { useAccount, useTransferHistory } from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport type { PaginationMeta } from \"@orderly.network/ui\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport { AccountType } from \"./transfer.ui\";\n\nexport const useTransferHistoryHook = () => {\n // const today = useRef(setMinutes(setHours(new Date(), 23), 59));\n\n const today = React.useMemo<Date>(() => {\n const date = new Date();\n return new Date(getYear(date), getMonth(date), getDate(date), 0, 0, 0);\n }, []);\n\n const [dateRange, setDateRange] = React.useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const { state } = useAccount();\n\n const [selectedAccount, setAccount] = React.useState<string>(AccountType.ALL);\n\n const [side, setSide] = React.useState<\"IN\" | \"OUT\">(\"OUT\");\n\n const [data, { isLoading, meta }] = useTransferHistory({\n dataRange: [\n dateRange[0]?.getTime(),\n set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n })?.getTime(),\n ],\n side: side,\n size: pageSize,\n page: page,\n main_sub_only: true,\n });\n\n const filteredData = React.useMemo(() => {\n return data.filter((item) => {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return (\n item.from_account_id === state.mainAccountId ||\n item.to_account_id === state.mainAccountId\n );\n } else {\n return (\n item.from_account_id === selectedAccount ||\n item.to_account_id === selectedAccount\n );\n }\n });\n }, [data, selectedAccount]);\n\n const onAccountFilter = React.useCallback(\n (filter: { value: string; name: string }) => {\n if (filter.name === \"account\") {\n setAccount(filter.value);\n }\n if (filter.name === \"side\") {\n setSide(filter.value as \"IN\" | \"OUT\");\n }\n if (filter.name === \"dateRange\") {\n setDateRange(parseDateRangeForFilter(filter.value as any));\n }\n setPage(1);\n },\n [setPage],\n );\n\n const pagination = React.useMemo<PaginationMeta>(\n () => parsePagination(meta),\n [parsePagination, meta],\n );\n\n return {\n dataSource: filteredData,\n isLoading,\n // onDateRangeChange,\n queryParameter: {\n side,\n dateRange,\n },\n selectedAccount,\n onFilter: onAccountFilter,\n pagination,\n } as const;\n};\n\nexport type useTransferHistoryHookReturn = ReturnType<\n typeof useTransferHistoryHook\n>;\n","import { differenceInDays, setHours } from \"date-fns\";\n\nexport const parseDateRangeForFilter = (dateRange: {\n from: Date;\n to?: Date;\n}) => {\n const { from, to = new Date() } = dateRange;\n\n const diff = differenceInDays(from, to);\n\n if (diff === 0) {\n return [from, setHours(to, 23)];\n }\n\n return [from, to];\n};\n","import React from \"react\";\nimport type { API } from \"@orderly.network/types\";\nimport { DataFilter } from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { useColumns } from \"./column\";\nimport type { useVaultsHistoryHookReturn } from \"./useDataSource.script\";\n\ntype HistoryProps = useVaultsHistoryHookReturn;\n\nexport const VaultsHistoryUI: React.FC<Readonly<HistoryProps>> = (props) => {\n const { dataSource, dateRange, isLoading, onFilter } = props;\n\n const columns = useColumns();\n\n return (\n <>\n <DataFilter\n onFilter={onFilter}\n items={[\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n />\n <AuthGuardDataTable<API.StrategyVaultHistoryRow>\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n className=\"oui-font-semibold\"\n classNames={{ root: \"oui-h-[calc(100%_-_49px)]\" }}\n pagination={props.pagination}\n generatedRowKey={(row) => row.id}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport type { API } from \"@orderly.network/types\";\nimport { Flex, TokenIcon, Text, cn } from \"@orderly.network/ui\";\nimport type { Column } from \"@orderly.network/ui\";\nimport { capitalizeString } from \"@orderly.network/utils\";\n\nexport const useColumns = () => {\n const { t } = useTranslation();\n const columns = React.useMemo<Column<API.StrategyVaultHistoryRow>[]>(() => {\n return [\n {\n title: t(\"common.type\"),\n dataIndex: \"type\",\n className: (record) => {\n if (record?.type === \"deposit\") {\n return \"oui-text-success\";\n }\n if (record?.type === \"withdrawal\") {\n return \"oui-text-danger\";\n }\n return \"\";\n },\n render(val: string) {\n if (val === \"deposit\") {\n return t(\"common.deposit\");\n }\n if (val === \"withdrawal\") {\n return t(\"common.withdraw\");\n }\n return null;\n },\n },\n {\n title: t(\"portfolio.overview.vaultName\"),\n dataIndex: \"vaultName\",\n },\n {\n title: t(\"common.token\"),\n dataIndex: \"token\",\n render(val: string) {\n return (\n <Flex justify=\"start\" itemAlign=\"center\" gap={2}>\n <TokenIcon name={val} />\n {val}\n </Flex>\n );\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"created_time\",\n rule: \"date\",\n },\n {\n title: t(\"common.status\"),\n dataIndex: \"status\",\n render(val: string) {\n return capitalizeString(val);\n },\n },\n {\n title: t(\"common.amount\"),\n dataIndex: \"amount_change\",\n render(val: number) {\n return (\n <Text.numeral\n showIdentifier\n className={cn(\n \"oui-select-none\",\n val >= 0 ? \"oui-text-success\" : \"oui-text-danger\",\n )}\n >\n {val}\n </Text.numeral>\n );\n },\n },\n ];\n }, [t]);\n return columns;\n};\n","import React from \"react\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\nimport { useVaultsHistory } from \"@orderly.network/hooks\";\nimport type { API } from \"@orderly.network/types\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport type { PaginationMeta } from \"@orderly.network/ui\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\n\nexport const useVaultsHistoryHook = () => {\n const today = React.useMemo<Date>(() => {\n const date = new Date();\n return new Date(getYear(date), getMonth(date), getDate(date), 0, 0, 0);\n }, []);\n\n const [dateRange, setDateRange] = React.useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const [data, { isLoading, meta }] = useVaultsHistory({\n dataRange: [\n dateRange[0]?.getTime(),\n set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n })?.getTime(),\n ],\n size: pageSize,\n page: page,\n });\n\n const dataSource = React.useMemo(() => {\n if (!Array.isArray(data) || !data.length) {\n return [];\n }\n return data.map<API.StrategyVaultHistoryRow>((item) => ({\n ...item,\n token: \"USDC\", // need to hard code for now\n vaultName: \"Orderly OmniVault\",\n amount_change:\n item.type === \"withdrawal\" ? -item.amount_change : item.amount_change,\n }));\n }, [data]);\n\n const onDateRangeFilter = React.useCallback(\n (filter: { value: string; name: string }) => {\n if (filter.name === \"dateRange\") {\n setDateRange(parseDateRangeForFilter(filter.value as any));\n }\n setPage(1);\n },\n [setPage],\n );\n\n const pagination = React.useMemo<PaginationMeta>(\n () => parsePagination(meta),\n [parsePagination, meta],\n );\n\n return {\n dataSource: dataSource,\n isLoading,\n dateRange,\n onFilter: onDateRangeFilter,\n pagination,\n } as const;\n};\n\nexport type useVaultsHistoryHookReturn = ReturnType<\n typeof useVaultsHistoryHook\n>;\n","import React from \"react\";\nimport { VaultsHistoryUI } from \"./transfer.ui\";\nimport { useVaultsHistoryHook } from \"./useDataSource.script\";\n\nexport const VaultsHistoryWidget: React.FC = () => {\n const state = useVaultsHistoryHook();\n return <VaultsHistoryUI {...state} />;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AssetHistoryStatusEnum } from \"@orderly.network/types\";\nimport {\n capitalizeFirstLetter,\n Text,\n Flex,\n TokenIcon,\n toast,\n type Column,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\ntype Options = {\n chainsInfo: any[];\n isDeposit: boolean;\n isWeb3Wallet: boolean;\n};\n\nexport const useAssetHistoryColumns = (options: Options) => {\n const { chainsInfo, isDeposit, isWeb3Wallet } = options;\n const { t } = useTranslation();\n\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n\n const columns = useMemo<Column[]>(() => {\n const txIdColumn: Column = {\n title: t(\"common.txId\"),\n dataIndex: \"tx_id\",\n width: 120,\n render: (value, record) => {\n if (!value) {\n return <div className=\"oui-text-base-contrast-54\">-</div>;\n }\n const chainInfo = chainsInfo?.find(\n (item) => parseInt(record.chain_id) === parseInt(item.chain_id),\n );\n const explorer_base_url = chainInfo?.explorer_base_url;\n const href = `${explorer_base_url}/tx/${value}`;\n return (\n <a href={href} target=\"_blank\" rel=\"noreferrer\">\n {/* <Tooltip content={value} delayDuration={0}> */}\n <Text.formatted\n copyable={!!value}\n rule=\"txId\"\n className=\"oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\"\n onCopy={onCopy}\n >\n {value}\n </Text.formatted>\n {/* </Tooltip> */}\n </a>\n );\n },\n };\n\n const accountIdColumn: Column = {\n title: t(\"common.accountId\"),\n dataIndex: \"account_id\",\n width: 120,\n render: (value, record) => {\n const accountId = isDeposit\n ? record.from_account_id\n : record.to_account_id;\n\n return (\n <Text.formatted rule=\"address\" copyable={!!accountId} onCopy={onCopy}>\n {accountId}\n </Text.formatted>\n );\n },\n };\n\n return [\n {\n title: t(\"common.token\"),\n dataIndex: \"token\",\n width: 80,\n render: (value) => {\n return (\n <Flex gapX={1}>\n <TokenIcon name={value} size=\"xs\" />\n <span>{value}</span>\n </Flex>\n );\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"created_time\",\n width: 80,\n rule: \"date\",\n },\n isWeb3Wallet ? txIdColumn : accountIdColumn,\n {\n title: t(\"common.status\"),\n dataIndex: \"trans_status\",\n width: 100,\n render: (value, recoed) => {\n value = isWeb3Wallet ? value : recoed.status;\n const statusMap = {\n [AssetHistoryStatusEnum.NEW]: t(\"assetHistory.status.pending\"),\n [AssetHistoryStatusEnum.PENDING]: t(\"assetHistory.status.pending\"),\n [AssetHistoryStatusEnum.CONFIRM]: t(\"assetHistory.status.confirm\"),\n [AssetHistoryStatusEnum.PROCESSING]: t(\n \"assetHistory.status.processing\",\n ),\n [AssetHistoryStatusEnum.COMPLETED]: t(\n \"assetHistory.status.completed\",\n ),\n [AssetHistoryStatusEnum.FAILED]: t(\"assetHistory.status.failed\"),\n };\n return (\n statusMap[value as keyof typeof statusMap] ||\n capitalizeFirstLetter(value?.toLowerCase())\n );\n },\n },\n {\n title: t(\"common.amount\"),\n dataIndex: \"amount\",\n width: 100,\n rule: \"price\",\n render: (value, record) => {\n const netAmount = new Decimal(value).minus(record.fee ?? 0);\n return (\n <Text.numeral\n dp={record.decimals}\n rule=\"price\"\n coloring\n showIdentifier\n padding={false}\n >\n {isDeposit ? netAmount.toNumber() : netAmount.neg().toNumber()}\n </Text.numeral>\n );\n },\n },\n ];\n }, [t, chainsInfo, isDeposit, isWeb3Wallet]);\n\n return columns;\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\nimport {\n useAssetsHistory,\n useQuery,\n useTokensInfo,\n useTransferHistory,\n} from \"@orderly.network/hooks\";\nimport { AssetHistorySideEnum } from \"@orderly.network/types\";\nimport { modal, usePagination } from \"@orderly.network/ui\";\nimport { DepositAndWithdrawWithSheetId } from \"@orderly.network/ui-transfer\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\n\nexport enum AssetTarget {\n Web3Wallet = \"Web3Wallet\",\n AccountId = \"AccountId\",\n}\n\nexport type AssetHistoryScriptOptions = {\n side: AssetHistorySideEnum;\n};\n\nexport type AssetHistoryScriptReturn = ReturnType<typeof useAssetHistoryScript>;\n\nexport const useAssetHistoryScript = (options: AssetHistoryScriptOptions) => {\n const { side } = options;\n const isDeposit = side === AssetHistorySideEnum.DEPOSIT;\n\n const [today] = useState(() => {\n const d = new Date();\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const tokensInfo = useTokensInfo();\n\n const [target, setTarget] = useState<AssetTarget>(AssetTarget.Web3Wallet);\n\n const [dateRange, setDateRange] = useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const { startTime, endTime } = useMemo(() => {\n const startTime = dateRange[0].getTime();\n const endTime = set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n }).getTime();\n\n return { startTime, endTime };\n }, [dateRange]);\n\n const [assetData, { meta: assetMeta, isLoading: assetLoading }] =\n useAssetsHistory(\n {\n startTime,\n endTime,\n page,\n pageSize,\n side,\n },\n {\n shouldUpdateOnWalletChanged: (data) => data.side === side,\n },\n );\n\n const [transferData, { isLoading: transferLoading, meta: transferMeta }] =\n useTransferHistory({\n dataRange: [startTime, endTime],\n side: isDeposit ? \"IN\" : \"OUT\",\n size: pageSize,\n page: page,\n main_sub_only: false,\n });\n\n const { data: chainsInfo } = useQuery(\"/v1/public/chain_info\", {\n revalidateOnFocus: false,\n });\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"dateRange\") {\n setDateRange(parseDateRangeForFilter(filter.value));\n setPage(1);\n } else if (filter.name === \"target\") {\n setTarget(filter.value);\n setPage(1);\n }\n };\n\n const isLoading = useMemo(() => {\n if (target === AssetTarget.Web3Wallet) {\n return assetLoading;\n }\n return transferLoading;\n }, [target, assetLoading, transferLoading]);\n\n const meta = useMemo(() => {\n if (target === AssetTarget.Web3Wallet) {\n return assetMeta;\n }\n return transferMeta;\n }, [target, assetMeta, transferMeta]);\n\n const pagination = useMemo(\n () => parsePagination(meta),\n [parsePagination, meta],\n );\n\n const dataSource = useMemo(() => {\n return (target === AssetTarget.Web3Wallet ? assetData : transferData).map(\n (item) => {\n const findToken = tokensInfo?.find(({ token }) => token === item.token);\n return {\n ...item,\n decimals: findToken?.decimals ?? 2,\n };\n },\n );\n }, [target, assetData, transferData, tokensInfo]);\n\n const onDeposit = useCallback(() => {\n modal.show(DepositAndWithdrawWithSheetId, { activeTab: \"deposit\" });\n }, []);\n\n const isWeb3Wallet = target === AssetTarget.Web3Wallet;\n\n return {\n dataSource,\n total: meta?.total,\n isLoading,\n queryParameter: {\n target,\n dateRange,\n },\n onFilter,\n pagination,\n onDeposit,\n chainsInfo: chainsInfo as any[],\n isDeposit,\n isWeb3Wallet,\n };\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { DataFilter } from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport {\n AssetTarget,\n type AssetHistoryScriptReturn,\n} from \"./assetHistory.script\";\nimport { useAssetHistoryColumns } from \"./column\";\n\ntype AssetHistoryProps = AssetHistoryScriptReturn;\n\nexport const AssetHistory: FC<AssetHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading } = props;\n const { dateRange, target } = queryParameter;\n const columns = useAssetHistoryColumns({\n chainsInfo: props.chainsInfo,\n isDeposit: props.isDeposit,\n isWeb3Wallet: props.isWeb3Wallet,\n });\n const { t } = useTranslation();\n\n const options = useMemo(() => {\n return [\n { label: t(\"common.web3Wallet\"), value: AssetTarget.Web3Wallet },\n { label: t(\"common.accountId\"), value: AssetTarget.AccountId },\n ];\n }, [t]);\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"target\",\n options: options,\n value: target,\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n />\n\n <AuthGuardDataTable\n bordered\n loading={isLoading}\n classNames={{\n root: \"oui-h-[calc(100%_-_49px)]\",\n scroll: \"oui-min-h-[400px]\",\n }}\n columns={columns}\n dataSource={dataSource}\n pagination={props.pagination}\n />\n </>\n );\n};\n","import { AssetHistorySideEnum } from \"@orderly.network/types\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { useAssetHistoryScript } from \"./assetHistory.script\";\nimport { AssetHistory } from \"./assetHistory.ui\";\nimport { AssetHistoryMobile } from \"./assetHistory.ui.mobile\";\n\ntype AssetHistoryWidgetProps = {\n side: AssetHistorySideEnum;\n};\n\nexport const AssetHistoryWidget = (props: AssetHistoryWidgetProps) => {\n const state = useAssetHistoryScript({ side: props.side });\n\n const { isMobile } = useScreen();\n if (isMobile) {\n return <AssetHistoryMobile {...state} />;\n }\n return <AssetHistory {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AssetHistoryStatusEnum } from \"@orderly.network/types\";\nimport {\n Badge,\n DataFilter,\n Flex,\n ListView,\n Text,\n capitalizeFirstLetter,\n toast,\n ArrowRightShortIcon,\n EmptyDataState,\n} from \"@orderly.network/ui\";\nimport {\n AssetTarget,\n type AssetHistoryScriptReturn,\n} from \"./assetHistory.script\";\n\ntype AssetHistoryMobileProps = AssetHistoryScriptReturn;\n\nexport const AssetHistoryMobile: FC<AssetHistoryMobileProps> = (props) => {\n const {\n dataSource,\n queryParameter,\n onFilter,\n isLoading,\n pagination,\n onDeposit,\n chainsInfo,\n isDeposit,\n isWeb3Wallet,\n } = props;\n const { dateRange, target } = queryParameter;\n const { t } = useTranslation();\n\n const options = useMemo(() => {\n return [\n { label: t(\"common.web3Wallet\"), value: AssetTarget.Web3Wallet },\n { label: t(\"common.accountId\"), value: AssetTarget.AccountId },\n ];\n }, [t]);\n\n const loadMore = () => {\n if (dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange?.(pagination?.pageSize + 50);\n }\n };\n\n const getStatusText = (item: any) => {\n const status = props.isWeb3Wallet ? item.trans_status : item.status;\n const statusMap = {\n [AssetHistoryStatusEnum.NEW]: t(\"assetHistory.status.pending\"),\n [AssetHistoryStatusEnum.PENDING]: t(\"assetHistory.status.pending\"),\n [AssetHistoryStatusEnum.CONFIRM]: t(\"assetHistory.status.confirm\"),\n [AssetHistoryStatusEnum.PROCESSING]: t(\"assetHistory.status.processing\"),\n [AssetHistoryStatusEnum.COMPLETED]: t(\"assetHistory.status.completed\"),\n [AssetHistoryStatusEnum.FAILED]: t(\"assetHistory.status.failed\"),\n };\n return (\n statusMap[status as keyof typeof statusMap] ||\n capitalizeFirstLetter(status?.toLowerCase())\n );\n };\n\n const renderHistoryItem = (item: any) => {\n // Amount formatting\n const formattedAmount = isDeposit\n ? `+${item.amount - (item.fee ?? 0)}`\n : -(item.amount - (item.fee ?? 0));\n\n // Get tx link\n const getTxLink = () => {\n if (!item.tx_id) return undefined;\n\n const chainInfo =\n chainsInfo && Array.isArray(chainsInfo)\n ? chainsInfo.find(\n (chain: any) =>\n parseInt(item.chain_id) === parseInt(chain.chain_id),\n )\n : undefined;\n\n if (chainInfo?.explorer_base_url) {\n return `${chainInfo.explorer_base_url}/tx/${item.tx_id}`;\n }\n\n return undefined;\n };\n\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n\n const itemColor = isDeposit ? \"buy\" : \"sell\";\n\n const amountView = (\n <Flex className=\"oui-text-xs\">\n <Text color={itemColor}>{formattedAmount}</Text>\n <Text className=\"oui-ml-1\" intensity={80}>\n {item.token}\n </Text>\n {isWeb3Wallet && (\n <Badge color={itemColor} className=\"oui-ml-2\">\n {isDeposit ? t(\"common.deposit\") : t(\"common.withdraw\")}\n </Badge>\n )}\n </Flex>\n );\n\n const statusView = (\n <Text intensity={isWeb3Wallet ? 80 : 36} size=\"xs\">\n {getStatusText(item)}\n </Text>\n );\n\n const timeView = (\n <Text.formatted rule=\"date\" intensity={36} size=\"2xs\">\n {item.created_time}\n </Text.formatted>\n );\n\n const txIdView = item.tx_id ? (\n <a href={getTxLink()} target=\"_blank\" rel=\"noreferrer\">\n <Text.formatted\n copyable={!!item.tx_id}\n className=\"oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\"\n rule=\"txId\"\n onCopy={onCopy}\n intensity={36}\n size=\"xs\"\n >\n {item.tx_id}\n </Text.formatted>\n </a>\n ) : (\n <Text intensity={54}>-</Text>\n );\n\n const accountId = isDeposit ? item.from_account_id : item.to_account_id;\n\n const accountIdView = (\n <Flex gapX={1}>\n <Text intensity={36} size=\"xs\">\n {isDeposit\n ? t(\"transfer.internalTransfer.from\")\n : t(\"transfer.internalTransfer.to\")}\n </Text>\n <Text.formatted\n rule=\"address\"\n copyable={!!accountId}\n onCopy={onCopy}\n intensity={80}\n size=\"xs\"\n >\n {accountId}\n </Text.formatted>\n </Flex>\n );\n\n return (\n <Flex\n p={2}\n direction=\"column\"\n gapY={1}\n intensity={900}\n r=\"xl\"\n className=\"oui-font-semibold\"\n >\n <Flex justify=\"between\" width=\"100%\" height=\"18px\">\n {isWeb3Wallet ? (\n <>\n {amountView}\n {statusView}\n </>\n ) : (\n <>\n {accountIdView}\n {amountView}\n </>\n )}\n </Flex>\n\n <Flex justify=\"between\" width=\"100%\" height=\"18px\">\n {timeView}\n {isWeb3Wallet ? txIdView : statusView}\n </Flex>\n </Flex>\n );\n };\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"picker\",\n name: \"target\",\n options: options,\n value: target,\n size: \"md\",\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n className=\"oui-sticky oui-top-[44px] oui-z-10 oui-border-none oui-bg-base-10 oui-px-3 oui-py-2\"\n />\n\n <ListView\n dataSource={dataSource}\n renderItem={renderHistoryItem}\n contentClassName=\"!oui-space-y-1\"\n loadMore={loadMore}\n isLoading={isLoading}\n className=\"oui-px-1\"\n emptyView={\n <Flex\n direction={\"column\"}\n height={\"100%\"}\n itemAlign={\"center\"}\n justify={\"center\"}\n mt={3}\n >\n <EmptyDataState />\n {dataSource?.length == 0 && (\n <Flex\n direction=\"row\"\n itemAlign=\"center\"\n justify=\"center\"\n onClick={onDeposit}\n className=\"oui-mt-2 oui-h-4 oui-w-full oui-text-secondary\"\n >\n <Text color=\"primary\" size=\"2xs\">\n {t(\"common.deposit\")}\n </Text>\n <ArrowRightShortIcon\n className=\"oui-ml-0.5 oui-size-4 oui-text-primary oui-opacity-100\"\n color=\"primary\"\n size={16}\n opacity={100}\n />\n </Flex>\n )}\n </Flex>\n }\n />\n </>\n );\n};\n","import React from \"react\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { DistributionHistoryDesktop } from \"./distribution.ui\";\nimport { DistributionHistoryMobile } from \"./distribution.ui.mobile\";\nimport { useDistributionHistoryHook } from \"./useDataSource.script\";\n\nexport const DistributionHistoryWidget: React.FC = () => {\n const state = useDistributionHistoryHook();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <DistributionHistoryMobile {...state} />;\n }\n return <DistributionHistoryDesktop {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { DataFilter } from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { useColumns } from \"./column\";\nimport { type useDistributionHistoryHookReturn } from \"./useDataSource.script\";\n\ntype FundingHistoryProps = {} & useDistributionHistoryHookReturn;\n\nexport const DistributionHistoryDesktop: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading, isValidating } =\n props;\n const columns = useColumns();\n const { type, dateRange } = queryParameter;\n const { t } = useTranslation();\n\n const TYPES = useMemo(() => {\n return [\n { label: t(\"common.all\"), value: \"All\" },\n {\n label: t(\"portfolio.overview.distribution.type.referralCommission\"),\n value: \"REFERRER_REBATE\",\n },\n {\n label: t(\"portfolio.overview.distribution.type.refereeRebate\"),\n value: \"REFEREE_REBATE\",\n },\n {\n label: t(\"portfolio.overview.distribution.type.brokerFee\"),\n value: \"BROKER_FEE\",\n },\n ];\n }, [t]);\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"type\",\n options: TYPES,\n value: type,\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n />\n <AuthGuardDataTable\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n // isValidating={isValidating}\n className=\"oui-font-semibold\"\n classNames={{\n root: \"oui-h-[calc(100%_-_49px)]\",\n }}\n pagination={props.pagination}\n />\n </>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTranslation, i18n } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, type Column, TokenIcon } from \"@orderly.network/ui\";\n\nexport const useColumns = () => {\n const { t } = useTranslation();\n\n const columns = useMemo(() => {\n return [\n {\n title: t(\"common.token\"),\n dataIndex: \"token\",\n width: 80,\n // rule: \"symbol\",\n render: (value, record) => {\n return (\n <Flex gapX={2}>\n <TokenIcon name={value} size=\"xs\" />\n <span>{value}</span>\n </Flex>\n );\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"updated_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: t(\"common.status\"),\n dataIndex: \"status\",\n width: 120,\n formatter(value, record, index) {\n switch (value) {\n case \"CREATED\":\n case \"SPLIT\":\n return t(\"assetHistory.status.processing\");\n case \"COMPLETED\":\n default:\n return t(\"assetHistory.status.completed\");\n }\n },\n },\n\n {\n title: t(\"common.type\"),\n dataIndex: \"type\",\n width: 80,\n formatter: (value: any) => {\n switch (value) {\n case \"REFERRER_REBATE\":\n return t(\n \"portfolio.overview.distribution.type.referralCommission\",\n );\n case \"REFEREE_REBATE\":\n return t(\"portfolio.overview.distribution.type.refereeRebate\");\n case \"BROKER_FEE\":\n return t(\"portfolio.overview.distribution.type.brokerFee\");\n default:\n return \"-\";\n }\n },\n },\n {\n title: t(\"common.amount\"),\n dataIndex: \"amount\",\n width: 80,\n // rule: \"price\",\n },\n ] as Column<API.FundingFeeRow & { annual_rate: number }>[];\n }, [t]);\n\n return columns;\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { DataFilter, Flex, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { ListView } from \"@orderly.network/ui\";\nimport { type useDistributionHistoryHookReturn } from \"./useDataSource.script\";\n\ntype FundingHistoryProps = {} & useDistributionHistoryHookReturn;\n\nexport const DistributionHistoryMobile: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading, pagination } = props;\n const { type, dateRange } = queryParameter;\n const { t } = useTranslation();\n\n const TYPES = useMemo(() => {\n return [\n { label: t(\"common.all\"), value: \"All\" },\n {\n label: t(\"portfolio.overview.distribution.type.referralCommission\"),\n value: \"REFERRER_REBATE\",\n },\n {\n label: t(\"portfolio.overview.distribution.type.refereeRebate\"),\n value: \"REFEREE_REBATE\",\n },\n {\n label: t(\"portfolio.overview.distribution.type.brokerFee\"),\n value: \"BROKER_FEE\",\n },\n ];\n }, [t]);\n\n const getStatusText = (status: string) => {\n switch (status) {\n case \"CREATED\":\n case \"SPLIT\":\n return t(\"assetHistory.status.processing\") as string;\n case \"COMPLETED\":\n default:\n return t(\"assetHistory.status.completed\") as string;\n }\n };\n\n const getTypeText = (type: string) => {\n switch (type) {\n case \"REFERRER_REBATE\":\n return t(\"portfolio.overview.distribution.type.referralCommission\");\n case \"REFEREE_REBATE\":\n return t(\"portfolio.overview.distribution.type.refereeRebate\");\n case \"BROKER_FEE\":\n return t(\"portfolio.overview.distribution.type.brokerFee\");\n default:\n return \"-\";\n }\n };\n\n const renderItem = (item: any) => {\n return (\n <Flex\n p={2}\n direction=\"column\"\n gapY={2}\n className=\"oui-rounded-xl oui-bg-base-9 oui-font-semibold\"\n >\n <Flex direction=\"row\" justify=\"between\" width=\"100%\" height=\"20px\">\n <Text.formatted\n rule=\"date\"\n className=\"oui-text-2xs oui-text-base-contrast-36\"\n >\n {item.created_time}\n </Text.formatted>\n <Text className=\"oui-text-sm oui-text-base-contrast-80\">\n {getStatusText(item.status)}\n </Text>\n </Flex>\n <div className=\"oui-h-px oui-w-full oui-bg-base-6\" />\n <Flex direction=\"row\" justify=\"between\" width=\"100%\">\n <Flex direction=\"column\">\n <Text className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"common.token\")}\n </Text>\n <Flex gapX={2}>\n <TokenIcon name={item.token} size=\"xs\" />\n <span className=\"oui-text-xs oui-text-base-contrast-80\">\n {item.token}\n </span>\n </Flex>\n </Flex>\n <Flex direction=\"column\">\n <Text className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"common.type\")}\n </Text>\n <Text className=\"oui-text-xs oui-text-base-contrast-80\">\n {getTypeText(item.type)}\n </Text>\n </Flex>\n <Flex direction=\"column\">\n <Text className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"common.amount\")}\n </Text>\n <Text className=\"oui-text-xs oui-text-base-contrast-80\">\n {item.amount}\n </Text>\n </Flex>\n </Flex>\n </Flex>\n );\n };\n\n const loadMore = () => {\n if (dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange &&\n pagination.onPageSizeChange(pagination?.pageSize + 50);\n }\n };\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"picker\",\n name: \"type\",\n options: TYPES,\n value: type,\n size: \"md\",\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n className=\"oui-px-3 oui-py-2 oui-sticky oui-top-[44px] oui-z-10 oui-bg-base-10\"\n />\n <ListView\n dataSource={dataSource}\n renderItem={renderItem}\n contentClassName=\"oui-space-y-1\"\n loadMore={loadMore}\n isLoading={isLoading}\n className=\"oui-px-1\"\n />\n </>\n );\n};\n","import { useDistributionHistory } from \"@orderly.network/hooks\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { useMemo, useState } from \"react\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\n\nexport const useDistributionHistoryHook = () => {\n // const today = useRef(setMinutes(setHours(new Date(), 23), 59));\n\n const [today] = useState(() => {\n const d = new Date();\n\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const [dateRange, setDateRange] = useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n const [type, setType] = useState<string>(\"All\");\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const [data, { isLoading, meta, isValidating }] = useDistributionHistory({\n // dataRange: dateRange.map((date) => date.getTime()),\n dataRange: [\n dateRange[0].getTime(),\n set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n }).getTime(),\n ],\n type,\n pageSize,\n page,\n });\n\n // console.log(\"----\", isLoading, isValidating);\n\n // const res = useQuery(\"v1/public/info/funding_period\");\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"type\") {\n setType(filter.value);\n setPage(1);\n }\n\n if (filter.name === \"dateRange\") {\n // setDateRange([filter.value.from, filter.value.to]);\n setDateRange(parseDateRangeForFilter(filter.value));\n setPage(1);\n }\n };\n\n const pagination = useMemo(\n () => parsePagination(meta),\n [parsePagination, meta]\n );\n\n return {\n dataSource: data,\n isLoading,\n isValidating,\n // onDateRangeChange,\n queryParameter: {\n type,\n dateRange,\n },\n onFilter,\n pagination,\n } as const;\n};\n\nexport type useDistributionHistoryHookReturn = ReturnType<\n typeof useDistributionHistoryHook\n>;\n","import { useScreen } from \"@orderly.network/ui\";\nimport { FundingHistoryDesktop } from \"./fundingHistory.ui\";\nimport { FundingHistoryMobile } from \"./fundingHistory.ui.mobile\";\nimport { useFundingHistoryHook } from \"./useDataSource.script\";\n\nexport const FundingHistoryWidget = () => {\n const state = useFundingHistoryHook();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <FundingHistoryMobile {...state} />;\n }\n return <FundingHistoryDesktop {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { DataFilter } from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { useFundingHistoryColumns } from \"./column\";\nimport { type UseFundingHistoryReturn } from \"./useDataSource.script\";\n\ntype FundingHistoryProps = {} & UseFundingHistoryReturn;\n\nexport const FundingHistoryDesktop: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading } = props;\n const columns = useFundingHistoryColumns();\n const symbols = useSymbolsInfo();\n const { symbol, dateRange } = queryParameter;\n const { t } = useTranslation();\n\n const options = useMemo(() => {\n return [\n {\n label: t(\"common.all\"),\n value: \"All\",\n },\n ...Object.keys(symbols).map((symbol) => {\n const s = symbol.split(\"_\")[1];\n return {\n label: s,\n value: symbol,\n };\n }),\n ];\n }, [t, symbols]);\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"symbol\",\n isCombine: true,\n options,\n value: symbol,\n valueFormatter: (value) => {\n const option = options.find((item) => item.value === value);\n return option?.label || value;\n },\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n />\n <AuthGuardDataTable\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n generatedRowKey={(record) => `${record.updated_time}`}\n classNames={{ root: \"oui-h-[calc(100%_-_49px)]\" }}\n pagination={props.pagination}\n />\n </>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, Text, type Column } from \"@orderly.network/ui\";\n\nexport const useFundingHistoryColumns = () => {\n const { t } = useTranslation();\n\n const columns = useMemo(() => {\n return [\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n width: 80,\n rule: \"symbol\",\n textProps: {\n showIcon: true,\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"created_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: `${t(\"funding.fundingRate\")} / ${t(\"funding.annualRate\")}`,\n dataIndex: \"funding_rate\",\n width: 80,\n render: (value: any, record) => {\n return (\n <Flex gap={1}>\n {/* <span>{`${record.funding_rate * 100}%`}</span> */}\n <Text.numeral rule={\"percentages\"} dp={6}>\n {record.funding_rate}\n </Text.numeral>\n <span>/</span>\n {/* <span>{`${record.annual_rate * 10}%`}</span> */}\n <Text.numeral rule={\"percentages\"} dp={6}>\n {record.annual_rate}\n </Text.numeral>\n </Flex>\n );\n },\n },\n {\n title: t(\"funding.paymentType\"),\n dataIndex: \"payment_type\",\n width: 80,\n render: (value: any) => {\n switch (value) {\n case \"Pay\":\n case \"Paid\":\n return t(\"funding.paymentType.paid\");\n case \"Receive\":\n case \"Received\":\n return t(\"funding.paymentType.received\");\n default:\n return value;\n }\n },\n },\n {\n title: `${t(\"funding.fundingFee\")} (USDC)`,\n dataIndex: \"funding_fee\",\n width: 80,\n rule: \"price\",\n formatter(value, record, index) {\n return Number(value) * -1;\n },\n numeralProps: {\n coloring: true,\n showIdentifier: true,\n ignoreDP: true,\n },\n },\n ] as Column<API.FundingFeeRow & { annual_rate: number }>[];\n }, [t]);\n\n return columns;\n};\n","import { FC } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { DataFilter, Flex, ListView, Text, Badge } from \"@orderly.network/ui\";\nimport { type UseFundingHistoryReturn } from \"./useDataSource.script\";\n\ntype FundingHistoryProps = {} & UseFundingHistoryReturn;\n\nexport const FundingHistoryMobile: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading, pagination } = props;\n const symbols = useSymbolsInfo();\n const { symbol, dateRange } = queryParameter;\n const { t } = useTranslation();\n\n const switchPaymentType = (paymentType: string) => {\n switch (paymentType) {\n case \"Pay\":\n case \"Paid\":\n return t(\"funding.paymentType.paid\");\n case \"Receive\":\n case \"Received\":\n return t(\"funding.paymentType.received\");\n default:\n return paymentType;\n }\n };\n\n const loadMore = () => {\n if (dataSource && dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange?.(pagination?.pageSize + 50);\n }\n };\n\n const renderHistoryItem = (item: any) => {\n return (\n <Flex\n p={2}\n direction=\"column\"\n gapY={2}\n className=\"oui-rounded-xl oui-bg-base-9 oui-font-semibold\"\n >\n <Flex direction=\"row\" justify=\"between\" width=\"100%\" height=\"20px\">\n <Text.formatted\n rule=\"symbol\"\n className=\"oui-text-base-contrast oui-mr-1 oui-text-sm\"\n >\n {item.symbol}\n </Text.formatted>\n <Badge color=\"neutral\" size=\"xs\">\n {switchPaymentType(item.payment_type)}\n </Badge>\n <Text.formatted\n rule=\"date\"\n className=\"oui-text-base-contrast-36 oui-text-2xs oui-ml-auto\"\n >\n {item.created_time}\n </Text.formatted>\n </Flex>\n <div className=\"oui-w-full oui-h-[1px] oui-bg-base-6\" />\n <Flex direction=\"row\" justify=\"between\" width=\"100%\">\n <Flex direction=\"column\">\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"funding.fundingRate\")}\n </Text>\n <Text.numeral\n rule={\"percentages\"}\n dp={6}\n className=\"oui-text-base-contrast-80 oui-text-xs\"\n >\n {item.funding_rate}\n </Text.numeral>\n </Flex>\n <Flex direction=\"column\">\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"funding.annualRate\")}\n </Text>\n <Text.numeral\n rule={\"percentages\"}\n dp={6}\n className=\"oui-text-base-contrast-80 oui-text-xs\"\n >\n {item.annual_rate}\n </Text.numeral>\n </Flex>\n <Flex direction=\"column\">\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"funding.fundingFee\")}{\" \"}\n <Text className=\"oui-text-base-contrast-20\">(USDC)</Text>\n </Text>\n <Text.numeral\n dp={6}\n ignoreDP={true}\n coloring={true}\n showIdentifier={true}\n className=\"oui-text-xs oui-self-end\"\n >\n {Number(item.funding_fee) * -1}\n </Text.numeral>\n </Flex>\n </Flex>\n </Flex>\n );\n };\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"symbol\",\n isCombine: true,\n options: [\n {\n label: \"All\",\n value: \"All\",\n },\n ...Object.keys(symbols).map((symbol) => {\n const s = symbol.split(\"_\")[1];\n return {\n label: s,\n value: symbol,\n };\n }),\n ],\n value: symbol,\n valueFormatter: (value) => {\n if (value === \"All\") {\n return \"All\";\n }\n return value.split(\"_\")[1];\n },\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n className=\"oui-px-3 oui-py-2 oui-sticky oui-top-[44px] oui-z-10 oui-bg-base-10\"\n />\n <ListView\n dataSource={dataSource}\n renderItem={renderHistoryItem}\n contentClassName=\"!oui-space-y-1\"\n loadMore={loadMore}\n isLoading={isLoading}\n className=\"oui-px-1\"\n />\n </>\n );\n};\n","import { useFundingFeeHistory } from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { useMemo, useState } from \"react\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\n\nexport const useFundingHistoryHook = () => {\n // const today = useRef(setMinutes(setHours(new Date(), 23), 59));\n\n const [today] = useState(() => {\n const d = new Date();\n\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const [dateRange, setDateRange] = useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n\n const [symbol, setSymbol] = useState<string>(\"All\");\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const [data, { isLoading, meta, isValidating }] = useFundingFeeHistory(\n {\n // dataRange: dateRange.map((date) => date.getTime()),\n dataRange: [\n dateRange[0].getTime(),\n set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n })\n // addDays(dateRange[1], 1)\n .getTime(),\n ],\n symbol,\n page,\n pageSize,\n },\n {\n keepPreviousData: true,\n }\n );\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"symbol\") {\n setSymbol(filter.value);\n setPage(1);\n }\n\n if (filter.name === \"dateRange\") {\n // setDateRange([filter.value.from, filter.value.to]);\n setDateRange(parseDateRangeForFilter(filter.value));\n setPage(1);\n }\n };\n\n const pagination = useMemo(\n () => parsePagination(meta),\n [parsePagination, meta]\n );\n\n return {\n dataSource: data,\n isLoading,\n isValidating,\n // onDateRangeChange,\n queryParameter: {\n symbol,\n dateRange,\n },\n onFilter,\n pagination,\n } as const;\n};\n\nexport type UseFundingHistoryReturn = ReturnType<typeof useFundingHistoryHook>;\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { AssetHistorySideEnum } from \"@orderly.network/types\";\nimport { TabPanel, Tabs } from \"@orderly.network/ui\";\nimport { ConvertHistoryWidget } from \"../../assets/convert.widget\";\nimport { AssetHistoryWidget } from \"../assetHistory\";\nimport { DistributionHistoryWidget } from \"../distribution\";\nimport { FundingHistoryWidget } from \"../funding\";\nimport { TabName } from \"./historyDataGroup.script\";\n\nexport const HistoryDataGroupMobile = (props: {\n active?: TabName;\n onTabChange: (tab: string) => void;\n}) => {\n const { active = \"deposit\", onTabChange } = props;\n const { t } = useTranslation();\n\n return (\n <Tabs\n value={active}\n onValueChange={onTabChange}\n variant=\"contained\"\n size=\"lg\"\n classNames={{\n tabsList: \"oui-px-3 oui-py-2\",\n scrollIndicator: \"oui-pr-3\",\n }}\n showScrollIndicator\n >\n <TabPanel title={t(\"common.deposits\")} value={\"deposit\"}>\n <AssetHistoryWidget side={AssetHistorySideEnum.DEPOSIT} />\n </TabPanel>\n <TabPanel title={t(\"common.withdrawals\")} value={\"withdraw\"}>\n <AssetHistoryWidget side={AssetHistorySideEnum.WITHDRAW} />\n </TabPanel>\n <TabPanel title={t(\"common.funding\")} value={\"funding\"}>\n <FundingHistoryWidget />\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.distribution\")}\n value={\"distribution\"}\n >\n <DistributionHistoryWidget />\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.tab.convert.history\")}\n value={\"convert\"}\n >\n <ConvertHistoryWidget />\n </TabPanel>\n </Tabs>\n );\n};\n","import { useScreen } from \"@orderly.network/ui\";\nimport { useConvertScript } from \"./convert.script\";\nimport { ConvertDesktopUI } from \"./convert.ui.desktop\";\nimport { ConvertMobileUI } from \"./convert.ui.mobile\";\n\nexport const ConvertHistoryWidget = () => {\n const convertState = useConvertScript();\n const { isMobile } = useScreen();\n\n if (isMobile) {\n return <ConvertMobileUI convertState={convertState} />;\n }\n\n return <ConvertDesktopUI convertState={convertState} />;\n};\n","import React, { useMemo, useState } from \"react\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\nimport {\n useAccount,\n useCollateral,\n useIndexPricesStream,\n useSubAccountQuery,\n useQuery,\n useTokensInfo,\n} from \"@orderly.network/hooks\";\nimport { EMPTY_LIST } from \"@orderly.network/types\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { useAccountsData } from \"../../hooks/useAccountsData\";\nimport { useAssetsAccountFilter } from \"../../hooks/useAssetsAccountFilter\";\nimport { parseDateRangeForFilter } from \"../overview/helper/date\";\nimport { ConvertRecord } from \"./type\";\n\nexport const useConvertScript = () => {\n const { isMainAccount, state } = useAccount();\n const { holding = [] } = useCollateral();\n const { data: indexPrices } = useIndexPricesStream();\n\n const { data: chainsInfo } = useQuery(\"/v1/public/chain_info\", {\n revalidateOnFocus: false,\n });\n\n // Pagination\n const { page, pageSize, setPage, parsePagination } = usePagination({\n page: 1,\n pageSize: 20,\n });\n\n // Use the same account data structure as assets\n const allAccounts = useAccountsData();\n\n const tokensInfo = useTokensInfo();\n\n // Use the same account filter logic as assets\n const { selectedAccount, onAccountFilter } =\n useAssetsAccountFilter(allAccounts);\n\n // Simple date range handling like other scripts\n const [today] = useState(() => {\n const d = new Date();\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const [dateRange, setDateRange] = useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n\n // Filter states (matching API fields)\n const [statusFilter, setStatusFilter] = useState<string>(\"all\");\n const [convertedAssetFilter, setConvertedAssetFilter] =\n useState<string>(\"all\");\n\n // Create asset options from holding data - similar to assets script\n const convertedAssetOptions = useMemo(() => {\n // Create options array\n const assetOptions =\n tokensInfo?.map((item: any) => ({\n value: item.token,\n label: item.token,\n })) || [];\n\n return [{ label: \"All assets\", value: \"all\" }, ...assetOptions];\n }, [tokensInfo]);\n\n // Handle all filters (including account filter and date range)\n const onFilter = React.useCallback(\n (filter: { name: string; value: string | { from: Date; to: Date } }) => {\n const { name, value } = filter;\n\n // Delegate account filter to the hook\n if (name === \"account\") {\n onAccountFilter(filter as { name: string; value: string });\n } else if (name === \"status\") {\n setStatusFilter(value as string);\n setPage(1); // Reset to first page when filter changes\n } else if (name === \"converted_asset\") {\n setConvertedAssetFilter(value as string);\n setPage(1);\n } else if (name === \"time\" || name === \"dateRange\") {\n setDateRange(\n parseDateRangeForFilter(value as { from: Date; to: Date }),\n );\n setPage(1);\n }\n },\n [onAccountFilter, setPage],\n );\n\n // Build query URL with parameters\n const queryUrl = React.useMemo(() => {\n const params = new URLSearchParams();\n\n // Add pagination parameters\n params.set(\"page\", page.toString());\n params.set(\"size\", pageSize.toString());\n\n // Add date range parameters\n if (dateRange[0]) {\n params.set(\"start_t\", dateRange[0].getTime().toString());\n }\n if (dateRange[1]) {\n params.set(\n \"end_t\",\n set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n })\n .getTime()\n .toString(),\n );\n }\n\n // Add filter parameters (only if not \"all\")\n if (statusFilter !== \"all\") {\n params.set(\"status\", statusFilter);\n }\n\n if (convertedAssetFilter !== \"all\") {\n params.set(\"converted_asset\", convertedAssetFilter);\n }\n\n return `/v1/asset/convert_history?${params.toString()}`;\n }, [page, pageSize, dateRange, statusFilter, convertedAssetFilter]);\n\n // Query convert history with all parameters\n const { data, isLoading } = useSubAccountQuery<{\n rows: ConvertRecord[];\n meta: {\n total: number;\n current_page: number;\n records_per_page: number;\n };\n }>(queryUrl, {\n accountId: isMainAccount ? state.mainAccountId : state.accountId,\n formatter: (data) => {\n return data;\n },\n });\n\n // Parse pagination from API response meta\n const pagination = useMemo(() => {\n if (data?.meta) {\n return parsePagination(data.meta);\n }\n return {\n page,\n pageSize,\n onPageChange: setPage,\n onPageSizeChange: (size: number) => {\n // Handle page size change if needed\n },\n };\n }, [data?.meta, parsePagination, page, pageSize, setPage]);\n\n // Calculate summary\n const summary = useMemo(() => {\n const dataRows = data?.rows || [];\n\n const totalConversions = dataRows.length;\n const totalUSDCReceived = dataRows.reduce(\n (sum, record) => sum + record.received_qty,\n 0,\n );\n const totalFees = dataRows.reduce(\n (sum, record) =>\n sum +\n record.details.reduce(\n (detailSum, detail) => detailSum + detail.haircut,\n 0,\n ),\n 0,\n );\n\n return {\n totalConversions,\n totalUSDCReceived,\n totalFees,\n };\n }, [data]);\n\n return {\n // Data\n dataSource: data?.rows || EMPTY_LIST,\n summary,\n pagination,\n\n // Filter state and handlers (compatible with assets)\n selectedAccount,\n onFilter,\n\n // Query parameters (consistent with other scripts)\n dateRange,\n\n // Filter states\n statusFilter,\n convertedAssetFilter,\n convertedAssetOptions,\n\n // State\n isMainAccount,\n isLoading,\n holding,\n\n // Index prices\n indexPrices,\n chainsInfo,\n };\n};\n\nexport type UseConvertScriptReturn = ReturnType<typeof useConvertScript>;\n","import { useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport { SubAccount, useAccount, useCollateral } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport type { API } from \"@orderly.network/types\";\n\nconst EMPTY_HOLDING: Partial<API.Holding> = {\n token: \"USDC\",\n holding: 0,\n frozen: 0,\n};\n\n// Account data structure used in assets display\nexport interface AccountWithChildren {\n account_id: string;\n id?: string;\n description?: string;\n children: Array<API.Holding & { account_id: string }>;\n}\n\n// Hook to transform raw account data into display format\nexport const useAccountsData = (): AccountWithChildren[] => {\n const { t } = useTranslation();\n const { state, isMainAccount } = useAccount();\n const { holding = [] } = useCollateral();\n const subAccounts = state.subAccounts ?? [];\n\n return useMemo(() => {\n return produce<any[]>(subAccounts, (draft) => {\n // Process sub accounts\n for (const sub of draft) {\n sub.account_id = sub.id;\n if (Array.isArray(sub.holding) && sub.holding.length) {\n sub.children = sub.holding.map((item: API.Holding) => ({\n ...item,\n account_id: sub.id,\n }));\n } else {\n sub.children = [{ ...EMPTY_HOLDING, account_id: sub.id }];\n }\n // Remove original holding to avoid confusion\n Reflect.deleteProperty(sub, \"holding\");\n }\n\n // Add main account at the beginning if user is main account\n if (isMainAccount) {\n draft.unshift({\n account_id: state.mainAccountId!,\n description: t(\"common.mainAccount\"),\n children:\n Array.isArray(holding) && holding.length\n ? holding.map((item: API.Holding) => ({\n ...item,\n account_id: state.mainAccountId!,\n }))\n : [\n {\n ...EMPTY_HOLDING,\n account_id: state.mainAccountId!,\n },\n ],\n });\n }\n });\n }, [holding, subAccounts, isMainAccount, state.mainAccountId, t]);\n};\n","import React, { useMemo } from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { AccountType } from \"../pages/assets/assets.ui\";\n\n// Account filter hook for assets-like data structures\nexport const useAssetsAccountFilter = <T extends { account_id?: string }>(\n data: T[],\n) => {\n const { state, isMainAccount } = useAccount();\n const [selectedAccount, setSelectedAccount] = React.useState<string>(\n AccountType.ALL,\n );\n\n // Filter data based on selected account\n const filteredData = useMemo(() => {\n return data.filter((item) => {\n if (isMainAccount) {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return item.account_id === state.mainAccountId;\n } else {\n return item.account_id === selectedAccount;\n }\n } else {\n return item.account_id === state.accountId;\n }\n });\n }, [data, selectedAccount, isMainAccount, state]);\n\n // Handle filter changes\n const onAccountFilter = React.useCallback(\n (filter: { name: string; value: string }) => {\n const { name, value } = filter;\n if (name === \"account\") {\n setSelectedAccount(value);\n }\n },\n [],\n );\n\n return {\n selectedAccount,\n filteredData,\n onAccountFilter,\n setSelectedAccount,\n };\n};\n\n// Enhanced account and asset combined filter hook\nexport const useAssetsMultiFilter = <\n T extends {\n account_id?: string;\n children?: Array<{ token: string; [key: string]: any }>;\n },\n>(\n data: T[],\n) => {\n const { state, isMainAccount } = useAccount();\n const [selectedAccount, setSelectedAccount] = React.useState<string>(\n AccountType.ALL,\n );\n const [selectedAsset, setSelectedAsset] = React.useState<string>(\"all\");\n\n // Filter data based on both account and asset\n const filteredData = useMemo(() => {\n let accountFiltered = data;\n\n // First apply account filter\n if (isMainAccount) {\n if (selectedAccount && selectedAccount !== AccountType.ALL) {\n if (selectedAccount === AccountType.MAIN) {\n accountFiltered = data.filter(\n (item) => item.account_id === state.mainAccountId,\n );\n } else {\n accountFiltered = data.filter(\n (item) => item.account_id === selectedAccount,\n );\n }\n }\n } else {\n accountFiltered = data.filter(\n (item) => item.account_id === state.accountId,\n );\n }\n\n // Then apply asset filter\n if (selectedAsset && selectedAsset !== \"all\") {\n accountFiltered = accountFiltered\n .map((account) => {\n if (account.children) {\n const filteredChildren = account.children.filter(\n (child) => child.token === selectedAsset,\n );\n // Only include accounts that have the selected asset\n return filteredChildren.length > 0\n ? { ...account, children: filteredChildren }\n : null;\n }\n return account;\n })\n .filter(Boolean) as T[];\n }\n\n return accountFiltered;\n }, [data, selectedAccount, selectedAsset, isMainAccount, state]);\n\n // Handle combined filter changes\n const onFilter = React.useCallback(\n (filter: { name: string; value: string }) => {\n const { name, value } = filter;\n if (name === \"account\") {\n setSelectedAccount(value);\n } else if (name === \"asset\") {\n setSelectedAsset(value);\n }\n },\n [],\n );\n\n return {\n selectedAccount,\n selectedAsset,\n filteredData,\n onFilter,\n setSelectedAccount,\n setSelectedAsset,\n };\n};\n\n// Generic account filter function that can be used standalone\nexport const filterByAccount = <T extends { account_id?: string }>(\n data: T[],\n selectedAccount: string,\n accountState: {\n isMainAccount: boolean;\n state: {\n mainAccountId?: string;\n accountId?: string;\n };\n },\n): T[] => {\n const { isMainAccount, state } = accountState;\n\n return data.filter((item) => {\n if (isMainAccount) {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return item.account_id === state.mainAccountId;\n } else {\n return item.account_id === selectedAccount;\n }\n } else {\n return item.account_id === state.accountId;\n }\n });\n};\n","import React, { useMemo } from \"react\";\nimport pick from \"ramda/es/pick\";\nimport { SubAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport {\n Text,\n Card,\n Flex,\n gradientTextVariants,\n EyeIcon,\n EyeCloseIcon,\n cn,\n DataFilter,\n formatAddress,\n Tabs,\n TabPanel,\n ArrowDownShortIcon,\n Button,\n} from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport type { SelectOption } from \"@orderly.network/ui/src/select/withOptions\";\nimport type { useAssetsScriptReturn } from \"./assets.script\";\nimport type { AssetsWidgetProps } from \"./assets.widget\";\nimport { ConvertHistoryWidget } from \"./convert.widget\";\n\nexport type AssetsProps = useAssetsScriptReturn;\n\nexport enum AccountType {\n ALL = \"All accounts\",\n MAIN = \"Main accounts\",\n}\n\nconst TotalValue: React.FC<\n Readonly<\n Pick<AssetsWidgetProps, \"totalValue\" | \"visible\" | \"onToggleVisibility\">\n >\n> = (props) => {\n const { totalValue, visible, onToggleVisibility } = props;\n const { t } = useTranslation();\n const Icon = visible ? EyeIcon : EyeCloseIcon;\n return (\n <Flex direction=\"column\" gap={1} className=\"oui-text-2xs\" itemAlign=\"start\">\n <Flex gap={1} justify=\"start\" itemAlign=\"center\">\n <Text size=\"2xs\" color=\"neutral\" weight=\"semibold\">\n {t(\"common.totalValue\")}\n </Text>\n <button onClick={onToggleVisibility}>\n <Icon size={18} className={cn(\"oui-text-base-contrast-54\")} />\n </button>\n </Flex>\n <Flex justify={\"start\"} itemAlign=\"end\" gap={1}>\n <Text.numeral\n visible={visible}\n weight=\"bold\"\n size=\"2xl\"\n className={gradientTextVariants({ color: \"brand\" })}\n as=\"div\"\n padding={false}\n dp={2}\n >\n {totalValue ?? \"--\"}\n </Text.numeral>\n <Text as=\"div\" weight=\"bold\">\n USDC\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst DepositAndWithdrawButton: React.FC<\n Readonly<\n Pick<AssetsWidgetProps, \"isMainAccount\" | \"onWithdraw\" | \"onDeposit\">\n >\n> = (props) => {\n const { t } = useTranslation();\n const { isMainAccount, onWithdraw, onDeposit } = props;\n const { wrongNetwork, disabledConnect } = useAppContext();\n if (!isMainAccount) {\n return null;\n }\n const mergedDisabled = wrongNetwork || disabledConnect;\n return (\n <Flex\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n itemAlign=\"center\"\n gap={3}\n >\n <Button\n disabled={mergedDisabled}\n data-testid=\"oui-testid-assetView-deposit-button\"\n fullWidth\n size=\"md\"\n onClick={onDeposit}\n >\n <ArrowDownShortIcon\n color=\"white\"\n opacity={mergedDisabled ? 0.4 : 1}\n className=\"oui-rotate-0\"\n />\n <Text>{t(\"common.deposit\")}</Text>\n </Button>\n <Button\n fullWidth\n disabled={mergedDisabled}\n color=\"secondary\"\n size=\"md\"\n onClick={onWithdraw}\n data-testid=\"oui-testid-assetView-withdraw-button\"\n >\n <ArrowDownShortIcon\n color=\"white\"\n opacity={mergedDisabled ? 0.4 : 1}\n className=\"oui-rotate-180\"\n />\n <Text>{t(\"common.withdraw\")}</Text>\n </Button>\n </Flex>\n );\n};\n\nexport const AssetsTable: React.FC<Readonly<AssetsWidgetProps>> = (props) => {\n const {\n state,\n isMainAccount,\n selectedAccount,\n selectedAsset,\n columns,\n dataSource,\n onFilter,\n assetsOptions,\n } = props;\n\n const { t } = useTranslation();\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const ALL_ASSETS: SelectOption = {\n label: t(\"common.allAssets\", \"All assets\"),\n value: \"all\",\n };\n\n const subAccounts = useMemo<SubAccount[]>(() => {\n return state.subAccounts ?? [];\n }, [state.subAccounts]);\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [ALL_ACCOUNTS, MAIN_ACCOUNT, subAccounts]);\n\n // Create asset options from holding data - optimized and simplified\n const memoizedAssetOptions = useMemo(() => {\n return [ALL_ASSETS, ...assetsOptions];\n }, [ALL_ASSETS, assetsOptions]);\n\n return (\n <Card\n className={\"oui-bg-transparent oui-p-0\"}\n classNames={{ content: \"!oui-pt-0\" }}\n >\n <Tabs\n defaultValue=\"assets\"\n variant=\"contained\"\n classNames={{ tabsList: \"\" }}\n size=\"lg\"\n >\n <TabPanel value=\"assets\" className=\"\" title={t(\"common.assets\")}>\n <Flex\n className=\"oui-rounded-xl oui-bg-base-9 oui-p-6\"\n direction={\"row\"}\n itemAlign={\"center\"}\n justify={\"between\"}\n my={4}\n >\n <TotalValue\n {...pick([\"totalValue\", \"visible\", \"onToggleVisibility\"], props)}\n />\n <DepositAndWithdrawButton\n {...pick([\"isMainAccount\", \"onDeposit\", \"onWithdraw\"], props)}\n />\n </Flex>\n {isMainAccount && (\n <DataFilter\n className=\"oui-border-none oui-py-0\"\n onFilter={onFilter}\n items={[\n {\n type: \"select\",\n name: \"account\",\n value: selectedAccount,\n options: memoizedOptions,\n },\n {\n type: \"select\",\n name: \"asset\",\n value: selectedAsset,\n options: memoizedAssetOptions,\n },\n ]}\n />\n )}\n {dataSource.map((item, index) => {\n return (\n <Flex\n key={`item-${index}`}\n className=\"oui-rounded-xl oui-bg-base-9 oui-p-6\"\n direction={\"column\"}\n itemAlign={\"start\"}\n justify={\"between\"}\n my={4}\n >\n <Text\n className=\"oui-mb-4\"\n intensity={98}\n weight=\"semibold\"\n size=\"lg\"\n >\n {item?.description || formatAddress(item?.id ?? \"\")}\n </Text>\n <AuthGuardDataTable\n bordered\n className=\"oui-font-semibold\"\n classNames={{\n root: \"oui-bg-transparent\",\n scroll: \"oui-min-h-0\",\n }}\n columns={columns}\n dataSource={item.children}\n />\n </Flex>\n );\n })}\n </TabPanel>\n <TabPanel\n className=\"oui-rounded-xl oui-bg-base-9 oui-px-6\"\n value=\"convertHistory\"\n title={t(\"portfolio.overview.tab.convert.history\")}\n >\n <ConvertHistoryWidget />\n </TabPanel>\n </Tabs>\n </Card>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n DataFilter,\n Flex,\n DataTable,\n modal,\n SimpleDialog,\n Divider,\n} from \"@orderly.network/ui\";\nimport { useModal } from \"@orderly.network/ui\";\nimport { useConvertColumns, useConvertDetailColumns } from \"./convert.column\";\nimport { useConvertScript } from \"./convert.script\";\nimport type { ConvertRecord } from \"./type\";\n\ntype ConvertDesktopUIProps = {\n convertState: ReturnType<typeof useConvertScript>;\n};\n\nexport const CONVERT_STATUS_OPTIONS = [\n {\n label: \"All status\",\n value: \"all\",\n },\n {\n label: \"Completed\",\n value: \"completed\",\n },\n {\n label: \"Pending\",\n value: \"pending\",\n },\n];\n\n// Convert Details Modal Component\nconst ConvertDetailsModal = modal.create<{\n record: ConvertRecord;\n indexPrices: Record<string, number>;\n chainsInfo: any[];\n}>((props) => {\n const { t } = useTranslation();\n const { visible, onOpenChange } = useModal();\n // console.log(props);\n\n const detailColumns = useConvertDetailColumns({\n indexPrices: props.indexPrices,\n chainsInfo: props.chainsInfo,\n });\n\n return (\n <SimpleDialog\n open={visible}\n onOpenChange={onOpenChange}\n title={t(\"portfolio.overview.convert.dialog.title.details\")}\n size=\"lg\"\n closable\n classNames={{\n content: \"oui-max-w-4xl\",\n }}\n >\n <DataTable\n columns={detailColumns}\n dataSource={props.record.details}\n bordered\n className=\"oui-w-full\"\n classNames={{\n header: \"oui-h-10\",\n root: \"oui-bg-base-8 oui-max-h-[60vh] oui-overflow-y-scroll\",\n }}\n onRow={() => ({\n className: \"oui-h-[40px]\",\n })}\n generatedRowKey={(record) =>\n record.transaction_id || Math.random().toString()\n }\n />\n </SimpleDialog>\n );\n});\n\nexport const ConvertDesktopUI: React.FC<ConvertDesktopUIProps> = ({\n convertState,\n}) => {\n const handleDetailsClick = (convertId: number) => {\n // Find the convert record by ID\n const record = convertState.dataSource.find(\n (item) => item.convert_id === convertId,\n );\n if (record) {\n modal.show(ConvertDetailsModal, {\n record,\n indexPrices: convertState.indexPrices,\n chainsInfo: convertState.chainsInfo as any,\n });\n }\n };\n\n const columns = useConvertColumns({\n onDetailsClick: handleDetailsClick,\n });\n\n const {\n convertedAssetFilter,\n statusFilter,\n dateRange,\n onFilter,\n convertedAssetOptions,\n } = convertState;\n\n const dataFilter = useMemo(() => {\n return (\n <DataFilter\n className=\"\"\n onFilter={onFilter}\n items={[\n // {\n // type: \"select\",\n // name: \"account\",\n // value: selectedAccount,\n // options: memoizedOptions,\n // },\n {\n type: \"select\",\n name: \"converted_asset\",\n value: convertedAssetFilter,\n options: convertedAssetOptions,\n },\n {\n type: \"select\",\n name: \"status\",\n value: statusFilter,\n options: CONVERT_STATUS_OPTIONS,\n },\n {\n type: \"range\",\n name: \"time\",\n value: {\n from: dateRange?.[0],\n to: dateRange?.[1],\n },\n },\n ]}\n />\n );\n }, [\n convertedAssetFilter,\n statusFilter,\n dateRange,\n onFilter,\n convertedAssetOptions,\n ]);\n\n return (\n <Flex direction=\"column\" mt={4} itemAlign=\"center\" className=\"oui-w-full\">\n <Divider className=\"oui-w-full oui-border-b oui-border-line-4 oui-pt-6\" />\n <Flex direction=\"row\" className=\"oui-w-full\">\n {dataFilter}\n </Flex>\n <DataTable\n columns={columns}\n dataSource={convertState.dataSource}\n loading={convertState.isLoading}\n bordered\n pagination={convertState.pagination}\n manualPagination\n className=\"oui-mt-4 oui-w-full\"\n classNames={{\n root: \"oui-h-[calc(100vh_-_200px)]\",\n header: \"oui-h-12\",\n }}\n onRow={() => ({\n className: \"oui-h-[48px] oui-cursor-pointer\",\n })}\n generatedRowKey={(record) => {\n return record.convert_id.toString();\n }}\n />\n </Flex>\n );\n};\n","import React, { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Button,\n Flex,\n Text,\n TokenIcon,\n Tooltip,\n toast,\n} from \"@orderly.network/ui\";\nimport type { Column } from \"@orderly.network/ui\";\nimport type { ConvertRecord, ConvertTransaction } from \"./type\";\n\nexport interface ConvertColumnsOptions {\n onDetailsClick?: (convertId: number) => void;\n}\n\nexport interface ConvertDetailColumnsOptions {\n onTxClick?: (txId: string) => void;\n indexPrices: Record<string, number>;\n chainsInfo: any[];\n}\n\nexport const ConvertedAssetColumn = ({\n convertedAssets,\n}: {\n convertedAssets: Record<string, number>;\n}) => {\n const { t } = useTranslation();\n const assets = useMemo(() => {\n return Object.keys(convertedAssets);\n }, [convertedAssets]);\n\n const tooltipContent = useMemo(() => {\n return (\n <Flex\n direction=\"column\"\n gap={2}\n className=\"oui-w-[275px] oui-font-semibold oui-text-base-contrast-80\"\n >\n <Flex\n itemAlign=\"center\"\n justify=\"between\"\n className=\"oui-w-full oui-text-2xs oui-text-base-contrast-36\"\n >\n <div>{t(\"common.assets\")}</div>\n <div>{t(\"common.qty\")}</div>\n </Flex>\n {assets.map((asset) => (\n <Flex\n key={asset}\n itemAlign=\"center\"\n justify=\"between\"\n className=\"oui-w-full\"\n >\n <Flex itemAlign=\"center\" gap={1}>\n <TokenIcon size=\"xs\" name={asset} />\n <Text.formatted>{asset}</Text.formatted>\n </Flex>\n <div>\n <Text.formatted>{convertedAssets[asset]}</Text.formatted>\n </div>\n </Flex>\n ))}\n </Flex>\n );\n }, [assets]);\n\n return (\n <Flex itemAlign=\"center\" gap={2}>\n <div className=\"oui-relative oui-flex\">\n {assets.slice(0, 3).map((asset, index) => (\n <div\n key={asset}\n className=\"oui-relative\"\n style={{\n marginLeft: index > 0 ? \"-8px\" : \"0\",\n zIndex: assets.length + index,\n }}\n >\n <TokenIcon size=\"xs\" name={asset} />\n </div>\n ))}\n </div>\n <Tooltip content={tooltipContent}>\n <Text.formatted className=\"oui-cursor-pointer oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\">\n {assets.slice(0, 3).join(\", \")}{\" \"}\n {assets.length > 3 && `+${assets.length - 3}`}\n </Text.formatted>\n </Tooltip>\n </Flex>\n );\n};\n\nexport const useConvertColumns = (options: ConvertColumnsOptions) => {\n const { onDetailsClick } = options;\n const { t } = useTranslation();\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n\n const columns = React.useMemo<Column[]>(() => {\n return [\n {\n title: t(\"portfolio.overview.column.convert.convertedAsset\"),\n dataIndex: \"converted_asset\",\n align: \"left\",\n width: 200,\n maxWidth: 200,\n render(convertedAssets: Record<string, number>) {\n return <ConvertedAssetColumn convertedAssets={convertedAssets} />;\n },\n },\n {\n title: t(\"portfolio.overview.column.convert.usdcAmount\"),\n dataIndex: \"received_qty\",\n align: \"left\",\n width: 150,\n render(qty: number, record: ConvertRecord) {\n return (\n <Text.numeral dp={6} padding={false}>\n {qty}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.fee\"),\n dataIndex: \"details\",\n align: \"left\",\n width: 120,\n render(details: ConvertRecord[\"details\"]) {\n const totalHaircut = details.reduce(\n (sum, detail) => sum + detail.haircut,\n 0,\n );\n return (\n <Text.numeral dp={6} padding={false}>\n {totalHaircut}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.type\"),\n dataIndex: \"type\",\n align: \"left\",\n width: 150,\n render(type: string) {\n return <Text>{type.charAt(0).toUpperCase() + type.slice(1)}</Text>;\n },\n },\n {\n title: t(\"portfolio.overview.column.convert.convertId\"),\n dataIndex: \"convert_id\",\n align: \"left\",\n width: 150,\n render(convertId: number) {\n return (\n <Text.formatted onCopy={onCopy} copyable>\n {convertId}\n </Text.formatted>\n );\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"created_time\",\n align: \"left\",\n width: 160,\n rule: \"date\",\n },\n {\n title: t(\"common.status\"),\n dataIndex: \"status\",\n align: \"left\",\n width: 150,\n render(status: string) {\n return (\n <Text>{status.charAt(0).toUpperCase() + status.slice(1)}</Text>\n );\n },\n },\n {\n title: \"\",\n dataIndex: \"updated_time\",\n align: \"center\",\n width: 80,\n render(convertId: number, record: ConvertRecord) {\n return (\n <Button\n size=\"sm\"\n variant=\"text\"\n className=\"oui-text-primary\"\n onClick={() => onDetailsClick?.(record.convert_id)}\n >\n {t(\"portfolio.overview.column.convert.details\")}\n </Button>\n );\n },\n },\n ];\n }, [onDetailsClick]);\n\n return columns;\n};\n\n// Converted asset, Qty., USDC amount, Fee, TxID, Network, Status\nexport const useConvertDetailColumns = (\n options: ConvertDetailColumnsOptions,\n) => {\n const { t } = useTranslation();\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n const columns = React.useMemo<Column[]>(() => {\n return [\n {\n title: t(\"portfolio.overview.column.convert.convertedAsset\"),\n dataIndex: \"converted_asset\",\n align: \"left\",\n width: 150,\n render(asset: string) {\n return (\n <Flex itemAlign=\"center\" gap={2}>\n <TokenIcon name={asset} />\n {asset}\n </Flex>\n );\n },\n },\n {\n title: t(\"common.qty\"),\n dataIndex: \"converted_qty\",\n align: \"left\",\n width: 100,\n render(qty: number, record: ConvertTransaction) {\n return (\n <Text.numeral dp={6} padding={false}>\n {qty}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.convert.usdcAmount\"),\n dataIndex: \"received_qty\",\n align: \"left\",\n width: 100,\n render(qty: number, record: ConvertTransaction) {\n return (\n <Text.numeral dp={6} padding={false}>\n {qty}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.fee\"),\n dataIndex: \"haircut\",\n align: \"left\",\n width: 100,\n render(haircut: number) {\n return (\n <Text.numeral dp={6} padding={false}>\n {haircut}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.txId\"),\n dataIndex: \"tx_id\",\n align: \"left\",\n width: 150,\n render(txId: string, record: ConvertTransaction) {\n if (!txId) return <Text intensity={54}>-</Text>;\n const chainInfo = (options.chainsInfo as any[])?.find(\n (item) => record.chain_id === parseInt(item.chain_id),\n );\n const explorer_base_url = chainInfo?.explorer_base_url;\n const href = `${explorer_base_url}/tx/${txId}`;\n return (\n <a href={href} target=\"_blank\" rel=\"noreferrer\">\n <Text.formatted\n onCopy={onCopy}\n rule=\"txId\"\n copyable={!!txId}\n className=\"oui-cursor-pointer oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\"\n >\n {txId}\n </Text.formatted>\n </a>\n );\n },\n },\n {\n title: t(\"transfer.network\"),\n dataIndex: \"chain_id\",\n align: \"left\",\n width: 150,\n render(venue: string, record: ConvertTransaction) {\n return (\n <Text>\n {options.chainsInfo.find(\n (item) => item.chain_id == record.chain_id,\n )?.name || \"-\"}\n </Text>\n );\n },\n },\n {\n title: t(\"common.result\"),\n dataIndex: \"result\",\n align: \"left\",\n width: 100,\n render(result: string) {\n return (\n <Text>{result?.charAt(0).toUpperCase() + result?.slice(1)}</Text>\n );\n },\n },\n ];\n }, []);\n\n return columns;\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n useModal,\n modal,\n Text,\n Divider,\n TokenIcon,\n Flex,\n DataFilter,\n SimpleSheet,\n toast,\n ScrollIndicator,\n} from \"@orderly.network/ui\";\nimport { ConvertedAssetColumn } from \"./convert.column\";\nimport { useConvertScript } from \"./convert.script\";\nimport { CONVERT_STATUS_OPTIONS } from \"./convert.ui.desktop\";\nimport { ConvertRecord, ConvertTransaction } from \"./type\";\n\ntype ConvertMobileUIProps = {\n convertState: ReturnType<typeof useConvertScript>;\n};\n\ntype ConvertMobileItemProps = {\n item?: any;\n chainsInfo: any[];\n};\n\ntype ConvertMobileFieldProps = {\n label: string;\n value?: string | number;\n className?: string;\n copyable?: boolean;\n rule?: \"address\" | \"txId\";\n onClick?: () => void;\n};\n\nexport const ConvertMobileUI: React.FC<ConvertMobileUIProps> = ({\n convertState,\n}) => {\n const { t } = useTranslation();\n\n const {\n convertedAssetFilter,\n statusFilter,\n dateRange,\n onFilter,\n convertedAssetOptions,\n } = convertState;\n\n const dataFilter = useMemo(() => {\n return (\n <DataFilter\n onFilter={onFilter}\n items={[\n // {\n // size: \"sm\",\n // type: \"picker\",\n // name: \"account\",\n // value: selectedAccount,\n // options: memoizedOptions,\n // },\n {\n size: \"md\",\n type: \"picker\",\n name: \"converted_asset\",\n value: convertedAssetFilter,\n options: convertedAssetOptions,\n className: \"oui-whitespace-nowrap\",\n },\n {\n size: \"md\",\n type: \"picker\",\n name: \"status\",\n value: statusFilter,\n options: CONVERT_STATUS_OPTIONS,\n className: \"oui-whitespace-nowrap\",\n },\n {\n type: \"range\",\n name: \"time\",\n value: {\n from: dateRange?.[0],\n to: dateRange?.[1],\n },\n },\n ]}\n />\n );\n }, [\n convertedAssetFilter,\n statusFilter,\n dateRange,\n onFilter,\n convertedAssetOptions,\n ]);\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1 oui-px-3\">\n <ScrollIndicator className=\"oui-pr-5\">\n <Flex direction=\"row\">{dataFilter}</Flex>\n </ScrollIndicator>\n {convertState.dataSource.map((item) => (\n <ConvertMobileItem\n key={item.convert_id}\n item={item}\n chainsInfo={convertState.chainsInfo as any}\n />\n ))}\n </div>\n );\n};\n\nconst ConvertMobileField: React.FC<ConvertMobileFieldProps> = ({\n label,\n value,\n rule,\n copyable = false,\n className = \"\",\n onClick,\n}) => {\n const { t } = useTranslation();\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n return (\n <div\n className={`oui-text-2xs oui-font-semibold oui-text-base-contrast-80 [&_p]:oui-text-base-contrast-36 ${className}`}\n onClick={onClick}\n >\n <p>{label}</p>\n <Text.formatted rule={rule} copyable={copyable} onCopy={onCopy}>\n {value || \"-\"}\n </Text.formatted>\n </div>\n );\n};\n\nconst ConvertMobileItem: React.FC<ConvertMobileItemProps> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n if (!item) {\n return null;\n }\n\n const totalHaircut = item.details.reduce(\n (sum: number, detail: ConvertTransaction) => sum + detail.haircut,\n 0,\n );\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-2 oui-rounded-xl oui-bg-base-9 oui-p-2\">\n <div className=\"oui-flex oui-justify-between\">\n <div className=\"oui-flex oui-items-center oui-text-xs oui-font-semibold oui-text-base-contrast-80\">\n <ConvertedAssetColumn convertedAssets={item.converted_asset} />\n <div\n className=\"oui-ml-2 oui-text-primary\"\n onClick={() => {\n modal.show(ConverHistoryItemDetailsDialog, {\n item,\n chainsInfo: props.chainsInfo,\n });\n }}\n >\n {t(\"portfolio.overview.column.convert.details\")}\n </div>\n </div>\n <Text.formatted\n className=\"oui-text-2xs oui-text-base-contrast-36\"\n rule=\"date\"\n >\n {item.created_time}\n </Text.formatted>\n </div>\n\n {/* 5 fields in grid container: 3 per row, wrap to next line */}\n <div className=\"oui-grid oui-grid-cols-3 oui-gap-2\">\n <ConvertMobileField\n label={t(\"portfolio.overview.column.convert.usdcAmount\")}\n value={item.received_qty}\n />\n <ConvertMobileField label={t(\"common.fee\")} value={totalHaircut} />\n <ConvertMobileField\n label={t(\"portfolio.overview.column.convert.convertId\")}\n value={item.convert_id}\n copyable={true}\n />\n <ConvertMobileField\n label={t(\"common.type\")}\n value={item.type?.charAt(0).toUpperCase() + item.type?.slice(1)}\n />\n <ConvertMobileField\n label={t(\"common.status\")}\n value={item.status?.charAt(0).toUpperCase() + item.status?.slice(1)}\n />\n </div>\n </div>\n );\n};\n\ntype ConvertHistoryItemDetailsDialogProps = {\n item: ConvertRecord;\n chainsInfo: any[];\n};\n\nconst ConverHistoryItemDetailsDialog =\n modal.create<ConvertHistoryItemDetailsDialogProps>((props) => {\n const { item, chainsInfo } = props;\n const { t } = useTranslation();\n const { visible, hide, resolve, reject, onOpenChange } = useModal();\n\n return (\n <SimpleSheet\n title={t(\"portfolio.overview.convert.dialog.title.details\")}\n open={visible}\n onOpenChange={onOpenChange}\n >\n <div className=\"oui-flex oui-h-[300px] oui-flex-col oui-gap-3 oui-overflow-y-auto oui-rounded-lg oui-bg-base-7 oui-p-2\">\n {item.details.map((detail, index) => (\n <>\n <div className=\"oui-flex oui-flex-col oui-gap-2\">\n <div className=\"oui-flex oui-items-center oui-gap-1\">\n <TokenIcon name={detail.converted_asset} size=\"xs\" />\n <div className=\"oui-text-xs oui-text-base-contrast-80\">\n {detail.converted_asset}\n </div>\n </div>\n <div className=\"oui-grid oui-grid-cols-3 oui-gap-2\">\n <ConvertMobileField\n label={t(\"common.qty\")}\n value={detail.converted_qty}\n />\n <ConvertMobileField\n label={t(\"portfolio.overview.column.convert.usdcAmount\")}\n value={detail.received_qty}\n />\n <ConvertMobileField label=\"Fee\" value={detail.haircut} />\n <ConvertMobileField\n label={t(\"common.txId\")}\n copyable={!!detail.tx_id}\n rule=\"txId\"\n value={detail.tx_id}\n onClick={() => {\n if (detail.tx_id) {\n const chainInfo = chainsInfo.find(\n (item) => item.chain_id == detail.chain_id,\n );\n if (chainInfo?.explorer_base_url) {\n window.open(\n `${chainInfo.explorer_base_url}/tx/${detail.tx_id}`,\n \"_blank\",\n );\n }\n }\n }}\n />\n <ConvertMobileField\n label={t(\"transfer.network\")}\n value={\n chainsInfo.find(\n (item) => item.chain_id == detail.chain_id,\n )?.name || \"-\"\n }\n />\n <ConvertMobileField\n label={t(\"common.result\")}\n value={\n detail.result\n ? detail.result.charAt(0).toUpperCase() +\n detail.result.slice(1)\n : \"-\"\n }\n />\n </div>\n </div>\n {index < item.details.length - 1 && <Divider />}\n </>\n ))}\n </div>\n </SimpleSheet>\n );\n });\n","import { useMemo } from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { useOverviewContext } from \"../provider/overviewContext\";\n\nexport const useAssetsChartScript = () => {\n const assetHistory = useOverviewContext();\n\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { state } = useAccount();\n\n const filteredData = useDataTap(assetHistory.data, {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n fallbackData: assetHistory.createFakeData(\n {\n account_value: 0,\n // pnl: 0,\n },\n { account_value: 500 },\n ),\n });\n\n const _data = useMemo(() => {\n if (filteredData?.length ?? 0 > 0) return filteredData;\n return assetHistory.createFakeData(\n {\n account_value: 0,\n // pnl: 0,\n },\n { account_value: 500 },\n );\n }, [filteredData]);\n\n const invisible =\n wrongNetwork || disabledConnect || !assetHistory.data.length;\n\n return {\n ...assetHistory,\n data: _data,\n invisible,\n } as const;\n};\n\nexport type useAssetsChartScriptReturn = ReturnType<\n typeof useAssetsChartScript\n>;\n","import { createContext, useContext } from \"react\";\nimport { TWType } from \"@orderly.network/hooks\";\nimport { UseRewardsDataReturn } from \"../mobile/useRewardsData.script\";\nimport { useAssetsHistoryDataReturn } from \"../shared/useAssetHistory\";\n\nexport type OverviewContextState = {\n // period: PeriodType;\n type?: TWType;\n} & useAssetsHistoryDataReturn &\n UseRewardsDataReturn;\n\nexport const OverviewContext = createContext<OverviewContextState>(\n {} as OverviewContextState,\n);\n\nexport const useOverviewContext = () => {\n return useContext(OverviewContext);\n};\n","import { AssetLineChart } from \"@orderly.network/chart\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Card } from \"@orderly.network/ui\";\nimport { PeriodTitle } from \"../shared/periodHeader\";\nimport { useAssetsChartScriptReturn } from \"./assetsChart.script\";\n\nexport type AssetsLineChartProps = {} & useAssetsChartScriptReturn;\n\nexport const AssetsChart = (props: AssetsLineChartProps) => {\n const { onPeriodChange, periodTypes, period } = props;\n const { t } = useTranslation();\n\n return (\n <Card\n title={\n <PeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title={t(\"common.assets\")}\n />\n }\n id=\"portfolio-overview-assets-chart\"\n classNames={{\n content: \"oui-h-[168px] oui-pb-0\",\n }}\n >\n <AssetLineChart data={props.data as any} invisible={props.invisible} />\n {/* <PnlLineChart data={data} /> */}\n {/* <LineChart data={data} /> */}\n </Card>\n );\n};\n","import { useMemo } from \"react\";\nimport { CardTitle, Flex, Select, Text } from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { PeriodType } from \"./useAssetHistory\";\n\nexport const PeriodTitle = (props: {\n onPeriodChange: (period: PeriodType) => void;\n periodTypes: string[];\n period: PeriodType;\n title: string;\n}) => {\n const { t } = useTranslation();\n\n const periodLabel = useMemo(() => {\n return {\n [PeriodType.WEEK]: t(\"common.select.7d\"),\n [PeriodType.MONTH]: t(\"common.select.30d\"),\n [PeriodType.QUARTER]: t(\"common.select.90d\"),\n };\n }, [t]);\n\n return (\n <Flex justify={\"between\"}>\n <CardTitle>{props.title}</CardTitle>\n\n <div className={\"oui-min-w-14\"}>\n <Select.options\n size={\"xs\"}\n value={props.period}\n onValueChange={props.onPeriodChange}\n options={props.periodTypes.map((item) => ({\n value: item,\n label: periodLabel[item as PeriodType],\n }))}\n />\n </div>\n </Flex>\n );\n};\n","import { useMemo, useRef, useState } from \"react\";\nimport { subDays, format } from \"date-fns\";\nimport {\n useAccount,\n useAssetsHistory,\n useCollateral,\n useIndexPricesStream,\n useLocalStorage,\n usePrivateQuery,\n useStatisticsDaily,\n} from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\n\nexport enum PeriodType {\n WEEK = \"7D\",\n MONTH = \"30D\",\n QUARTER = \"90D\",\n}\n\nfunction convertToUSDCAndOperate({\n token,\n amount,\n indexPrices,\n value,\n op = \"sub\",\n}: {\n token: string;\n amount: string | number;\n indexPrices: Record<string, number>;\n value: Decimal;\n op?: \"add\" | \"sub\";\n}): Decimal {\n if (token.toUpperCase() === \"USDC\") {\n return op === \"add\" ? value.add(amount) : value.sub(amount);\n } else {\n const indexPrice = indexPrices[token];\n if (indexPrice) {\n const delta = new Decimal(amount).mul(indexPrice);\n return op === \"add\" ? value.add(delta) : value.sub(delta);\n }\n return value;\n }\n}\n\nexport const useAssetsHistoryData = (\n localKey: string,\n options?: {\n isRealtime?: boolean;\n },\n) => {\n const [today] = useState(() => new Date());\n\n const { data: indexPrices } = useIndexPricesStream();\n const { account } = useAccount();\n\n const { isRealtime = false } = options || {};\n const periodTypes = Object.values(PeriodType);\n const [period, setPeriod] = useLocalStorage<PeriodType>(\n localKey,\n PeriodType.WEEK,\n );\n\n const { totalValue } = useCollateral();\n\n const getStartDate = (value: PeriodType) => {\n switch (value) {\n case PeriodType.MONTH:\n return subDays(today, 35);\n case PeriodType.QUARTER:\n return subDays(today, 95);\n default:\n return subDays(today, 10);\n }\n };\n\n const periodValue = useMemo(() => {\n switch (period) {\n case PeriodType.WEEK:\n return 7;\n case PeriodType.MONTH:\n return 30;\n case PeriodType.QUARTER:\n return 90;\n default:\n return 7;\n }\n }, [period]);\n\n const [startDate, setStartDate] = useState(getStartDate(period));\n // const nowStamp = useRef(new Date().getTime().toString());\n // const now = useRef(new Date());\n\n // const endDate = useMemo(() => addDays(today, 1), [today]);\n const endDate = today;\n\n const totalDeposit = useRef<Decimal>(zero);\n\n // get transfer history\n const { data: transferOutHistory } = usePrivateQuery<API.TransferHistory>(\n `/v1/internal_transfer_history?page=1&size=50&side=OUT&main_sub_only=true&start_t=${startDate.getTime()}&end_t=${endDate.getTime()}`,\n {\n revalidateOnFocus: false,\n },\n );\n const { data: transferInHistory } = usePrivateQuery<API.TransferHistory>(\n `/v1/internal_transfer_history?page=1&size=50&side=IN&main_sub_only=true&start_t=${startDate.getTime()}&end_t=${endDate.getTime()}`,\n {\n revalidateOnFocus: false,\n },\n );\n\n const [data] = useStatisticsDaily(\n {\n startDate: startDate.toISOString().split(\"T\")[0],\n endDate: endDate.toISOString().split(\"T\")[0],\n },\n {\n ignoreAggregation: true,\n },\n );\n\n const [assetHistory] = useAssetsHistory({\n startTime: subDays(today, 2).getTime(),\n endTime: endDate.getTime(),\n pageSize: 50,\n });\n\n const onPeriodChange = (value: PeriodType) => {\n setStartDate(getStartDate(value));\n setPeriod(value);\n };\n\n // const lastItem = data[data.length - 1];\n\n const lastItem = useMemo(() => {\n return data.length > 0 ? data[data.length - 1] : null;\n }, [data]);\n\n const totalTransferIn = useMemo(() => {\n if (!Array.isArray(transferInHistory)) {\n return null;\n }\n if (\n lastItem == null ||\n transferInHistory?.length === 0 ||\n typeof lastItem.snapshot_time === \"undefined\"\n ) {\n return zero;\n }\n const list = transferInHistory?.filter((item) => {\n return item.created_time > lastItem?.snapshot_time;\n });\n return list?.reduce((acc, item) => {\n return acc.add(\n convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n indexPrices,\n value: zero,\n op: \"add\",\n }),\n );\n }, zero);\n }, [transferInHistory, lastItem, indexPrices]);\n\n const totalTransferOut = useMemo(() => {\n if (!Array.isArray(transferOutHistory)) {\n return null;\n }\n if (\n lastItem == null ||\n transferOutHistory?.length === 0 ||\n typeof lastItem.snapshot_time === \"undefined\"\n ) {\n return zero;\n }\n const list = transferOutHistory?.filter((item) => {\n return item.created_time > lastItem?.snapshot_time;\n });\n return list?.reduce((acc, item) => {\n return acc.add(\n convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n indexPrices,\n value: zero,\n op: \"add\",\n }),\n );\n }, zero);\n }, [transferOutHistory, lastItem]);\n\n const calculateLastPnl = (inputs: {\n lastItem: API.DailyRow;\n assetHistory: ReadonlyArray<API.AssetHistoryRow> | API.AssetHistoryRow[];\n transferHistory: {\n OUT: Decimal;\n IN: Decimal;\n };\n totalValue: number | null;\n }) => {\n if (totalValue == null) {\n return null;\n }\n // today daily pnl = totalValue - lastItem.account_value - deposit + withdraw\n let value = new Decimal(totalValue).sub(inputs.lastItem.account_value);\n\n // subtraction of deposit and withdraw\n if (\n Array.isArray(inputs.assetHistory) &&\n inputs.assetHistory.length > 0 &&\n typeof inputs.lastItem.snapshot_time !== \"undefined\"\n ) {\n // find a list with the timestamp greater than the last item timestamp and trans_status = success;\n const list = [];\n\n for (let i = 0; i < inputs.assetHistory.length; i++) {\n const item = inputs.assetHistory[i];\n if (item.created_time > inputs.lastItem.snapshot_time) {\n list.push(item);\n }\n }\n\n // calculate the sum of deposit and withdraw\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (item.side === \"DEPOSIT\") {\n if (item.trans_status === \"COMPLETED\") {\n value = convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n indexPrices,\n value,\n op: \"sub\",\n });\n\n totalDeposit.current = convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n indexPrices,\n value: totalDeposit.current,\n op: \"add\",\n });\n }\n } else if (item.side === \"WITHDRAW\") {\n if (item.trans_status !== \"FAILED\") {\n value = convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n indexPrices,\n value,\n op: \"add\",\n });\n }\n }\n }\n }\n\n value = value\n .sub(inputs.transferHistory.IN)\n .add(inputs.transferHistory.OUT);\n\n return value.toNumber();\n };\n\n const calculate = (\n data: API.DailyRow[],\n totalValue: number | null,\n totalTransferIn: Decimal,\n totalTransferOut: Decimal,\n ) => {\n const lastItem = data[data.length - 1];\n\n return {\n ...lastItem,\n date: getUTCStr(today),\n perp_volume: 0,\n account_value:\n totalValue !== null ? totalValue : (lastItem?.account_value ?? 0),\n pnl:\n calculateLastPnl({\n lastItem,\n assetHistory,\n totalValue,\n transferHistory: {\n OUT: totalTransferOut,\n IN: totalTransferIn,\n },\n }) ?? 0,\n __isCalculated: true,\n };\n };\n\n const mergeData = (\n data: ReadonlyArray<API.DailyRow> | API.DailyRow[],\n totalValue: number | null,\n totalTransferIn: Decimal,\n totalTransferOut: Decimal,\n ) => {\n if (!Array.isArray(data) || data.length === 0) {\n return data;\n }\n\n if (data[data.length - 1].date === getUTCStr(today)) {\n return data;\n }\n\n return data.concat([\n calculate(data, totalValue, totalTransferIn, totalTransferOut),\n ]);\n };\n\n const calculateData = (\n data: ReadonlyArray<API.DailyRow> | API.DailyRow[],\n realtime: boolean,\n totalValue: number | null,\n totalTransferIn: Decimal,\n totalTransferOut: Decimal,\n ) => {\n const _data = !realtime\n ? data\n : mergeData(data, totalValue, totalTransferIn, totalTransferOut);\n\n return _data.slice(Math.max(0, _data.length - periodValue));\n };\n\n const calculatedData = useMemo(() => {\n /**\n * need the totalValue and data are all ready, else return null;\n */\n if (totalValue === null) {\n return [];\n }\n // if the transferOutHistory or transferInHistory is not ready, return null;\n\n if (totalTransferOut === null || totalTransferIn === null) {\n return [];\n }\n return calculateData(\n data,\n isRealtime,\n totalValue,\n totalTransferIn,\n totalTransferOut,\n );\n }, [\n data,\n totalValue,\n assetHistory,\n isRealtime,\n indexPrices,\n // transferOutHistory,\n // transferInHistory,\n totalTransferIn,\n totalTransferOut,\n ]);\n\n const aggregateValue = useMemo(() => {\n let vol = zero;\n let pnl = zero;\n let roi = zero;\n\n if (Array.isArray(calculatedData) && calculatedData.length) {\n calculatedData.forEach((d) => {\n // vol = vol.add(d.perp_volume);\n pnl = pnl.add(d.pnl);\n });\n\n const tail = calculatedData[0];\n\n const dataTailIndex = data.findIndex((d) => d.date === tail.date);\n\n const lastAccountValue = data[dataTailIndex - 1]?.account_value;\n\n // console.log(data, calculatedData, tail, dataTailIndex);\n\n if (typeof lastAccountValue === \"undefined\" || lastAccountValue === 0) {\n roi = zero;\n } else {\n roi = pnl.div(\n totalTransferIn.add(lastAccountValue).add(totalDeposit.current),\n );\n }\n }\n\n if (data.length > 0) {\n for (let i = 0; i < periodValue; i++) {\n const item = data[data.length - 1 - i];\n\n if (item) {\n vol = vol.add(item.perp_volume ?? 0);\n }\n }\n }\n\n // console.log(\"---------------------------\");\n\n return { vol: vol.toNumber(), pnl: pnl.toNumber(), roi: roi.toNumber() };\n }, [calculatedData, data, periodValue, totalTransferIn]);\n\n const createFakeData = (\n start: Partial<API.DailyRow>,\n end: Partial<API.DailyRow>,\n ) => {\n return Array.from({ length: 2 }, (_, i) => {\n const date = format(i === 0 ? startDate : new Date(), \"yyyy-MM-dd\");\n\n return {\n date,\n ...(i === 0 ? start : end),\n };\n });\n };\n\n return {\n periodTypes,\n period,\n onPeriodChange,\n // data: calculatedDataUpdateByIndexPrice, // calculatedData,\n data: calculatedData, // calculatedData,\n aggregateValue,\n createFakeData,\n volumeUpdateDate: data?.[data.length - 1]?.date ?? \"\",\n } as const;\n};\n\nexport type useAssetsHistoryDataReturn = ReturnType<\n typeof useAssetsHistoryData\n>;\n\nfunction getUTCStr(date: Date) {\n const year = date.getUTCFullYear();\n const month = `0${date.getUTCMonth() + 1}`.slice(-2);\n const day = `0${date.getUTCDate()}`.slice(-2);\n\n return `${year}-${month}-${day}`;\n}\n","import { useAssetsChartScript } from \"./assetsChart.script\";\nimport { AssetsChart } from \"./assetsChart.ui\";\n\nexport const AssetsChartWidget = () => {\n const state = useAssetsChartScript();\n return <AssetsChart {...state} />;\n};\n","import { useMemo, ReactNode } from \"react\";\nimport { PnLBarChart, PnlLineChart } from \"@orderly.network/chart\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { EMPTY_LIST } from \"@orderly.network/types\";\nimport {\n Card,\n Grid,\n Box,\n Statistic,\n Text,\n Flex,\n Tooltip,\n cn,\n} from \"@orderly.network/ui\";\nimport { PeriodTitle } from \"../shared/periodHeader\";\nimport { PeriodType } from \"../shared/useAssetHistory\";\nimport { UsePerformanceScriptReturn } from \"./performance.script\";\n\nexport type PerformanceUIProps = {\n // periodTypes: string[];\n // period: string;\n // onPeriodChange: (period: string) => void;\n} & UsePerformanceScriptReturn;\n\nexport const PerformanceUI = (props: PerformanceUIProps) => {\n const {\n periodTypes,\n period,\n onPeriodChange,\n aggregateValue,\n invisible,\n visible,\n volumeUpdateDate,\n } = props;\n const { t } = useTranslation();\n\n const periodLabel = useMemo(() => {\n return {\n [PeriodType.WEEK]: t(\"common.select.7d\"),\n [PeriodType.MONTH]: t(\"common.select.30d\"),\n [PeriodType.QUARTER]: t(\"common.select.90d\"),\n };\n }, [t]);\n return (\n <Card\n // @ts-ignore\n title={\n <PeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title={t(\"portfolio.overview.performance\")}\n />\n }\n id=\"portfolio-overview-performance\"\n >\n <Grid cols={3} gap={4}>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={4}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n <Statistic\n label={\n <LabelWithHint\n label={t(\"portfolio.overview.performance.roi\", {\n period: periodLabel[period as PeriodType],\n })}\n hint={t(\"portfolio.overview.performance.roi.tooltip\")}\n />\n }\n // @ts-ignore\n valueProps={{\n rule: \"percentages\",\n coloring: true,\n visible,\n }}\n >\n {invisible ? \"--\" : aggregateValue.roi}\n </Statistic>\n </Box>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={4}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n <Statistic\n label={\n <LabelWithHint\n label={t(\"portfolio.overview.performance.pnl\", {\n period: periodLabel[period as PeriodType],\n })}\n hint={t(\"portfolio.overview.performance.pnl.tooltip\")}\n />\n }\n // @ts-ignore\n valueProps={{\n coloring: true,\n showIdentifier: true,\n visible,\n }}\n >\n {invisible ? \"--\" : aggregateValue.pnl}\n </Statistic>\n </Box>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={4}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n <Statistic\n classNames={{\n label: \"oui-w-full\",\n }}\n label={\n <Flex justify={\"between\"}>\n <span>\n <LabelWithHint\n label={t(\"portfolio.overview.performance.volume\", {\n period: periodLabel[period as PeriodType],\n })}\n hint={t(\"portfolio.overview.performance.volume.tooltip\")}\n />\n </span>\n <span>{volumeUpdateDate}</span>\n </Flex>\n }\n >\n {invisible ? \"--\" : aggregateValue.vol}\n </Statistic>\n </Box>\n </Grid>\n <Grid cols={2} gap={4}>\n <PerformancePnL\n data={props.data ?? EMPTY_LIST}\n invisible={props.invisible}\n />\n <CumulativePnlChart\n data={props.data ?? EMPTY_LIST}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n </Grid>\n </Card>\n );\n};\n\ntype LabelWithHintProps = {\n label: string;\n hint?: ReactNode;\n};\n\nconst LabelWithHint: React.FC<LabelWithHintProps> = (props) => {\n const { label, hint } = props;\n return (\n <Tooltip\n open={hint ? undefined : false}\n content={hint}\n className=\"oui-max-w-[240px] oui-bg-base-6 \"\n arrow={{ className: \"oui-fill-base-6\" }}\n delayDuration={300}\n >\n <Text\n size=\"xs\"\n intensity={36}\n className={cn(\n hint &&\n \"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\",\n )}\n >\n {label}\n </Text>\n </Tooltip>\n );\n};\n\nexport const PerformancePnL = (props: {\n data: ReadonlyArray<any> | any[];\n invisible: boolean;\n}) => {\n // console.log(props.data);\n // const tickValues = useMemo(() => {\n // if (!Array.isArray(props.data) || !props.data.length) return;\n // return [props.data[0].date, props.data[props.data?.length - 1].date];\n // }, [props.data]);\n const { t } = useTranslation();\n return (\n <Box mt={4} height={\"188px\"}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n {t(\"portfolio.overview.performance.dailyPnl\")}\n </Text>\n <Box r=\"md\" className=\"oui-border oui-border-line-4 oui-h-[188px]\">\n <PnLBarChart\n data={props.data}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n </Box>\n </Box>\n );\n};\n\nexport const CumulativePnlChart = (props: {\n data: ReadonlyArray<any> | any[];\n invisible: boolean;\n}) => {\n const { t } = useTranslation();\n\n return (\n <Box mt={4}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n {t(\"portfolio.overview.performance.cumulativePnl\")}\n </Text>\n <Box r=\"md\" className=\"oui-border oui-border-line-4 oui-h-[188px]\">\n <PnlLineChart\n data={props.data}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n {/* <Chart data={props.data} x={\"date\"} y={\"pnl\"}>\n <Axis orientation=\"left\" />\n </Chart> */}\n </Box>\n </Box>\n );\n};\n","import { useMemo } from \"react\";\nimport { useAccount, useLocalStorage } from \"@orderly.network/hooks\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { useOverviewContext } from \"../provider/overviewContext\";\n\nexport const usePerformanceScript = () => {\n const ctx = useOverviewContext();\n const [visible] = useLocalStorage(\"orderly_assets_visible\", true);\n\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { state } = useAccount();\n const filteredData = useDataTap(ctx.data, {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n fallbackData: ctx.createFakeData(\n {\n account_value: 0,\n pnl: 0,\n },\n { account_value: 500, pnl: 500 },\n ),\n // fallbackData:\n // ctx.data && ctx.data.length >= 2\n // ? [ctx.data[0], ctx.data[ctx.data.length - 1]]\n // : ctx.createFakeData(\n // {\n // account_value: 0,\n // pnl: 0,\n // },\n // { account_value: 1000, pnl: 1000 }\n // ),\n });\n\n const _data = useMemo(() => {\n if (filteredData?.length ?? 0 > 0) return filteredData;\n return ctx.createFakeData(\n {\n account_value: 0,\n pnl: 0,\n },\n { account_value: 500, pnl: 500 },\n );\n }, [filteredData]);\n\n const invisible =\n wrongNetwork ||\n disabledConnect ||\n (state.status < AccountStatusEnum.EnableTrading &&\n state.status !== AccountStatusEnum.EnableTradingWithoutConnected);\n\n return {\n ...ctx,\n data: _data,\n invisible,\n visible,\n };\n};\n\nexport type UsePerformanceScriptReturn = ReturnType<\n typeof usePerformanceScript\n>;\n","import { PerformanceUI } from \"./performance.ui\";\nimport { usePerformanceScript } from \"./performance.script\";\n\nexport const PerformanceWidget = () => {\n const state = usePerformanceScript();\n\n return <PerformanceUI {...state} />;\n};\n","import { Grid, useScreen } from \"@orderly.network/ui\";\nimport { AssetsChartWidget } from \"./assetChart\";\nimport { AssetWidget } from \"./assets\";\nimport { HistoryDataGroupWidget } from \"./historyDataGroup\";\nimport { MobileOverview } from \"./mobile\";\nimport { PerformanceWidget } from \"./performance\";\nimport { OverviewProvider } from \"./provider/overviewProvider\";\n\nexport const OverviewPage = () => {\n const { isMobile } = useScreen();\n return (\n <OverviewProvider>\n {isMobile ? (\n <MobileOverview />\n ) : (\n <Grid cols={2} gap={4}>\n <AssetWidget />\n <AssetsChartWidget />\n <Grid.span colSpan={2}>\n <PerformanceWidget />\n </Grid.span>\n <Grid.span colSpan={2}>\n <HistoryDataGroupWidget />\n </Grid.span>\n </Grid>\n )}\n </OverviewProvider>\n );\n};\n","import { FC } from \"react\";\nimport { ENVType, useGetEnv } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { DepositStatusWidget } from \"@orderly.network/ui-transfer\";\nimport { useLayoutContext } from \"../../../layout/context\";\nimport { useAssetScript } from \"../assets\";\nimport { AccountStatusMobile } from \"./accountStatus.ui.mobile\";\nimport { AffiliateCardMobile } from \"./affiliateCard.ui.mobile\";\nimport { PortfolioHandleMobile } from \"./portfolioHandle.ui.mobile\";\nimport { PortfolioValueMobile } from \"./portfolioVaule.ui.mobile\";\nimport { SettingRouterMobile } from \"./settingRouter.ui.mobile\";\nimport { TraderCardMobile } from \"./traderCard.ui.mobile\";\nimport { TradingRewardsCardMobile } from \"./tradingRewardsCard.ui.mobile\";\nimport { useRewardsDataScript } from \"./useRewardsData.script\";\n\nexport const MobileOverview: FC = (props) => {\n const {\n canTrade,\n onWithdraw,\n onDeposit,\n portfolioValue,\n unrealPnL,\n unrealROI,\n visible,\n namespace,\n toggleVisible,\n onTransfer,\n isMainAccount,\n hasSubAccount,\n } = useAssetScript();\n const { t } = useTranslation();\n const rewardsData = useRewardsDataScript();\n const layoutContext = useLayoutContext();\n const { onRouteChange } = useAppContext();\n const env = useGetEnv();\n\n const goToClaim = () => {\n const url = `https://${\n env !== ENVType.prod ? `${env}-` : \"\"\n }app.orderly.network/tradingRewards`;\n window.open(url, \"_blank\");\n };\n\n const navigateToPortfolioHistory =\n typeof onRouteChange === \"function\"\n ? () => {\n onRouteChange({\n href: \"/portfolio/history\",\n name: t(\"trading.history\"),\n });\n }\n : undefined;\n\n // console.log('rewards data', rewardsData, layoutContext, props);\n\n return (\n <>\n <div className=\"oui-my-1 oui-px-3\">\n <AccountStatusMobile />\n </div>\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n height={\"100%\"}\n className=\"oui-gap-5 oui-px-3\"\n >\n <Flex direction=\"column\" width=\"100%\" gapY={2}>\n <PortfolioValueMobile\n toggleVisible={toggleVisible}\n portfolioValue={portfolioValue}\n unrealPnL={unrealPnL}\n unrealROI={unrealROI}\n visible={visible}\n canTrade={canTrade}\n namespace={namespace}\n routerAdapter={layoutContext?.routerAdapter}\n />\n <DepositStatusWidget\n className=\"oui-mb-2\"\n onClick={navigateToPortfolioHistory}\n />\n </Flex>\n\n <PortfolioHandleMobile\n disabled={!canTrade}\n onWithdraw={onWithdraw}\n onDeposit={onDeposit}\n onTransfer={onTransfer}\n isMainAccount={isMainAccount}\n routerAdapter={layoutContext?.routerAdapter}\n hasSubAccount={hasSubAccount}\n />\n <Flex\n direction={\"row\"}\n width={\"100%\"}\n height={\"100%\"}\n className=\"oui-gap-3\"\n >\n <Flex direction=\"column\" className=\"oui-flex-1 oui-gap-3\">\n <AffiliateCardMobile\n referralInfo={rewardsData.referralInfo}\n routerAdapter={layoutContext?.routerAdapter}\n />\n <TraderCardMobile\n referralInfo={rewardsData.referralInfo}\n routerAdapter={layoutContext?.routerAdapter}\n />\n </Flex>\n <Flex direction=\"column\" className=\"oui-flex-1\">\n <TradingRewardsCardMobile {...rewardsData} goToClaim={goToClaim} />\n </Flex>\n </Flex>\n <SettingRouterMobile routerAdapter={layoutContext?.routerAdapter} />\n </Flex>\n </>\n );\n};\n","import { FC, SVGProps, useCallback, useMemo } from \"react\";\nimport {\n parseJSON,\n useAccount,\n useChains,\n useLocalStorage,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum, ChainNamespace } from \"@orderly.network/types\";\nimport {\n cn,\n modal,\n toast,\n formatAddress,\n Flex,\n CopyIcon,\n ChainIcon,\n} from \"@orderly.network/ui\";\n\ninterface StatusInfo {\n title: string;\n description: string;\n titleColor?: any;\n titleClsName?: string;\n}\n\nconst useCurrentStatus = () => {\n const { state, account } = useAccount();\n const { wrongNetwork, disabledConnect, connectWallet } = useAppContext();\n const { t } = useTranslation();\n\n const statusText = {\n wrongNetwork: {\n description: t(\"connector.wrongNetwork.tooltip\"),\n rootClass: \"oui-bg-[linear-gradient(15deg,#D25F00_0%,transparent_30%)]\",\n },\n connectWallet: {\n description: t(\"connector.trade.connectWallet.tooltip\"),\n rootClass: \"oui-bg-[linear-gradient(15deg,#27FDFE_0%,transparent_30%)]\",\n },\n notSignedIn: {\n description: t(\"connector.trade.createAccount.tooltip\"),\n rootClass: \"oui-bg-[linear-gradient(15deg,#335FFC_0%,transparent_30%)]\",\n },\n disabledTrading: {\n description: t(\"connector.trade.enableTrading.tooltip\"),\n rootClass: \"oui-bg-[linear-gradient(15deg,#335FFC_0%,transparent_30%)]\",\n },\n default: {\n description: \"\",\n rootClass: \"\",\n arrowIconClass: \"\",\n textClass: \"\",\n },\n };\n\n return useMemo(() => {\n if (disabledConnect) {\n return statusText.connectWallet;\n }\n\n if (wrongNetwork) {\n return statusText.wrongNetwork;\n }\n\n switch (state.status) {\n case AccountStatusEnum.NotConnected:\n return statusText.connectWallet;\n case AccountStatusEnum.NotSignedIn:\n return statusText.notSignedIn;\n case AccountStatusEnum.DisabledTrading:\n return statusText.disabledTrading;\n default:\n return statusText.default;\n }\n }, [state.status, wrongNetwork]);\n};\n\nexport function EVMChainPopover({ children }: { children: React.ReactNode }) {\n // const [chains] = useState(getChainsByNetwork(\"mainnet\"));\n const [chains] = useChains(\"mainnet\", {\n pick: \"network_infos\",\n });\n const { t } = useTranslation();\n\n const showDialog = () => {\n modal.dialog({\n title: t(\"connector.privy.supportedEvmChain\"),\n size: \"xs\",\n content: (\n <div>\n <div className=\"oui-p-1 oui-grid oui-grid-cols-2 oui-gap-x-2 oui-gap-y-3 oui-text-2xs oui-text-base-contrast-54\">\n {chains.map((item, key) => (\n <div\n key={key}\n className=\"oui-flex oui-items-center oui-justify-start oui-gap-1\"\n >\n <ChainIcon chainId={item.chain_id} size=\"2xs\" />\n <div>{item.name}</div>\n </div>\n ))}\n </div>\n </div>\n ),\n });\n };\n\n return <button onClick={showDialog}>{children}</button>;\n}\n\nexport const MoreIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M8.00521 6.66797C8.74161 6.66797 9.33854 7.26464 9.33854 8.0013C9.33854 8.73797 8.74161 9.33464 8.00521 9.33464C7.26881 9.33464 6.67188 8.73797 6.67188 8.0013C6.67188 7.26464 7.26881 6.66797 8.00521 6.66797Z\" />\n <path d=\"M3.33333 6.66797C4.06973 6.66797 4.66667 7.26464 4.66667 8.0013C4.66667 8.73797 4.06973 9.33464 3.33333 9.33464C2.59693 9.33464 2 8.73797 2 8.0013C2 7.26464 2.59693 6.66797 3.33333 6.66797Z\" />\n <path d=\"M12.6666 6.66797C13.403 6.66797 14 7.26464 14 8.0013C14 8.73797 13.403 9.33464 12.6666 9.33464C11.9302 9.33464 11.3333 8.73797 11.3333 8.0013C11.3333 7.26464 11.9302 6.66797 12.6666 6.66797Z\" />\n </svg>\n);\n\nconst EVMChains = () => {\n return (\n <div className=\"oui-relative oui-flex oui-items-center oui-justify-center\">\n <div className=\"oui-flex oui-h-[18px] oui-items-center oui-justify-center \">\n <img\n src=\"https://oss.orderly.network/static/sdk/portfolio/chains.png\"\n className=\"oui-relative oui-z-0 oui-h-[18px] oui-w-[49px]\"\n />\n </div>\n <div className=\"oui-relative oui-left-[-9px] oui-flex oui-items-center oui-justify-center oui-gap-1\">\n <div className=\"oui-flex oui-size-[18px] oui-items-center oui-justify-center oui-rounded-full oui-bg-[#282e3a]\">\n <EVMChainPopover>\n <MoreIcon\n className=\"oui-relative oui-z-10 oui-size-3 oui-text-base-contrast-54 hover:oui-text-base-contrast\"\n style={{ zIndex: 1 }}\n />\n </EVMChainPopover>\n </div>\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast\">\n Evm\n </div>\n </div>\n </div>\n );\n};\n\nconst ShowAccount: FC = () => {\n const { state, account } = useAccount();\n const { namespace } = useWalletConnector();\n const { t } = useTranslation();\n const onCopyAddress = () => {\n navigator.clipboard.writeText(state.address ?? \"\");\n toast.success(t(\"common.copy.copied\"));\n };\n\n const currentNamespace = useMemo(() => {\n if (namespace) {\n return namespace;\n }\n if (state.status === AccountStatusEnum.EnableTradingWithoutConnected) {\n return getLinkDeviceStorage()?.chainNamespace;\n }\n return null;\n }, [namespace, state.status]);\n\n const leftNode = useMemo(() => {\n if (!state.address) {\n return;\n }\n return (\n <Flex className=\"oui-text-base oui-text-base-contrast\" gapX={2}>\n {formatAddress(state.address ?? \"\")}\n <button\n className=\"oui-cursor-pointer\"\n onClick={() => {\n onCopyAddress();\n }}\n >\n <CopyIcon\n size={18}\n className=\"oui-text-base-contrast-80\"\n opacity={1}\n />\n </button>\n </Flex>\n );\n }, [state.address]);\n const rightNode = useMemo(() => {\n if (currentNamespace === ChainNamespace.evm) {\n return <EVMChains />;\n }\n\n return (\n <Flex gapX={1} itemAlign={\"center\"} className=\"oui-text-2xs\">\n <img\n src=\"https://oss.orderly.network/static/sdk/solana-logo.png\"\n className=\"oui-w-[15px]\"\n />\n Solana\n </Flex>\n );\n }, [currentNamespace]);\n\n const bgClass = useMemo(() => {\n let bg = \"\";\n if (currentNamespace == ChainNamespace.evm) {\n bg =\n \"oui-bg-[linear-gradient(15deg,#283BEE_-11%,transparent_30%,transparent_77%,#A53411_100%)]\";\n } else if (currentNamespace == ChainNamespace.solana) {\n bg =\n \"oui-bg-[linear-gradient(15deg,#7400D0_-11%,transparent_30%,transparent_77%,#009A7E_100%)]\";\n }\n return bg;\n }, [currentNamespace]);\n return (\n <div\n className={cn([\n \"oui-flex oui-h-[44px] oui-w-full oui-items-center oui-justify-between oui-rounded-[10px] oui-px-3 oui-py-[10px]\",\n bgClass,\n ])}\n >\n {leftNode}\n {rightNode}\n </div>\n );\n};\n\nexport const AccountStatusMobile: FC = () => {\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n const { description, rootClass } = useCurrentStatus();\n\n const alreadyShowAccount = useMemo(() => {\n if (state.status === AccountStatusEnum.EnableTradingWithoutConnected) {\n return true;\n }\n if (wrongNetwork) {\n return false;\n }\n return state.status >= AccountStatusEnum.EnableTrading;\n }, [state.status, wrongNetwork]);\n\n if (alreadyShowAccount) {\n return <ShowAccount />;\n }\n\n return (\n <div\n className={cn([\n \"oui-flex oui-h-[44px] oui-w-full oui-items-center oui-justify-center oui-rounded-[10px] oui-px-3 oui-py-[10px]\",\n rootClass,\n // \"oui-bg-linear-65\",\n // \"oui-from-[-20%]\",\n // \"oui-to-[40%]\",\n // \" oui-from-[#FF7B00]\",\n // \" oui-to-[#FFEA00]\",\n ])}\n >\n <div\n className={cn(\n \"oui-flex oui-items-center oui-justify-end oui-rounded-[10px] oui-text-xs oui-font-semibold\",\n \"oui-text-base-contrast-54\",\n )}\n >\n {description}\n </div>\n </div>\n );\n};\ntype LinkDeviceStorage = { chainId: number; chainNamespace: ChainNamespace };\n\nfunction getLinkDeviceStorage() {\n try {\n const linkDeviceStorage = localStorage.getItem(\"orderly_link_device\");\n const json = linkDeviceStorage ? parseJSON(linkDeviceStorage) : null;\n return json as LinkDeviceStorage;\n } catch (err) {\n console.error(\"getLinkDeviceStorage\", err);\n }\n}\n","import { FC } from \"react\";\nimport { isNumber } from \"lodash\";\nimport { RefferalAPI as API } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Flex,\n Text,\n AffiliateIcon,\n ChevronRightIcon,\n cn,\n} from \"@orderly.network/ui\";\nimport { RouterAdapter } from \"@orderly.network/ui-scaffold\";\nimport { commifyOptional } from \"@orderly.network/utils\";\n\ntype AffiliateCardMobileProps = {\n referralInfo?: API.ReferralInfo;\n routerAdapter?: RouterAdapter;\n};\n\nexport const AffiliateCardMobile: FC<AffiliateCardMobileProps> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n className=\"\n oui-via-21.6% \n oui-via-83.23% \n oui-relative \n oui-h-[112px] \n oui-w-full \n oui-flex-col \n oui-items-start \n oui-rounded-xl \n oui-border \n oui-border-solid \n oui-border-[rgba(var(--oui-gradient-primary-start)/0.36)] \n oui-bg-gradient-to-r\n oui-from-[rgba(var(--oui-gradient-primary-end)/0.12)]\n oui-to-[rgba(var(--oui-gradient-primary-start)/0.12)]\n oui-p-3\n \"\n >\n <Flex className=\"oui-w-full oui-flex-row oui-justify-between oui-items-center\">\n <Flex className=\"oui-flex-col oui-items-start\">\n <Text className=\"oui-text-base-contrast oui-text-base oui-font-semibold\">\n {t(\"affiliate.asAffiliate.affilates\")}\n </Text>\n <Text className=\"oui-text-2xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"affiliate.commission\")}\n </Text>\n </Flex>\n <AffiliateIcon />\n </Flex>\n <Flex className=\"oui-mt-auto oui-w-full oui-flex-row oui-items-center oui-gap-1\">\n <img\n src=\"https://oss.orderly.network/static/symbol_logo/USDC.png\"\n alt=\"USDC\"\n className=\"oui-size-5\"\n />\n <Text\n className={cn(\n \"oui-text-xs oui-font-semibold\",\n isNumber(\n props?.referralInfo?.referrer_info[\"30d_referrer_rebate\"],\n ) && props?.referralInfo?.referrer_info[\"30d_referrer_rebate\"] != 0\n ? \"oui-text-base-contrast\"\n : \"oui-text-base-contrast-36\",\n )}\n >\n {commifyOptional(\n props?.referralInfo?.referrer_info[\"30d_referrer_rebate\"],\n { fix: 2, fallback: \"--\" },\n )}\n </Text>\n <Text className=\"oui-text-xs oui-font-semibold oui-text-base-contrast-36\">\n (30D)\n </Text>\n <ChevronRightIcon\n size={18}\n color=\"white\"\n className=\"oui-ml-auto\"\n onClick={() =>\n props?.routerAdapter?.onRouteChange({\n href: \"/rewards/affiliate?tab=affiliate\",\n name: t(\"tradingRewards.rewards\"),\n })\n }\n />\n </Flex>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Flex,\n Text,\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n CalendarMinusIcon,\n ArrowLeftRightIcon,\n} from \"@orderly.network/ui\";\nimport { RouterAdapter } from \"@orderly.network/ui-scaffold\";\nimport { PortfolioLeftSidebarPath } from \"../../../layout\";\n\ntype Props = {\n disabled: boolean;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n onTransfer?: () => void;\n isMainAccount?: boolean;\n routerAdapter?: RouterAdapter;\n hasSubAccount?: boolean;\n};\n\nexport const PortfolioHandleMobile: FC<Props> = (props) => {\n const { t } = useTranslation();\n\n const onGotoHistory = () => {\n props.routerAdapter?.onRouteChange({\n href: PortfolioLeftSidebarPath.History,\n name: t(\"trading.history\"),\n });\n };\n\n return (\n <Flex\n direction={\"row\"}\n width={\"100%\"}\n height={\"71px\"}\n className=\"oui-gap-3 oui-bg-transparent\"\n >\n {props.isMainAccount && (\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n onClick={props?.onDeposit}\n >\n <div className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\">\n <ArrowDownSquareFillIcon size={28} color=\"white\" opacity={1} />\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"common.deposit\")}\n </Text>\n </Flex>\n )}\n {props.hasSubAccount && (\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n onClick={props?.onTransfer}\n >\n <div className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\">\n <ArrowLeftRightIcon size={28} color=\"white\" opacity={1} />\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"common.transfer\")}\n </Text>\n </Flex>\n )}\n {props.isMainAccount && (\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n onClick={props?.onWithdraw}\n >\n <div className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\">\n <ArrowUpSquareFillIcon size={28} color=\"white\" opacity={1} />\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"common.withdraw\")}\n </Text>\n </Flex>\n )}\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n >\n <div\n className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\"\n onClick={onGotoHistory}\n >\n <CalendarMinusIcon\n size={28}\n color=\"white\"\n opacity={1}\n viewBox=\"0 0 28 28\"\n className=\"oui-w-[28px] oui-h-[28px]\"\n />\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"trading.history\")}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { parseJSON, useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AccountStatusEnum, ChainNamespace } from \"@orderly.network/types\";\nimport {\n Flex,\n Text,\n cn,\n ArrowRightShortIcon,\n EyeIcon,\n} from \"@orderly.network/ui\";\nimport { RouterAdapter } from \"@orderly.network/ui-scaffold\";\nimport { PortfolioLeftSidebarPath } from \"../../../layout\";\n\ntype Props = {\n portfolioValue: number | null;\n unrealPnL: number;\n unrealROI: number;\n visible: boolean;\n namespace: string | null;\n toggleVisible: () => void;\n canTrade: boolean;\n routerAdapter?: RouterAdapter;\n};\n\nexport const PortfolioValueMobile: FC<Props> = (props) => {\n const { t } = useTranslation();\n const { state } = useAccount();\n\n const currentNamespace = useMemo(() => {\n if (props.namespace) {\n return props.namespace;\n }\n if (state.status === AccountStatusEnum.EnableTradingWithoutConnected) {\n return getLinkDeviceStorage()?.chainNamespace;\n }\n return null;\n }, [props.namespace, state.status]);\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n height={\"100%\"}\n className={cn([\n \"oui-relative oui-items-start oui-overflow-hidden oui-rounded-2xl oui-bg-base-9\",\n currentNamespace === ChainNamespace.evm && \"oui-bg-[#283BEE]\",\n currentNamespace === ChainNamespace.solana && \"oui-bg-[#630EAD]\",\n ])}\n p={4}\n >\n <Flex direction=\"row\" gapX={1} itemAlign={\"center\"}>\n <Text className=\"oui-text-sm oui-text-base-contrast-54\">\n {t(\"portfolio.overview.handle.title\")}\n </Text>\n <EyeIcon\n size={16}\n className={cn(\n props.canTrade ? \"oui-text-base-contrast-54\" : \"oui-hidden\",\n )}\n onClick={props.toggleVisible}\n />\n </Flex>\n <Flex\n direction=\"row\"\n gapX={1}\n itemAlign={\"baseline\"}\n className=\"oui-mt-1\"\n >\n <Text.numeral\n visible={props.visible}\n className=\"oui-text-3xl oui-font-bold oui-text-base-contrast\"\n >\n {props.portfolioValue ?? \"--\"}\n </Text.numeral>\n <Text className=\"oui-text-base oui-font-bold oui-text-base-contrast-80\">\n USDC\n </Text>\n </Flex>\n <Flex\n direction=\"row\"\n gapX={1}\n itemAlign={\"center\"}\n className=\"oui-text-sm oui-text-base-contrast\"\n >\n <Text.numeral visible={props.visible}>\n {props.unrealPnL ?? \"--\"}\n </Text.numeral>\n <Text.numeral\n visible={props.visible}\n rule=\"percentages\"\n prefix={\"(\"}\n suffix={\")\"}\n >\n {props.unrealROI ?? \"--\"}\n </Text.numeral>\n </Flex>\n <div\n className=\"oui-absolute oui-right-0 oui-top-0 oui-flex oui-h-full oui-items-center oui-justify-center oui-px-4\"\n onClick={() =>\n props.routerAdapter?.onRouteChange({\n href: PortfolioLeftSidebarPath.Assets,\n name: \"Assets\",\n })\n }\n >\n <ArrowRightShortIcon size={18} color=\"white\" opacity={0.54} />\n </div>\n </Flex>\n );\n};\n\ntype LinkDeviceStorage = { chainId: number; chainNamespace: ChainNamespace };\n\nfunction getLinkDeviceStorage() {\n try {\n const linkDeviceStorage = localStorage.getItem(\"orderly_link_device\");\n const json = linkDeviceStorage ? parseJSON(linkDeviceStorage) : null;\n return json as LinkDeviceStorage;\n } catch (err) {\n console.error(\"getLinkDeviceStorage\", err);\n }\n}\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Flex,\n Text,\n SettingFillIcon,\n ChevronRightIcon,\n} from \"@orderly.network/ui\";\nimport { RouterAdapter } from \"@orderly.network/ui-scaffold\";\nimport { PortfolioLeftSidebarPath } from \"../../../layout\";\n\ntype Props = {\n routerAdapter?: RouterAdapter;\n};\n\nexport const SettingRouterMobile: FC<Props> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n direction={\"row\"}\n width={\"100%\"}\n className=\"oui-cursor-pointer oui-items-center oui-gap-2 oui-rounded-xl oui-bg-base-9 oui-p-4 oui-mb-3\"\n onClick={() =>\n props?.routerAdapter?.onRouteChange({\n href: PortfolioLeftSidebarPath.Setting,\n name: t(\"portfolio.setting\"),\n })\n }\n >\n <SettingFillIcon size={18} opacity={0.98} color=\"white\" />\n <Text className=\"oui-text-base oui-font-semibold oui-text-base-contrast-80\">\n {t(\"portfolio.setting\")}\n </Text>\n <ChevronRightIcon\n className=\"oui-ml-auto\"\n size={18}\n opacity={0.36}\n color=\"white\"\n />\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { isNumber } from \"lodash\";\nimport { RefferalAPI as API } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Flex,\n Text,\n TraderMobileIcon,\n ChevronRightIcon,\n cn,\n} from \"@orderly.network/ui\";\nimport { RouterAdapter } from \"@orderly.network/ui-scaffold\";\nimport { commifyOptional } from \"@orderly.network/utils\";\n\ntype TraderCardMobileProps = {\n referralInfo?: API.ReferralInfo;\n routerAdapter?: RouterAdapter;\n};\n\nexport const TraderCardMobile: FC<TraderCardMobileProps> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n className=\"\n oui-via-21.6% \n oui-via-83.23% \n oui-relative \n oui-h-[112px] \n oui-w-full \n oui-flex-col \n oui-items-start \n oui-rounded-xl \n oui-border\n oui-border-solid \n oui-border-[rgba(var(--oui-gradient-success-start)/0.36)]\n oui-bg-gradient-to-r\n oui-from-[rgba(var(--oui-gradient-success-end)/0.12)]\n oui-to-[rgba(var(--oui-gradient-success-start)/0.12)]\n oui-p-3\n \"\n >\n <Flex className=\"oui-w-full oui-flex-row oui-justify-between oui-items-center\">\n <Flex className=\"oui-flex-col oui-items-start\">\n <Text className=\"oui-text-base-contrast oui-text-base oui-font-semibold\">\n {t(\"affiliate.trader.rebates\")}\n </Text>\n <Text className=\"oui-text-2xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"affiliate.trader.tradingRebates\")}\n </Text>\n </Flex>\n <TraderMobileIcon />\n </Flex>\n\n <Flex\n className={cn(\n \"oui-mt-auto oui-w-full oui-flex-row oui-items-center oui-gap-1\",\n )}\n >\n <img\n src=\"https://oss.orderly.network/static/symbol_logo/USDC.png\"\n alt=\"USDC\"\n className=\"oui-size-5\"\n />\n <Text\n className={cn(\n \"oui-text-xs oui-font-semibold\",\n isNumber(\n props?.referralInfo?.referee_info?.[\"30d_referee_rebate\"],\n ) && props?.referralInfo?.referee_info?.[\"30d_referee_rebate\"] != 0\n ? \"oui-text-base-contrast\"\n : \"oui-text-base-contrast-36\",\n )}\n >\n {commifyOptional(\n props?.referralInfo?.referee_info?.[\"30d_referee_rebate\"],\n { fix: 2, fallback: \"--\" },\n )}\n </Text>\n <Text className=\"oui-text-xs oui-font-semibold oui-text-base-contrast-36\">\n (30D)\n </Text>\n <ChevronRightIcon\n size={18}\n color=\"white\"\n className=\"oui-ml-auto\"\n onClick={() =>\n props?.routerAdapter?.onRouteChange({\n href: \"/rewards/affiliate?tab=trader\",\n name: t(\"tradingRewards.rewards\"),\n })\n }\n />\n </Flex>\n </Flex>\n );\n};\n","import { FC, useState, useEffect } from \"react\";\nimport { isNumber } from \"lodash\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Flex,\n Text,\n TradingRewardsIcon,\n ChevronRightIcon,\n OrderlyIcon,\n EsOrderlyIcon,\n cn,\n modal,\n} from \"@orderly.network/ui\";\nimport { UseRewardsDataReturn } from \"./useRewardsData.script\";\n\ntype TradingRewardsCardMobileProps = UseRewardsDataReturn & {\n isSignIn: boolean;\n wrongNetwork: boolean;\n goToClaim: () => void;\n};\n\nexport const TradingRewardsCardMobile: FC<TradingRewardsCardMobileProps> = (\n props,\n) => {\n const { t } = useTranslation();\n\n const curEpochInfo = props.epochList?.[1].curEpochInfo;\n // const startTime = curEpochInfo?.start_time;\n const endTime = curEpochInfo?.end_time;\n const curEpochId = curEpochInfo?.epoch_id;\n // const max_reward_amount = curEpochInfo?.max_reward_amount;\n\n const isOrder = curEpochInfo\n ? `${curEpochInfo?.epoch_token}`.toLowerCase() === \"order\"\n : undefined;\n\n const onClaim = (event: React.MouseEvent<SVGSVGElement>) => {\n if (!props.isSignIn || props.wrongNetwork) {\n event.stopPropagation();\n event.preventDefault();\n modal.alert({\n title: t(\"common.tips\"),\n message: (\n <Text intensity={54}>\n {props.wrongNetwork\n ? t(\"connector.wrongNetwork.tooltip\")\n : t(\"affiliate.connectWallet.tooltip\")}\n </Text>\n ),\n });\n } else {\n props.goToClaim();\n }\n };\n\n return (\n <Flex\n className=\"\n oui-via-21.6% \n oui-via-83.23% \n oui-relative \n oui-h-[236px] \n oui-w-full \n oui-flex-col \n oui-items-start\n oui-rounded-xl \n oui-border \n oui-border-solid \n oui-border-[rgba(var(--oui-gradient-secondary-start)/0.36)] \n oui-bg-gradient-to-r\n oui-from-[rgba(var(--oui-gradient-secondary-end)/0.12)]\n oui-to-[rgba(var(--oui-gradient-secondary-start)/0.12)]\n oui-p-3\n \"\n >\n <Flex className=\"oui-w-full oui-flex-row oui-justify-between oui-items-center\">\n <Flex className=\"oui-flex-col oui-items-start\">\n <Text className=\"oui-text-base-contrast oui-text-base oui-font-semibold oui-whitespace-pre max-[400px]:oui-text-[15px]\">\n {t(\"common.tradingRewards\")}\n </Text>\n <Text className=\"oui-text-2xs oui-font-normal oui-whitespace-pre oui-text-base-contrast-54\">\n {t(\"tradingRewards.subtitle.mm\")}\n </Text>\n </Flex>\n <TradingRewardsIcon />\n </Flex>\n <Flex\n direction=\"row\"\n itemAlign={\"center\"}\n className=\"oui-mb-3 oui-mt-[35px] oui-w-full oui-justify-center oui-gap-1.5\"\n >\n <Text className=\"oui-text-sm oui-font-normal oui-text-base-contrast-80\">\n {t(\"tradingRewards.epoch\")}\n </Text>\n <Text className=\"oui-text-base-contrast oui-text-sm oui-font-bold\">\n {curEpochId}\n </Text>\n </Flex>\n <Countdown targetTimestamp={endTime} />\n <Flex className=\"oui-mt-auto oui-w-full oui-flex-row oui-items-center oui-gap-1\">\n {isOrder ? (\n <OrderlyIcon className=\"oui-size-5\" />\n ) : (\n <EsOrderlyIcon className=\"oui-size-5\" />\n )}\n <Text\n className={cn(\n \"oui-text-xs oui-font-semibold\",\n isNumber(props?.curEpochEstimate?.est_r_wallet)\n ? \"oui-text-base-contrast\"\n : \"oui-text-base-contrast-36\",\n )}\n >\n {props?.curEpochEstimate?.est_r_wallet ?? \"--\"}\n </Text>\n <Flex className=\"oui-ml-auto\">\n <ChevronRightIcon\n size={18}\n color=\"white\"\n className=\"oui-ml-auto\"\n onClick={onClaim}\n />\n </Flex>\n </Flex>\n </Flex>\n );\n};\n\nconst Countdown: FC<{\n targetTimestamp?: number;\n}> = ({ targetTimestamp }) => {\n const [timeLeft, setTimeLeft] = useState({\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n });\n\n useEffect(() => {\n const intervalId = setInterval(() => {\n if (typeof targetTimestamp === \"undefined\") return;\n const now = new Date().getTime();\n const distance = targetTimestamp - now;\n\n if (distance < 0) {\n clearInterval(intervalId as unknown as number);\n setTimeLeft({\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n });\n } else {\n const days = Math.floor(distance / (1000 * 60 * 60 * 24));\n const hours = Math.floor(\n (distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60),\n );\n const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\n const seconds = Math.floor((distance % (1000 * 60)) / 1000);\n\n setTimeLeft({ days, hours, minutes, seconds });\n }\n }, 1000);\n\n return () => clearInterval(intervalId as unknown as number);\n }, [targetTimestamp]);\n\n return (\n <Flex\n direction=\"row\"\n itemAlign={\"center\"}\n className=\"oui-w-full oui-justify-around\"\n >\n <CountDownItem type=\"D\" value={timeLeft.days} />\n <CountDownItem type=\"H\" value={timeLeft.hours} />\n <CountDownItem type=\"M\" value={timeLeft.minutes} />\n <CountDownItem type=\"S\" value={timeLeft.seconds} />\n </Flex>\n );\n};\n\nconst CountDownItem = ({ type, value }: { type: string; value: number }) => {\n return (\n <Flex\n direction=\"column\"\n itemAlign={\"center\"}\n className=\"oui-h-11 oui-w-8 oui-rounded-[6px] oui-bg-white/[0.08]\"\n >\n <Text className=\"oui-text-base-contrast oui-text-base oui-font-bold\">\n {value}\n </Text>\n <Text className=\"oui-text-2xs oui-font-normal oui-text-base-contrast-36\">\n {type}\n </Text>\n </Flex>\n );\n};\n","import { useMemo, useRef, useEffect } from \"react\";\nimport {\n useAllBrokers,\n useConfig,\n useCurEpochEstimate,\n useEpochInfo,\n useGetClaimed,\n useAccount,\n RefferalAPI as API,\n usePrivateQuery,\n} from \"@orderly.network/hooks\";\nimport { DistributionId, TWType } from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { useOverviewContext } from \"../provider/overviewContext\";\n\nexport const useRewardsData = ({ type = TWType.normal }: { type?: TWType }) => {\n const totalOrderClaimedReward = useGetClaimed(\n type === TWType.mm ? DistributionId.mmOrder : DistributionId.order,\n );\n const [curEpochEstimate] = useCurEpochEstimate(type);\n const [brokers] = useAllBrokers();\n const { state } = useAccount();\n const { data, mutate } = usePrivateQuery<API.ReferralInfo>(\n \"/v1/referral/info\",\n {\n revalidateOnFocus: true,\n },\n );\n\n const epochList = useEpochInfo(type as TWType);\n const brokerId = useConfig(\"brokerId\");\n const brokerName = useMemo(() => {\n return brokers?.[brokerId];\n }, [brokerId, brokers]);\n\n const lastStete = useRef<AccountStatusEnum>(AccountStatusEnum.NotConnected);\n\n useEffect(() => {\n let timerId: any;\n if (lastStete.current !== state.status) {\n lastStete.current = state.status;\n timerId = setTimeout(() => {\n mutate();\n }, 1000);\n }\n\n return () => {\n if (timerId) clearTimeout(timerId);\n };\n }, [state.status]);\n\n return {\n totalOrderClaimedReward,\n curEpochEstimate,\n epochList,\n brokerName,\n referralInfo: data,\n };\n};\n\nexport const useRewardsDataScript = () => {\n const {\n totalOrderClaimedReward,\n curEpochEstimate,\n epochList,\n brokerName,\n referralInfo,\n } = useOverviewContext();\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n const isSignIn =\n state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected;\n\n return {\n totalOrderClaimedReward,\n curEpochEstimate,\n epochList,\n brokerName,\n isSignIn,\n referralInfo,\n wrongNetwork,\n };\n};\n\nexport type UseRewardsDataReturn = ReturnType<typeof useRewardsData>;\n","import { FC, PropsWithChildren, useMemo } from \"react\";\nimport { TWType } from \"@orderly.network/hooks\";\nimport { useRewardsData } from \"../mobile/useRewardsData.script\";\nimport { useAssetsHistoryData } from \"../shared/useAssetHistory\";\nimport { OverviewContext, OverviewContextState } from \"./overviewContext\";\n\nconst localKey = \"portfolio_performance_period\";\n\nexport const OverviewProvider: FC<PropsWithChildren<{ type?: TWType }>> = (\n props,\n) => {\n const { type, children } = props;\n const state = useAssetsHistoryData(localKey, { isRealtime: true });\n const rewardsData = useRewardsData({ type: type });\n\n const memoizedValue = useMemo<OverviewContextState>(() => {\n return {\n ...state,\n type: type,\n ...rewardsData,\n };\n }, [state, type, rewardsData]);\n\n return (\n <OverviewContext.Provider value={memoizedValue}>\n {children}\n </OverviewContext.Provider>\n );\n};\n","export { FeeTierPage } from \"./page\";\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useAccountInfo,\n usePrivateQuery,\n} from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum, API } from \"@orderly.network/types\";\nimport type { Column } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useFeeTierColumns } from \"./column\";\nimport { dataSource as defaultDataSource } from \"./dataSource\";\n\nexport type useFeeTierScriptReturn = ReturnType<typeof useFeeTierScript>;\n\nexport type UseFeeTierScriptOptions = {\n dataAdapter?: (\n columns: Column[],\n dataSource: any[],\n ) => { columns: Column[]; dataSource: any[] };\n onRow?: (\n record: any,\n index: number,\n ) => {\n normal: any;\n active: any;\n };\n};\n\nexport const useFeeTierScript = (options?: UseFeeTierScriptOptions) => {\n const { dataAdapter } = options || {};\n const [tier, setTier] = useState<number>();\n const { data } = useAccountInfo();\n const { state } = useAccount();\n\n const cols = useFeeTierColumns();\n\n const { data: volumeStatistics } = usePrivateQuery<\n { perp_volume_last_30_days: number } | undefined\n >(\"/v1/volume/user/stats\");\n\n const { columns, dataSource } = useMemo(() => {\n return typeof dataAdapter === \"function\"\n ? dataAdapter(cols, defaultDataSource)\n : { columns: cols, dataSource: defaultDataSource };\n }, [dataAdapter, cols]);\n\n const getFuturesCurrentTier = (\n feeList: typeof defaultDataSource,\n data: API.AccountInfo,\n ) => {\n const { futures_taker_fee_rate = 0, futures_maker_fee_rate = 0 } = data;\n const takerRate = `${new Decimal(futures_taker_fee_rate)\n .mul(0.01)\n .toString()}%`;\n const makerRate = `${new Decimal(futures_maker_fee_rate)\n .mul(0.01)\n .toString()}%`;\n\n for (const item of feeList) {\n if (takerRate === item.taker_fee && makerRate === item.maker_fee) {\n return item.tier;\n }\n }\n };\n\n useEffect(() => {\n if (!data) {\n return;\n }\n\n const tier = getFuturesCurrentTier(dataSource, data);\n setTier(tier!);\n }, [data, dataSource]);\n\n const futures_taker_fee_rate = useMemo(() => {\n const value = data?.futures_taker_fee_rate;\n if (typeof value === \"undefined\") {\n return undefined;\n }\n return `${new Decimal(value).mul(0.01).toString()}%`;\n }, [data]);\n\n const futures_maker_fee_rate = useMemo(() => {\n const value = data?.futures_maker_fee_rate;\n if (typeof value === \"undefined\") {\n return undefined;\n }\n return `${new Decimal(value).mul(0.01).toString()}%`;\n }, [data]);\n\n const authData = useDataTap(\n {\n tier,\n vol: volumeStatistics?.perp_volume_last_30_days,\n takerFeeRate: futures_taker_fee_rate,\n makerFeeRate: futures_maker_fee_rate,\n },\n {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n },\n );\n\n return {\n ...authData,\n columns,\n dataSource,\n onRow: options?.onRow,\n };\n};\n","import { useMemo } from \"react\";\nimport { type Column, Text } from \"@orderly.network/ui\";\nimport { numberToHumanStyle } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const useFeeTierColumns = () => {\n const { t } = useTranslation();\n const columns = useMemo(() => {\n return [\n {\n title: t(\"portfolio.feeTier.column.tier\"),\n dataIndex: \"tier\",\n align: \"left\",\n width: 100,\n },\n {\n title: `${t(\"portfolio.feeTier.column.30dVolume\")} (USDC)`,\n dataIndex: \"volume\",\n align: \"center\",\n width: 170,\n render: (value, row) => {\n const { volume_min, volume_max, volume_node } = row;\n\n if (volume_node) return volume_node;\n if (!volume_min && !volume_max) {\n return <div style={{ fontVariantLigatures: \"none\" }}>--</div>;\n }\n\n if (volume_min && !volume_max) {\n return (\n <div>\n {t(\"portfolio.feeTier.column.30dVolume.above\", {\n volume: numberToHumanStyle(\n volume_min,\n volume_min === 2500000 ? 1 : 0\n ),\n })}\n </div>\n );\n }\n return (\n <div>\n {volume_min &&\n numberToHumanStyle(volume_min, volume_min === 2500000 ? 1 : 0)}\n {` - `}\n {volume_max &&\n numberToHumanStyle(volume_max, volume_max === 2500000 ? 1 : 0)}\n </div>\n );\n },\n },\n {\n title: t(\"portfolio.feeTier.column.maker\"),\n dataIndex: \"maker_fee\",\n align: \"right\",\n width: 100,\n render: (value) => {\n return <Text>{value}</Text>;\n },\n },\n {\n title: t(\"portfolio.feeTier.column.taker\"),\n dataIndex: \"taker_fee\",\n align: \"right\",\n width: 100,\n render: (value) => {\n return <Text>{value}</Text>;\n },\n },\n ] as Column[];\n }, [t]);\n\n return columns;\n};\n","export const dataSource = [\n {\n tier: 1,\n maker_fee: \"0.03%\",\n taker_fee: \"0.06%\",\n volume_min: 0,\n volume_max: 500000,\n },\n {\n tier: 2,\n maker_fee: \"0.02%\",\n taker_fee: \"0.05%\",\n volume_min: 500000,\n volume_max: 2500000,\n },\n {\n tier: 3,\n maker_fee: \"0.015%\",\n taker_fee: \"0.045%\",\n volume_min: 2500000,\n volume_max: 10000000,\n },\n {\n tier: 4,\n maker_fee: \"0.01%\",\n taker_fee: \"0.04%\",\n volume_min: 10000000,\n volume_max: 50000000,\n },\n {\n tier: 5,\n maker_fee: \"0.005%\",\n taker_fee: \"0.035%\",\n volume_min: 50000000,\n volume_max: 125000000,\n or: \"/\",\n staking_min: 300000,\n staking_max: null,\n },\n {\n tier: 6,\n maker_fee: \"0%\",\n taker_fee: \"0.03%\",\n volume_min: 125000000,\n volume_max: null,\n or: \"/\",\n staking: null,\n staking_min: null,\n staking_max: null,\n },\n];\n","import React, { ReactNode, useCallback, useEffect, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport {\n Box,\n Flex,\n Text,\n Card,\n Divider,\n DataTable,\n Column,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport type { useFeeTierScriptReturn } from \"./feeTier.script\";\n\nexport type FeeTierProps = useFeeTierScriptReturn;\n\nexport type FeeTierHeaderProps = {\n tier?: number;\n vol?: number;\n takerFeeRate?: string;\n makerFeeRate?: string;\n};\n\nexport type FeeTierHeaderItemProps = {\n label: string;\n value: ReactNode;\n needCustom?: boolean;\n};\n\nexport const FeeTierHeaderItem: React.FC<FeeTierHeaderItemProps> = (props) => {\n const { label, value, needCustom } = props;\n const { widgetConfigs } = useAppContext();\n const customTag = widgetConfigs?.feeTier?.tag;\n return (\n <Box\n gradient=\"neutral\"\n r=\"lg\"\n px={4}\n py={2}\n angle={184}\n width=\"100%\"\n border\n borderColor={6}\n >\n <Text\n as=\"div\"\n intensity={36}\n size=\"2xs\"\n weight=\"semibold\"\n className=\"oui-leading-[18px]\"\n >\n {label}\n </Text>\n <Flex\n className=\"oui-mt-1 oui-w-full\"\n itemAlign=\"center\"\n justify=\"between\"\n >\n <Text size=\"base\" intensity={80} className=\"oui-leading-[24px]\">\n {value}\n </Text>\n {needCustom && typeof customTag === \"function\" ? customTag() : null}\n </Flex>\n </Box>\n );\n};\n\nexport const FeeTierHeader: React.FC<FeeTierHeaderProps> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex direction=\"row\" gapX={4} my={4} itemAlign={\"stretch\"}>\n <FeeTierHeaderItem\n label={t(\"portfolio.feeTier.header.yourTier\")}\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.tier || \"--\"}\n </Text.gradient>\n }\n />\n <FeeTierHeaderItem\n label={`${t(\"portfolio.feeTier.header.30dVolume\")} (USDC)`}\n value={\n <Text.numeral rule=\"price\" dp={2} rm={Decimal.ROUND_DOWN}>\n {typeof props.vol !== undefined ? `${props.vol}` : \"-\"}\n </Text.numeral>\n }\n />\n <FeeTierHeaderItem\n needCustom\n label={t(\"portfolio.feeTier.header.takerFeeRate\")}\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.takerFeeRate || \"--\"}\n </Text.gradient>\n }\n />\n <FeeTierHeaderItem\n needCustom\n label={t(\"portfolio.feeTier.header.makerFeeRate\")}\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.makerFeeRate || \"--\"}\n </Text.gradient>\n }\n />\n </Flex>\n );\n};\n\ntype FeeTierTableProps = {\n columns: Column[];\n dataSource?: any[];\n page?: number;\n pageSize?: number;\n dataCount?: number;\n tier?: number | null;\n onRow?: (\n record: any,\n index: number,\n ) => {\n normal: any;\n active: any;\n };\n};\n\nexport const FeeTierTable: React.FC<FeeTierTableProps> = (props) => {\n const [top, setTop] = useState<undefined | number>(undefined);\n\n const { widgetConfigs } = useAppContext();\n\n useEffect(() => {\n const parentRect = document\n .getElementById(\"oui-fee-tier-content\")\n ?.getBoundingClientRect();\n\n const elementRect = document\n .getElementById(\"oui-fee-tier-current\")\n ?.getBoundingClientRect();\n\n if (elementRect && parentRect && !!props.tier) {\n const offsetTop = elementRect.top - parentRect.top;\n setTop(offsetTop);\n } else {\n setTop(undefined);\n }\n }, [props.tier]);\n\n const onRow = useCallback(\n (record: any, index: number) => {\n const config = props?.onRow?.(record, index) ?? {\n normal: undefined,\n active: undefined,\n };\n if (index + 1 == props.tier) {\n const innerConfig = {\n id: \"oui-fee-tier-current\",\n \"data-state\": \"active\",\n className:\n \"group oui-h-12 oui-text-[rgba(0,0,0,0.88)] oui-pointer-events-none\",\n };\n return {\n ...innerConfig,\n ...config.active,\n };\n }\n return {\n \"data-state\": \"none\",\n ...{ className: \"oui-h-12\" },\n ...config.normal,\n };\n },\n [props.tier, props.onRow],\n );\n\n const originalTable = (\n <Box\n id=\"oui-fee-tier-content\"\n className=\"oui-relative oui-border-b oui-border-line-4\"\n >\n {top && (\n <Box\n angle={90}\n gradient=\"brand\"\n className=\"oui-absolute oui-w-full oui-rounded-md\"\n style={{ top: `${top}px`, height: \"48px\" }}\n />\n )}\n <DataTable\n bordered\n className=\"oui-font-semibold\"\n classNames={{ root: \"oui-bg-transparent\" }}\n onRow={onRow}\n columns={props.columns}\n dataSource={props.dataSource}\n />\n </Box>\n );\n\n const customTable = widgetConfigs?.feeTier?.table;\n\n return typeof customTable === \"function\"\n ? customTable(originalTable)\n : originalTable;\n};\n\nexport const FeeTier: React.FC<FeeTierProps> = (props) => {\n const { columns, dataSource, tier, vol, takerFeeRate, makerFeeRate } = props;\n const { widgetConfigs } = useAppContext();\n const { t } = useTranslation();\n const customHeader = widgetConfigs?.feeTier?.header;\n return (\n <Card\n title={\n <Flex justify={\"between\"}>\n <Text size=\"lg\">{t(\"portfolio.feeTier\")}</Text>\n <Flex gap={1}>\n <Text size=\"xs\" intensity={54}>\n {t(\"portfolio.feeTier.updatedDailyBy\")}\n </Text>\n <Text size=\"xs\" intensity={80}>\n 2:00 UTC\n </Text>\n </Flex>\n </Flex>\n }\n className=\"w-full\"\n id=\"oui-portfolio-fee-tier\"\n >\n <Divider />\n {typeof customHeader === \"function\" ? customHeader() : null}\n <FeeTierHeader\n tier={tier!}\n vol={vol!}\n takerFeeRate={takerFeeRate!}\n makerFeeRate={makerFeeRate!}\n />\n <FeeTierTable\n dataSource={dataSource}\n columns={columns}\n tier={tier}\n onRow={props.onRow}\n />\n </Card>\n );\n};\n","import { FC } from \"react\";\nimport { useFeeTierScript, UseFeeTierScriptOptions } from \"./feeTier.script\";\nimport { FeeTier } from \"./feeTier.ui\";\n\nexport type FeeTierWidgetProps = UseFeeTierScriptOptions;\n\nexport const FeeTierWidget: FC<FeeTierWidgetProps> = (props) => {\n const state = useFeeTierScript(props);\n return <FeeTier {...state} />;\n};\n","import { FC } from \"react\";\nimport { FeeTierWidget, FeeTierWidgetProps } from \"./feeTier.widget\";\n\nexport type FeeTierPageProps = FeeTierWidgetProps;\n\nexport const FeeTierPage: FC<FeeTierPageProps> = (props) => {\n return <FeeTierWidget {...props} />;\n};\n","import { useMemo, useState } from \"react\";\nimport React from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Flex,\n Text,\n Divider,\n Box,\n Tabs,\n TabPanel,\n DataFilter,\n formatAddress,\n} from \"@orderly.network/ui\";\nimport {\n LiquidationWidget,\n PositionHistoryWidget,\n PositionsProps,\n CombinePositionsWidget,\n PositionsWidget,\n} from \"@orderly.network/ui-positions\";\nimport type { SelectOption } from \"@orderly.network/ui/src/select/withOptions\";\nimport { AccountType } from \"../assets/assets.ui\";\n\nenum TabsType {\n positions = \"Positions\",\n positionHistory = \"Position history\",\n liquidation = \"Liquidation\",\n}\n\nexport const PositionsPage: React.FC<PositionsProps> = (props) => {\n const [tab, setTab] = useState(TabsType.positions);\n const { t } = useTranslation();\n const { state, isMainAccount } = useAccount();\n\n const subAccounts = state.subAccounts ?? [];\n\n const [selectedAccount, setAccount] = React.useState<string>(AccountType.ALL);\n\n const onAccountFilter = React.useCallback(\n (filter: { name: string; value: string }) => {\n const { name, value } = filter;\n if (name === \"account\") {\n setAccount(value);\n }\n },\n [],\n );\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\n\n return (\n <Flex\n // p={6}\n direction={\"column\"}\n itemAlign={\"start\"}\n gap={4}\n width=\"100%\"\n height=\"100%\"\n >\n <Flex>\n <Text size=\"lg\">{t(\"common.positions\")}</Text>\n </Flex>\n <Divider className=\"oui-w-full\" />\n {/* 26(title height) + 1(divider) + 32 (padding) */}\n <Box width=\"100%\" className=\"oui-h-[calc(100%_-_59px)]\">\n <Tabs\n value={tab}\n onValueChange={(e) => setTab(e as any)}\n classNames={{\n tabsList: \"!oui-border-none oui-pb-1\",\n tabsContent: \"oui-h-[calc(100%_-_28px)]\",\n }}\n className=\"oui-h-full\"\n >\n <TabPanel value={TabsType.positions} title={t(\"common.positions\")}>\n {isMainAccount && (\n <DataFilter\n onFilter={onAccountFilter}\n items={[\n {\n type: \"select\",\n name: \"account\",\n value: selectedAccount,\n options: memoizedOptions,\n },\n ]}\n />\n )}\n {isMainAccount ? (\n <CombinePositionsWidget\n selectedAccount={selectedAccount}\n {...props}\n />\n ) : (\n <PositionsWidget {...props} />\n )}\n </TabPanel>\n <TabPanel\n value={TabsType.positionHistory}\n title={t(\"positions.positionHistory\")}\n >\n <PositionHistoryWidget {...props} />\n </TabPanel>\n <TabPanel\n value={TabsType.liquidation}\n title={t(\"positions.liquidation\")}\n >\n <LiquidationWidget />\n </TabPanel>\n </Tabs>\n </Box>\n </Flex>\n );\n};\n","import { FC, SVGProps, useRef } from \"react\";\nimport React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Button, Divider, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { OrderListInstance, OrdersWidget } from \"@orderly.network/ui-orders\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const OrdersPage = (props: { sharePnLConfig?: SharePnLConfig }) => {\n const { sharePnLConfig } = props;\n const { t } = useTranslation();\n\n const ordersRef = useRef<OrderListInstance>(null);\n\n const onDownload = () => {\n ordersRef.current?.download?.();\n };\n\n return (\n <Flex\n // p={6}\n direction={\"column\"}\n itemAlign={\"start\"}\n gap={4}\n width=\"100%\"\n height=\"100%\"\n >\n <Flex width=\"100%\" justify=\"between\">\n <Text size=\"lg\">{t(\"common.orders\")}</Text>\n <Tooltip content={t(\"orders.download.tooltip\")}>\n <Button\n color=\"gray\"\n size=\"sm\"\n className=\"oui-bg-base-4\"\n onClick={onDownload}\n >\n {t(\"common.download\")}\n <TooltipIcon className=\"oui-text-base-contrast-36 oui-ml-[5px]\" />\n </Button>\n </Tooltip>\n </Flex>\n <Divider className=\"oui-w-full\" />\n {/* 26(title height) + 1(divider) + 32 (padding) */}\n <Box width=\"100%\" className=\"oui-h-[calc(100%_-_59px)]\">\n <OrdersWidget ref={ordersRef} sharePnLConfig={sharePnLConfig} />\n </Box>\n </Flex>\n );\n};\n\nconst TooltipIcon = React.forwardRef<SVGSVGElement, SVGProps<SVGSVGElement>>(\n (props, ref) => {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={ref}\n {...props}\n >\n <path d=\"M5.999 1.007a5 5 0 1 0 0 10 5 5 0 0 0 0-10m0 2.5a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1m0 1.5a.5.5 0 0 1 .5.5v2.5a.5.5 0 0 1-1 0v-2.5a.5.5 0 0 1 .5-.5\" />\n </svg>\n );\n },\n);\n","export { APIManagerWidget } from \"./apiManager.widget\";\nexport { APIManagerPage } from \"./apiManager.page\";\n","import { FC, useState } from \"react\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Button,\n Card,\n CopyIcon,\n Flex,\n PlusIcon,\n Column,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport {\n AuthGuardEmpty,\n AuthGuardDataTable,\n AuthGuardTooltip,\n} from \"@orderly.network/ui-connector\";\nimport {\n ApiManagerScriptReturns,\n capitalizeFirstChar,\n} from \"./apiManager.script\";\nimport { CreateAPIKeyDialog } from \"./dialog/createApiKey\";\nimport { CreatedAPIKeyDialog } from \"./dialog/createdApiKey\";\nimport { DeleteAPIKeyDialog } from \"./dialog/deleteApiKey\";\nimport { EditAPIKeyDialog } from \"./dialog/editApiKey\";\n\nexport const APIManager: FC<ApiManagerScriptReturns> = (props) => {\n const { t } = useTranslation();\n return (\n <Card\n title={t(\"portfolio.apiKeys\")}\n id=\"portfolio-apikey-manager\"\n className=\"oui-bg-base-9 oui-font-semibold\"\n >\n <Flex\n direction={\"column\"}\n gap={4}\n width={\"100%\"}\n className=\"oui-font-semibold\"\n >\n <AccountInfo {...props} />\n <Subtitle {...props} />\n </Flex>\n <div>\n <KeyList {...props} />\n <CreateAPIKeyDialog {...props} />\n <CreatedAPIKeyDialog {...props} />\n </div>\n </Card>\n );\n};\n\nconst AccountInfo: FC<ApiManagerScriptReturns> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n width={\"100%\"}\n gap={4}\n className=\"oui-border-t-2 oui-border-line-6 oui-pt-4\"\n >\n <Flex\n py={2}\n px={4}\n direction={\"column\"}\n itemAlign={\"start\"}\n r=\"xl\"\n gradient=\"neutral\"\n angle={27}\n border\n className=\"oui-w-1/2\"\n >\n <Text size=\"xs\" intensity={36}>\n {t(\"common.accountId\")}\n </Text>\n <Text.formatted\n size=\"base\"\n inlist={80}\n rule={\"address\"}\n copyable={props.accountId !== \"--\"}\n copyIconSize={16}\n onCopy={props.onCopyAccountId}\n copyIconTestid=\"oui-testid-apiKey-accountInfo-accountId-copy-btn\"\n >\n {props.accountId}\n </Text.formatted>\n </Flex>\n <Flex\n py={2}\n px={4}\n direction={\"column\"}\n itemAlign={\"start\"}\n r=\"xl\"\n gradient=\"neutral\"\n angle={27}\n border\n className=\"oui-w-1/2\"\n >\n <Text size=\"xs\" intensity={36}>\n {t(\"portfolio.apiKey.uid\")}\n </Text>\n <Text size=\"base\" inlist={80}>\n {props.userId}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst Subtitle: FC<ApiManagerScriptReturns> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n width={\"100%\"}\n direction={\"row\"}\n className=\"oui-text-sm oui-border-b-2 oui-border-line-6 oui-pb-4\"\n >\n <Flex direction={\"column\"} itemAlign={\"start\"} width={\"100%\"} gap={1}>\n <Text intensity={54}>{t(\"portfolio.apiKey.description\")}</Text>\n <Flex\n itemAlign={\"center\"}\n className=\"oui-text-primary-light oui-fill-primary-light hover:oui-text-primary-darken oui-cursor-pointer oui-text-2xs md:oui-text-xs xl:oui-text-sm\"\n onClick={props.onReadApiGuide}\n >\n <Text>{t(\"portfolio.apiKey.readApiGuide\")}</Text>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M4.008 7.995c0-.368.298-.666.666-.666H9.71L7.733 5.331l.937-.936 3.143 3.122c.13.13.195.304.195.479a.67.67 0 0 1-.195.478L8.67 11.596l-.937-.937 1.978-1.998H4.674a.666.666 0 0 1-.666-.666\" />\n </svg>\n </Flex>\n </Flex>\n <AuthGuardTooltip\n side=\"top\"\n tooltip={{\n connectWallet: t(\"portfolio.apiKey.create.connectWallet.tooltip\"),\n signIn: t(\"portfolio.apiKey.create.createAccount.tooltip\"),\n enableTrading: t(\"portfolio.apiKey.create.enableTrading.tooltip\"),\n wrongNetwork: t(\"portfolio.apiKey.create.wrongNetwork.tooltip\"),\n }}\n >\n <Button\n size=\"md\"\n icon={<PlusIcon />}\n variant=\"contained\"\n color=\"primary\"\n onClick={props.onCreateApiKey}\n disabled={!props.canCreateApiKey}\n // className=\"disabled:oui-cursor-default\"\n data-testid=\"oui-testid-apiKey-createApiKey-btn\"\n >\n {t(\"portfolio.apiKey.create.dialog.title\")}\n </Button>\n </AuthGuardTooltip>\n </Flex>\n );\n};\n\nconst KeyList: FC<ApiManagerScriptReturns> = (props) => {\n const { t } = useTranslation();\n const columns: Column<APIKeyItem>[] = [\n {\n title: t(\"portfolio.apiKey.column.apiKey\"),\n dataIndex: \"orderly_key\",\n render: (value) => {\n return (\n <Text.formatted\n rule={\"\"}\n copyable\n copyIconSize={16}\n onCopy={() => {\n props.onCopyApiKey?.(value);\n }}\n >\n {formatKey(value)}\n </Text.formatted>\n );\n },\n },\n {\n title: t(\"portfolio.apiKey.column.permissionType\"),\n dataIndex: \"scope\",\n render: (value) =>\n value\n ?.split(\",\")\n .map((e: any) => capitalizeFirstChar(`${e}`))\n .join(\", \"),\n },\n {\n title: t(\"portfolio.apiKey.column.restrictedIP\"),\n dataIndex: \"ip_restriction_list\",\n render: (value) => {\n let ip = value.join(\",\");\n if (ip.length === 0) {\n ip = \"--\";\n }\n return (\n <Tooltip content={ip} className=\"oui-max-w-[200px] oui-break-all\">\n <Flex gap={1}>\n <div className=\" oui-overflow-ellipsis oui-overflow-hidden\">\n {ip}\n </div>\n {ip !== \"--\" && (\n <Box width={16} height={16} className=\"oui-cursor-pointer\">\n <CopyIcon\n color=\"white\"\n opacity={0.54}\n size={16}\n onClick={(e) => {\n navigator.clipboard.writeText(ip);\n props?.onCopyIP();\n }}\n />\n </Box>\n )}\n </Flex>\n </Tooltip>\n );\n },\n },\n {\n title: t(\"portfolio.apiKey.column.expirationDate\"),\n dataIndex: \"expiration\",\n render: (value) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd\">\n {value}\n </Text.formatted>\n ),\n },\n {\n title: \"\",\n type: \"action\",\n dataIndex: \"action\",\n width: 120,\n render: (_, item) => {\n return (\n <Flex direction={\"row\"} gap={2}>\n <EditButton\n item={item}\n onUpdate={props.doEdit}\n verifyIP={props.verifyIP}\n />\n <DeleteButton item={item} onDelete={props.doDelete} />\n </Flex>\n );\n },\n },\n ];\n return (\n <AuthGuardDataTable\n bordered\n columns={columns}\n loading={props.isLoading}\n dataSource={props.keys}\n emptyView={<AuthGuardEmpty />}\n classNames={{}}\n pagination={props.pagination}\n manualPagination={false}\n />\n );\n};\n\nconst EditButton: FC<{\n item: APIKeyItem;\n onUpdate: (item: APIKeyItem, ip?: string) => Promise<void>;\n verifyIP: (ip: string) => string;\n}> = (props) => {\n const { item, onUpdate, verifyIP } = props;\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n\n return (\n <>\n <Button\n size=\"xs\"\n color=\"primary\"\n variant=\"contained\"\n onClick={(e) => {\n e.stopPropagation();\n setOpen(true);\n }}\n data-testid=\"oui-testid-apiKey-keyList-edit-btn\"\n >\n {t(\"common.edit\")}\n </Button>\n\n {open && (\n <EditAPIKeyDialog\n item={item}\n open={open}\n setOpen={setOpen}\n onUpdate={onUpdate}\n verifyIP={verifyIP}\n />\n )}\n </>\n );\n};\n\nconst DeleteButton: FC<{\n item: APIKeyItem;\n onDelete: (item: APIKeyItem) => Promise<void>;\n}> = (props) => {\n const { item, onDelete } = props;\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n return (\n <>\n <Button\n size=\"xs\"\n color=\"gray\"\n variant=\"contained\"\n onClick={(e) => {\n e.stopPropagation();\n setOpen(true);\n }}\n data-testid=\"oui-testid-apiKey-keyList-delete-btn\"\n >\n {t(\"common.delete\")}\n </Button>\n\n {open && (\n <DeleteAPIKeyDialog\n item={item}\n open={open}\n setOpen={setOpen}\n onDelete={onDelete}\n />\n )}\n </>\n );\n};\n\nexport function formatKey(value: string): string {\n if (typeof value === \"undefined\") return \"-\";\n const key = `${value}`.replace(\"ed25519:\", \"\").slice(0, 6);\n return `${key}*****`;\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n APIKeyItem,\n ScopeType,\n useAccount,\n useApiKeyManager,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { toast, usePagination } from \"@orderly.network/ui\";\n\nexport type GenerateKeyInfo = {\n key: string;\n screctKey: string;\n ip?: string;\n permissions?: string;\n};\n\nexport const useApiManagerScript = (props?: {\n filterTags?: [string];\n keyStatus?: string;\n}) => {\n const { filterTags, keyStatus } = props ?? {};\n const [showCreateDialog, setShowCreateDialog] = useState(false);\n const [showCreatedDialog, setShowCreatedDialog] = useState(false);\n const [generateKey, setGenerateKey] = useState<GenerateKeyInfo | undefined>();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { state, account } = useAccount();\n const { t } = useTranslation();\n\n const canCreateApiKey =\n !wrongNetwork &&\n !disabledConnect &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected);\n\n const [\n keys,\n {\n generateOrderlyKey,\n setIPRestriction,\n removeOrderlyKey,\n resetOrderlyKeyIPRestriction,\n refresh,\n isLoading,\n error,\n },\n ] = useApiKeyManager({\n keyInfo: { key_status: keyStatus },\n });\n\n const [curPubKey, setCurPubKey] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n account.keyStore\n .getOrderlyKey()\n ?.getPublicKey()\n .then((pubKey) => {\n setCurPubKey(pubKey);\n });\n }, [account, state]);\n\n const onCreateApiKey = () => {\n setShowCreateDialog(true);\n };\n const onReadApiGuide = () => {\n window.open(\n \"https://orderly.network/docs/build-on-omnichain/evm-api/api-authentication#api-authentication\",\n \"_blank\",\n );\n };\n\n const hideCreateDialog = () => {\n setShowCreateDialog(false);\n };\n\n const doCreate = async (\n ipRestriction?: string,\n scope?: ScopeType,\n ): Promise<number> => {\n try {\n const createdSuccess = (\n res: {\n key: string;\n secretKey: string;\n },\n ip?: string,\n ) => {\n const { key, secretKey } = res;\n hideCreateDialog();\n setGenerateKey({\n key: key,\n screctKey: secretKey,\n ip: ip,\n permissions: scope\n ?.split(\",\")\n ?.map((e) => capitalizeFirstChar(e))\n .join(\", \"),\n });\n setShowCreatedDialog(true);\n };\n\n const generateKeyRes = await generateOrderlyKey(scope);\n\n toast.success(t(\"portfolio.apiKey.created\"));\n console.log(\"xxx generateKeyRes\", generateKeyRes);\n\n if ((ipRestriction?.length || 0) > 0) {\n const key = generateKeyRes.key.startsWith(\"ed25519:\")\n ? generateKeyRes.key\n : `ed25519:${generateKeyRes.key}`;\n const res = await setIPRestriction(key, ipRestriction!);\n console.log(\"set ip res\", res);\n if (res.success) {\n createdSuccess(\n generateKeyRes,\n res.data.ip_restriction_list?.join(\",\"),\n );\n }\n } else {\n createdSuccess(generateKeyRes, undefined);\n }\n } catch (err: any) {\n if (err?.message) toast.error(err?.message);\n }\n\n return Promise.resolve(0);\n };\n\n const hideCreatedDialog = () => {\n setShowCreatedDialog(false);\n refresh();\n };\n\n const onCopyApiKeyInfo = () => {\n navigator.clipboard.writeText(JSON.stringify(generateKey));\n toast.success(t(\"portfolio.apiKey.apiInfo.copied\"));\n };\n const doConfirm = () => {\n hideCreatedDialog();\n };\n\n const doDelete = (item: APIKeyItem): Promise<any> => {\n return new Promise(async (resolve) => {\n await removeOrderlyKey(item.orderly_key)\n .then(\n async (data) => {\n if (data?.success) {\n toast.success(t(\"portfolio.apiKey.deleted\"));\n refresh();\n // delete current api key, wiil disconnect\n const curKey = await account.keyStore\n .getOrderlyKey()\n ?.getPublicKey();\n if (item.orderly_key === curKey) {\n account.destroyOrderlyKey();\n }\n }\n resolve(1);\n },\n (reject) => {},\n )\n .catch((err) => {});\n });\n };\n\n const doEdit = async (item: APIKeyItem, ip?: string): Promise<void> => {\n let future;\n if ((ip?.length || 0) === 0) {\n future = resetOrderlyKeyIPRestriction(item.orderly_key, \"ALLOW_ALL_IPS\");\n } else {\n future = setIPRestriction(item.orderly_key, ip!);\n }\n\n const data = await future;\n\n if (data.success) {\n toast.success(t(\"portfolio.apiKey.updated\"));\n refresh();\n return Promise.resolve();\n } else {\n toast.error(data.message);\n }\n return Promise.reject();\n };\n\n const onCopyAccountId = () =>\n toast.success(t(\"portfolio.apiKey.accountId.copied\"));\n const onCopyApiKey = (key?: string) => {\n if (typeof key !== \"undefined\") {\n navigator.clipboard.writeText(key.replace(\"ed25519:\", \"\"));\n }\n toast.success(t(\"portfolio.apiKey.column.apiKey.copy\"));\n };\n const onCopyApiSecretKey = () =>\n toast.success(t(\"portfolio.apiKey.secretKey.copied\"));\n const onCopyIP = () =>\n toast.success(t(\"portfolio.apiKey.column.restrictedIP.copy\"));\n\n const keyList = useMemo(() => {\n return keys?.filter((e) => {\n const filterTag = filterTags ? filterTags?.includes(e.tag) : true;\n const filterCurKey = curPubKey\n ? !e.orderly_key.includes(curPubKey)\n : true;\n return filterTag && filterCurKey;\n });\n }, [keys, filterTags, curPubKey]);\n\n const verifyIP = (ip: string) => {\n const ipRegex =\n /^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(,((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9]))*$/;\n return ipRegex.test(ip)\n ? \"\"\n : \"The IP restriction format is incorrect. Please use the correct format: [xx.xx.xxx.x],[xx.xxx.xxx.xxx]\";\n };\n\n const accountStatus =\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading;\n\n const accountId = useDataTap(state.accountId, {\n accountStatus,\n });\n\n const userId = useDataTap(state.userId, {\n accountStatus,\n });\n\n const { pagination } = usePagination();\n\n return {\n accountId: accountId ?? \"--\",\n userId: userId ?? \"--\",\n onCreateApiKey,\n onReadApiGuide,\n showCreateDialog,\n hideCreateDialog,\n doCreate,\n showCreatedDialog,\n hideCreatedDialog,\n onCopyApiKeyInfo,\n doConfirm,\n doDelete,\n doEdit,\n canCreateApiKey,\n status: state.status,\n keys: keyList,\n generateKey,\n onCopyAccountId,\n wrongNetwork,\n onCopyApiKey,\n onCopyApiSecretKey,\n onCopyIP,\n verifyIP,\n isLoading,\n pagination,\n };\n};\n\nexport function capitalizeFirstChar(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport type ApiManagerScriptReturns = ReturnType<typeof useApiManagerScript>;\n","import { FC, useEffect, useState } from \"react\";\nimport { ScopeType } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Flex, SimpleDialog, Statistic, Text } from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\n\nexport const CreateAPIKeyDialog: FC<ApiManagerScriptReturns> = (props) => {\n const [ipText, setIpText] = useState(\"\");\n const [read, setRead] = useState(true);\n const [trade, setTrade] = useState(true);\n const [hint, setHint] = useState(\"\");\n const { t } = useTranslation();\n\n useEffect(() => {\n if (!props.showCreateDialog) {\n setIpText(\"\");\n setRead(true);\n setTrade(true);\n setHint(\"\");\n }\n }, [props.showCreateDialog]);\n\n useEffect(() => {\n if (ipText.length === 0) setHint(\"\");\n }, [ipText]);\n\n return (\n <SimpleDialog\n size=\"sm\"\n open={props.showCreateDialog}\n onOpenChange={(open) => {\n props.hideCreateDialog?.();\n }}\n title={t(\"portfolio.apiKey.create.dialog.title\")}\n actions={{\n primary: {\n label: t(\"common.confirm\"),\n className: \"oui-w-[120px] lg:oui-w-[154px]\",\n \"data-testid\": \"oui-testid-apiKey-createApiKey-dialog-comfirm-btn\",\n onClick: async () => {\n if (ipText.length > 0) {\n const hint = props.verifyIP(ipText);\n setHint(hint);\n if (hint.length > 0) {\n return;\n }\n }\n\n const scopes: string[] = [];\n if (read) {\n scopes.push(\"read\");\n }\n if (trade) {\n scopes.push(\"trading\");\n }\n await props.doCreate(ipText, scopes.join(\",\") as ScopeType);\n },\n disabled: !trade && !read,\n size: \"md\",\n },\n }}\n classNames={{\n footer: \"oui-justify-center\",\n content:\n \"oui-bg-base-8 oui-w-[300px] lg:oui-w-[360px] oui-font-semibold\",\n }}\n >\n <Flex direction={\"column\"} gap={6}>\n <Flex direction={\"column\"} gap={1} width={\"100%\"} itemAlign={\"start\"}>\n <Text intensity={54} size=\"2xs\">\n {t(\"portfolio.apiKey.create.ipRestriction\")}\n </Text>\n <textarea\n data-testid=\"oui-testid-apiKey-createApiKey-dialog-textarea\"\n placeholder={t(\"portfolio.apiKey.create.ipRestriction.placeholder\")}\n className={cn(\n \"oui-h-[100px] oui-w-full oui-rounded-xl oui-bg-base-6 oui-p-3 oui-text-sm oui-text-base-contrast-80\",\n \"oui-border-0 oui-outline-none focus:oui-border-2 focus:oui-border-primary-darken\",\n \"oui-placeholder-base-contrast-20\",\n hint.length > 0 &&\n \"oui-outline-1 oui-outline-danger focus:oui-outline-none\",\n )}\n value={ipText}\n onChange={(e) => {\n setIpText(e.target.value);\n }}\n style={{\n resize: \"none\",\n }}\n />\n {hint.length > 0 && (\n <Flex gap={1} className=\"oui-relative\">\n <div\n className={cn(\n \"oui-absolute oui-top-[10px]\",\n \"oui-size-1 oui-rounded-full oui-bg-danger\",\n )}\n />\n <Text color=\"danger\" size=\"xs\" className=\"oui-ml-2\">\n {hint}\n </Text>\n </Flex>\n )}\n </Flex>\n <Statistic\n label={\n <Text size=\"xs\" intensity={54}>\n {t(\"portfolio.apiKey.permissions\")}\n </Text>\n }\n className=\"oui-w-full\"\n >\n <Flex\n direction={\"row\"}\n gap={6}\n itemAlign={\"start\"}\n className=\"oui-mt-2\"\n >\n <Checkbox\n size={18}\n checked={read}\n onCheckedChange={(e) => setRead(e as boolean)}\n label={t(\"portfolio.apiKey.permissions.read\")}\n testid=\"oui-testid-apiKey-createApiKey-dialog-read-checkbox\"\n />\n <Checkbox\n size={18}\n checked={trade}\n onCheckedChange={(e) => setTrade(e as boolean)}\n label={t(\"portfolio.apiKey.permissions.trading\")}\n testid=\"oui-testid-apiKey-createApiKey-dialog-trading-checkbox\"\n />\n </Flex>\n </Statistic>\n </Flex>\n </SimpleDialog>\n );\n};\n\nexport const Checkbox: FC<{\n size?: number;\n checked: boolean;\n onCheckedChange: (checked?: boolean) => void;\n disabled?: boolean;\n label: string;\n testid?: string;\n}> = (props) => {\n return (\n <button\n disabled={props.disabled}\n onClick={(e) => {\n props.onCheckedChange(!props.checked);\n }}\n className={\n \"oui-flex oui-items-center oui-gap-2 disabled:oui-cursor-not-allowed disabled:oui-opacity-50\"\n }\n data-testid={props.testid}\n >\n {props.checked ? (\n <svg\n width={\"props.size\"}\n height={props.size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.99072 2.92981C4.78172 2.92981 2.99072 4.72071 2.99072 6.92981V16.9298C2.99072 19.1389 4.78172 20.9298 6.99072 20.9298H16.9907C19.1997 20.9298 20.9907 19.1389 20.9907 16.9298V6.92981C20.9907 4.72071 19.1997 2.92981 16.9907 2.92981H6.99072ZM16.9853 7.31211C17.2125 7.09537 17.5236 7 17.8218 7C18.1201 7 18.4312 7.09537 18.6584 7.31211C19.1139 7.74546 19.1139 8.47384 18.6584 8.9072L10.5077 16.675C10.0534 17.1083 9.28909 17.1083 8.83472 16.675L5.34077 13.3459C4.88641 12.9126 4.88641 12.1841 5.34077 11.7508C5.79631 11.3175 6.56057 11.3175 7.01493 11.7508L9.67122 14.2822L16.9853 7.31211Z\"\n fill=\"white\"\n fillOpacity=\"0.54\"\n />\n </svg>\n ) : (\n <svg\n width={props.size}\n height={props.size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.99072 2.92981C4.78172 2.92981 2.99072 4.72071 2.99072 6.92981V16.9298C2.99072 19.1389 4.78172 20.9298 6.99072 20.9298H16.9907C19.1997 20.9298 20.9907 19.1389 20.9907 16.9298V6.92981C20.9907 4.72071 19.1997 2.92981 16.9907 2.92981H6.99072ZM6.99072 4.92981H16.9907C18.0957 4.92981 18.9907 5.82521 18.9907 6.92981V16.9298C18.9907 18.0344 18.0957 18.9298 16.9907 18.9298H6.99072C5.88572 18.9298 4.99072 18.0344 4.99072 16.9298V6.92981C4.99072 5.82521 5.88572 4.92981 6.99072 4.92981Z\"\n fill=\"white\"\n fillOpacity=\"0.54\"\n />\n </svg>\n )}\n\n <Text\n intensity={54}\n size=\"sm\"\n className=\"oui-whitespace-nowrap oui-break-normal\"\n >\n {props.label}\n </Text>\n </button>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n CopyIcon,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n} from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\n\nexport const CreatedAPIKeyDialog: FC<ApiManagerScriptReturns> = (props) => {\n const ip = props.generateKey?.ip ?? \"--\";\n const { t } = useTranslation();\n return (\n <SimpleDialog\n size=\"sm\"\n open={props.showCreatedDialog}\n onOpenChange={(open) => {\n props.hideCreatedDialog?.();\n }}\n title={t(\"portfolio.apiKey.created\")}\n actions={{\n primary: {\n label: t(\"common.ok\"),\n \"data-testid\": \"oui-testid-apiKey-createdApiKey-dialog-ok-btn\",\n className:\n \"oui-w-[120px] lg:oui-w-[154px] oui-bg-base-2 hover:oui-bg-base-3\",\n size: \"md\",\n onClick: async () => {\n return props.doConfirm();\n },\n },\n secondary: {\n label: t(\"portfolio.apiKey.created.button.copyApiInfo\"),\n \"data-testid\": \"oui-testid-apiKey-createdApiKey-dialog-copy-btn\",\n className:\n \"oui-w-[120px] lg:oui-w-[154px] oui-bg-primary-darken hover:oui-opacity-80\",\n size: \"md\",\n onClick: async () => {\n return props.onCopyApiKeyInfo();\n },\n },\n }}\n classNames={{\n footer: \"oui-justify-center\",\n content:\n \"oui-bg-base-8 oui-w-[300px] lg:oui-w-[360px] oui-font-semibold\",\n body: \"oui-py-0 oui-pt-5\",\n }}\n >\n <Flex direction={\"column\"} gap={4} itemAlign={\"start\"}>\n <Statistic label={t(\"common.accountId\")}>\n <Text.formatted\n size=\"sm\"\n intensity={80}\n copyable\n copyIconSize={16}\n className=\"oui-break-all\"\n onCopy={props.onCopyAccountId}\n data-testid=\"oui-testid-apiKey-createdApiKey-dialog-key-span\"\n >\n {props.accountId}\n </Text.formatted>\n </Statistic>\n <Statistic label={t(\"portfolio.apiKey.column.apiKey\")}>\n <Text.formatted\n size=\"sm\"\n intensity={80}\n copyable\n copyIconSize={16}\n className=\"oui-break-all\"\n onCopy={() => props.onCopyApiKey(props.generateKey?.key)}\n data-testid=\"oui-testid-apiKey-createdApiKey-dialog-key-span\"\n >\n {props.generateKey?.key}\n </Text.formatted>\n </Statistic>\n <Statistic label={t(\"portfolio.apiKey.secretKey\")}>\n <Text.formatted\n size=\"sm\"\n intensity={80}\n copyable\n copyIconSize={16}\n className=\"oui-break-all\"\n onCopy={props.onCopyApiSecretKey}\n >\n {props.generateKey?.screctKey}\n </Text.formatted>{\" \"}\n </Statistic>\n <Statistic label={t(\"portfolio.apiKey.ip\")}>\n <Flex\n width={320}\n gap={1}\n itemAlign={\"center\"}\n className=\"oui-text-base-contrast-80 oui-text-sm\"\n >\n <Box className=\"oui-max-h-[100px] oui-flex-1 oui-overflow-hidden oui-text-ellipsis oui-line-clamp-5 oui-break-all\">\n {ip}\n </Box>\n {ip !== \"--\" && (\n <Box\n width={16}\n height={16}\n className=\"oui-cursor-pointer oui-flex-shrink-0\"\n >\n <CopyIcon\n color=\"white\"\n opacity={0.54}\n size={16}\n onClick={(e) => {\n if (props.generateKey?.ip)\n navigator.clipboard.writeText(props.generateKey?.ip);\n props?.onCopyIP();\n }}\n />\n </Box>\n )}\n </Flex>\n </Statistic>\n <Statistic label={t(\"portfolio.apiKey.permissions\")}>\n <Text\n size=\"sm\"\n intensity={80}\n data-testid=\"oui-testid-apiKey-createdApiKey-dialog-permissions-span\"\n >\n {props.generateKey?.permissions}\n </Text>\n </Statistic>\n <div></div>\n <Text color=\"warning\" size=\"xs\" className=\"oui-text-center\">\n {t(\"portfolio.apiKey.created.warning\")}\n </Text>\n </Flex>\n </SimpleDialog>\n );\n};\n","import { FC } from \"react\";\nimport { Flex, SimpleDialog, Text } from \"@orderly.network/ui\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\nimport { formatKey } from \"../apiManager.ui\";\nimport { useTranslation, Trans } from \"@orderly.network/i18n\";\n\nexport const DeleteAPIKeyDialog: FC<{\n item: APIKeyItem;\n open: boolean;\n setOpen?: any;\n onDelete?: (item: APIKeyItem) => Promise<void>;\n}> = (props) => {\n const { item, open, setOpen, onDelete } = props;\n const { t } = useTranslation();\n return (\n <SimpleDialog\n size=\"sm\"\n open={open}\n onOpenChange={setOpen}\n title={t(\"portfolio.apiKey.delete.dialog.title\")}\n actions={{\n primary: {\n label: t(\"common.confirm\"),\n \"data-testid\": \"oui-testid-apiKey-deleteApiKey-dialog-confirm-btn\",\n className: \"oui-w-[120px] lg:oui-w-[154px]\",\n size: \"md\",\n onClick: async () => {\n await props.onDelete?.(item);\n setOpen(false);\n },\n },\n secondary: {\n label: t(\"common.cancel\"),\n className: \"oui-w-[120px] lg:oui-w-[154px]\",\n size: \"md\",\n onClick: async () => {\n setOpen(false);\n },\n },\n }}\n classNames={{\n footer: \"oui-justify-center\",\n content:\n \"oui-bg-base-8 oui-w-[300px] lg:oui-w-[360px] oui-font-semibold\",\n }}\n >\n <Flex className=\"oui-text-xs\">\n {/* @ts-ignore */}\n <Trans\n i18nKey=\"portfolio.apiKey.delete.dialog.description\"\n values={{ apiKey: formatKey(item?.orderly_key) }}\n components={[<Text color=\"primary\" className=\"oui-px-1\" />]}\n />\n </Flex>\n </SimpleDialog>\n );\n};\n","import { FC, useEffect, useState } from \"react\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Flex, SimpleDialog, Statistic, Text } from \"@orderly.network/ui\";\nimport { Checkbox } from \"./createApiKey\";\n\nexport const EditAPIKeyDialog: FC<{\n item: APIKeyItem;\n open: boolean;\n setOpen?: any;\n onUpdate?: (item: APIKeyItem, ip?: string) => Promise<void>;\n verifyIP: (ip: string) => string;\n}> = (props) => {\n const { item, open, setOpen, onUpdate } = props;\n const [ipText, setIpText] = useState(item.ip_restriction_list?.join(\",\"));\n const [read, setRead] = useState(true);\n const [trade, setTrade] = useState(true);\n const [hint, setHint] = useState(\"\");\n const { t } = useTranslation();\n\n useEffect(() => {\n setIpText(item.ip_restriction_list.join(\",\"));\n const scope = item.scope?.toLocaleLowerCase() || \"\";\n\n setRead(scope.includes(\"read\"));\n setTrade(scope.includes(\"trading\"));\n }, [item]);\n\n useEffect(() => {\n if (ipText.length === 0) setHint(\"\");\n }, [ipText]);\n\n return (\n <SimpleDialog\n size=\"sm\"\n open={open}\n onOpenChange={setOpen}\n title={t(\"portfolio.apiKey.edit.dialog.title\")}\n actions={{\n primary: {\n label: t(\"common.confirm\"),\n \"data-testid\": \"oui-testid-apiKey-editApiKey-dialog-confirm-btn\",\n className: \"oui-w-[120px] lg:oui-w-[154px]\",\n onClick: async () => {\n if (ipText.length > 0) {\n const hint = props.verifyIP(ipText);\n setHint(hint);\n if (hint.length > 0) {\n return;\n }\n }\n await props.onUpdate?.(item, ipText);\n setOpen(false);\n },\n disabled: item.ip_restriction_list.join(\",\") === ipText,\n size: \"md\",\n fullWidth: true,\n },\n }}\n classNames={{\n footer: \"oui-justify-center\",\n content:\n \"oui-bg-base-8 oui-w-[300px] lg:oui-w-[360px] oui-font-semibold\",\n }}\n >\n <Flex direction={\"column\"} gap={6}>\n {/* <TextField label={\"IP restriction (optional)\"} rows={5} className=\"oui-w-full oui-h-auto\" classNames={{\n input: \"oui-h-[100px]\",\n root: \"oui-h-[100px]\"\n }}/> */}\n <Flex direction={\"column\"} gap={1} width={\"100%\"} itemAlign={\"start\"}>\n <Text intensity={54} size=\"2xs\">\n {t(\"portfolio.apiKey.create.ipRestriction\")}\n </Text>\n <textarea\n data-testid=\"oui-testid-apiKey-editApiKey-dialog-textarea\"\n placeholder={t(\"portfolio.apiKey.create.ipRestriction.placeholder\")}\n className={cn(\n \"oui-h-[100px] oui-w-full oui-rounded-xl oui-bg-base-6 oui-p-3 oui-text-sm oui-text-base-contrast-80\",\n \"oui-border-0 oui-outline-none focus:oui-border-2 focus:oui-border-primary-darken\",\n \"oui-placeholder-base-contrast-20\",\n hint.length > 0 &&\n \"oui-outline-1 oui-outline-danger focus:oui-outline-none\",\n )}\n value={ipText}\n onChange={(e) => {\n setIpText(e.target.value);\n }}\n style={{\n resize: \"none\",\n }}\n />\n {hint.length > 0 && (\n <Flex gap={1} className=\"oui-relative\">\n <div\n className={cn(\n \"oui-absolute oui-top-[10px]\",\n \"oui-size-1 oui-rounded-full oui-bg-danger\",\n )}\n />\n <Text color=\"danger\" size=\"xs\" className=\"oui-ml-2\">\n {hint}\n </Text>\n </Flex>\n )}\n </Flex>\n <Statistic\n label={\n <Text size=\"xs\" intensity={54}>\n {t(\"portfolio.apiKey.permissions\")}\n </Text>\n }\n className=\"oui-w-full\"\n >\n <Flex\n direction={\"row\"}\n gap={6}\n itemAlign={\"start\"}\n className=\"oui-mt-2\"\n >\n <Checkbox\n disabled\n size={18}\n checked={read}\n onCheckedChange={(e) => setRead(e as boolean)}\n label={t(\"portfolio.apiKey.permissions.read\")}\n />\n <Checkbox\n disabled\n size={18}\n checked={trade}\n onCheckedChange={(e) => setTrade(e as boolean)}\n label={t(\"portfolio.apiKey.permissions.trading\")}\n />\n </Flex>\n </Statistic>\n </Flex>\n </SimpleDialog>\n );\n};\n","import { APIManager } from \"./apiManager.ui\";\nimport { useApiManagerScript } from \"./apiManager.script\";\n\n\nexport const APIManagerWidget = (props?: {\n filterTags?: [string];\n keyStatus?: string;\n}) => {\n const state = useApiManagerScript(props);\n return <APIManager {...state} />;\n};\n","import { APIManagerWidget } from \"./apiManager.widget\";\n\n/**\n * API key manager page\n * @param filterTags filterTags\n * @param keyStatus filterTags default is \"ACTIVE\"\n * @returns\n */\nexport const APIManagerPage = (props: {\n filterTags?: [string];\n keyStatus?: string;\n}) => {\n const { filterTags, keyStatus = \"ACTIVE\" } = props;\n return <APIManagerWidget filterTags={filterTags} keyStatus={keyStatus}/>;\n};\n","export { SettingWidget } from \"./setting.widget\";\nexport { SettingPage } from \"./setting.page\";\n","import { FC } from \"react\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { SettingScriptReturns } from \"./setting.script\";\nimport { SettingDesktop } from \"./setting.ui.desktop\";\nimport { SettingMobile } from \"./setting.ui.mobile\";\n\nexport const Setting: FC<SettingScriptReturns> = (props) => {\n const { isMobile } = useScreen();\n if (isMobile) {\n return (\n <div className=\"oui-px-3\">\n <SettingMobile {...props} />\n </div>\n );\n }\n return <SettingDesktop {...props} />;\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Card, Flex, Switch, Text } from \"@orderly.network/ui\";\nimport { AuthGuardTooltip } from \"@orderly.network/ui-connector\";\nimport { SettingScriptReturns } from \"./setting.script\";\n\nexport const SettingDesktop: FC<SettingScriptReturns> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Card\n title={t(\"portfolio.setting.systemUpgrade\")}\n id=\"portfolio-apikey-manager\"\n className=\"oui-bg-base-9 oui-font-semibold\"\n >\n <Flex\n direction={\"row\"}\n gap={4}\n width={\"100%\"}\n itemAlign={\"center\"}\n pt={4}\n className=\"oui-border-t-2 oui-border-line-6 oui-font-semibold\"\n >\n <Flex direction={\"column\"} itemAlign={\"start\"} className=\"oui-flex-1\">\n <Text intensity={80} size=\"base\">\n {t(\"portfolio.setting.cancelOpenOrders\")}\n </Text>\n <Text intensity={54} size=\"sm\">\n {t(\"portfolio.setting.cancelOpenOrders.description\")}\n </Text>\n </Flex>\n\n <AuthGuardTooltip align=\"end\">\n <Switch\n checked={props.maintenance_cancel_orders}\n onCheckedChange={(e) => {\n props.setMaintainConfig(e);\n }}\n disabled={props.isSetting || !props.canTouch}\n data-testid=\"oui-testid-setting-switch-btn\"\n />\n </AuthGuardTooltip>\n </Flex>\n </Card>\n );\n};\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Card,\n Flex,\n Switch,\n Text,\n ChevronRightIcon,\n} from \"@orderly.network/ui\";\nimport { AuthGuardTooltip } from \"@orderly.network/ui-connector\";\nimport { LanguageSwitcherWidget } from \"@orderly.network/ui-scaffold\";\nimport { SettingScriptReturns } from \"./setting.script\";\n\nexport const SettingMobile: FC<SettingScriptReturns> = (props) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState<boolean>(false);\n const onLanguageChange = () => {\n setOpen(true);\n };\n\n return (\n <>\n <Flex mt={1} mb={2} p={4} intensity={900} r=\"xl\" itemAlign=\"center\">\n <LanguageSwitcherWidget open={open} onOpenChange={setOpen} />\n <Flex\n className=\"oui-cursor-pointer\"\n itemAlign=\"center\"\n width=\"100%\"\n onClick={onLanguageChange}\n >\n <Text\n size=\"base\"\n weight=\"semibold\"\n intensity={80}\n className=\"oui-ml-2\"\n >\n {t(\"languageSwitcher.language\")}\n </Text>\n <ChevronRightIcon\n size={18}\n className=\"oui-ml-auto oui-text-base-contrast-36\"\n />\n </Flex>\n </Flex>\n\n <Card\n // @ts-ignore\n title={\n <div className=\"oui-text-sm\">\n {t(\"portfolio.setting.systemUpgrade\")}\n </div>\n }\n id=\"portfolio-apikey-manager\"\n className=\"oui-bg-base-9 oui-font-semibold\"\n classNames={{ root: \"oui-p-4\", content: \"!oui-pt-3\" }}\n >\n <Flex\n direction={\"row\"}\n gap={4}\n width={\"100%\"}\n itemAlign={\"center\"}\n pt={3}\n className=\"oui-font-semibold oui-border-t-2 oui-border-line-6\"\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1 oui-gap-2\"\n >\n <Text intensity={80} size=\"xs\">\n {t(\"portfolio.setting.cancelOpenOrders\")}\n </Text>\n <Text intensity={36} size=\"2xs\" className=\"oui-font-normal\">\n {t(\"portfolio.setting.cancelOpenOrders.description\")}\n </Text>\n <AuthGuardTooltip>\n <Switch\n className=\"oui-mt-1\"\n checked={props.maintenance_cancel_orders}\n onCheckedChange={(e) => {\n props.setMaintainConfig(e);\n }}\n disabled={props.isSetting || !props.canTouch}\n data-testid=\"oui-testid-setting-switch-btn\"\n />\n </AuthGuardTooltip>\n </Flex>\n </Flex>\n </Card>\n </>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport {\n useAccount,\n useAccountInfo,\n useDebouncedCallback,\n useMutation,\n} from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\n\nexport type SettingScriptReturns = {\n maintenance_cancel_orders?: boolean;\n setMaintainConfig: (maintenance_cancel_order_flag: boolean) => void;\n isSetting: boolean;\n canTouch: boolean;\n};\n\nexport const useSettingScript = (): SettingScriptReturns => {\n const { data, mutate: refresh } = useAccountInfo();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const [update, { isMutating }] = useMutation(\"/v1/client/maintenance_config\");\n const [checked, setChecked] = useState(false);\n\n useEffect(() => {\n setChecked(data?.maintenance_cancel_orders || false);\n }, [data]);\n\n const updateCheckState = useDebouncedCallback((value: boolean) => {\n // if (value === data?.maintenance_cancel_orders) return;\n update({\n maintenance_cancel_order_flag: value,\n }).then((data) => {\n if (data.success) {\n toast.success(value ? \"Opened\" : \"Closed\");\n } else {\n setChecked(!value);\n }\n });\n }, 300);\n\n const setMaintainConfig = (maintenance_cancel_order_flag: boolean) => {\n setChecked(maintenance_cancel_order_flag);\n updateCheckState(maintenance_cancel_order_flag);\n };\n const { state } = useAccount();\n\n const canTouch =\n !wrongNetwork &&\n !disabledConnect &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected);\n\n return {\n maintenance_cancel_orders: checked, //data?.maintenance_cancel_orders,\n setMaintainConfig,\n isSetting: false,\n canTouch,\n };\n};\n","import { Setting } from \"./setting.ui\";\nimport { useSettingScript } from \"./setting.script\";\n\n\nexport const SettingWidget = () => {\n const state = useSettingScript();\n return <Setting {...state} />;\n};\n","import { SettingWidget } from \"./setting.widget\";\n\nexport const SettingPage = () => {\n return <SettingWidget />\n};","export { AssetsPage } from \"./page\";\n","import React from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { useAssetsScript, useAssetsScriptReturn } from \"./assets.script\";\nimport { AssetsTable } from \"./assets.ui\";\nimport { AssetsTableMobile } from \"./assets.ui.mobile\";\n\nexport type AssetsWidgetProps = useAssetsScriptReturn;\n\nexport const AssetsWidget: React.FC = () => {\n const state = useAssetsScript();\n const accountState = useAccount();\n const { isMobile } = useScreen();\n\n if (isMobile) {\n return <AssetsTableMobile {...state} {...accountState} />;\n }\n\n return <AssetsTable {...state} {...accountState} />;\n};\n","import { useCallback, useEffect, useMemo } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useLocalStorage,\n useIndexPricesStream,\n useTokensInfo,\n} from \"@orderly.network/hooks\";\nimport { account } from \"@orderly.network/perp\";\nimport { modal } from \"@orderly.network/ui\";\nimport {\n DepositAndWithdrawWithDialogId,\n TransferDialogId,\n} from \"@orderly.network/ui-transfer\";\nimport { zero } from \"@orderly.network/utils\";\nimport { useAccountsData } from \"../../hooks/useAccountsData\";\nimport {\n calculateAssetValue,\n getIndexPrice,\n useAssetTotalValue,\n} from \"../../hooks/useAssetTotalValue\";\nimport { useAssetsMultiFilter } from \"../../hooks/useAssetsAccountFilter\";\nimport { useAssetsColumns } from \"./column\";\n\nconst ORDERLY_ASSETS_VISIBLE_KEY = \"orderly_assets_visible\";\n\nexport const useAssetsScript = () => {\n const [visible, setVisible] = useLocalStorage<boolean>(\n ORDERLY_ASSETS_VISIBLE_KEY,\n true,\n );\n\n const { state, subAccount, isMainAccount } = useAccount();\n const { holding = [] } = useCollateral();\n const { data: indexPrices } = useIndexPricesStream();\n\n const tokensInfo = useTokensInfo();\n\n const subAccounts = state.subAccounts ?? [];\n\n useEffect(() => {\n if (holding.length > 0) {\n subAccount.refresh();\n }\n }, [holding]);\n\n // Use the extracted total value hook\n const totalValue = useAssetTotalValue();\n\n const toggleVisible = () => {\n // @ts-ignore\n setVisible((visible: boolean) => !visible);\n };\n\n const assetsOptions = useMemo(() => {\n return (\n tokensInfo?.map((item) => ({\n label: item.token,\n value: item.token,\n })) || []\n );\n }, [tokensInfo]);\n\n // Use the extracted accounts data hook\n const allAccounts = useAccountsData();\n\n // Use the extracted account and asset filter hook\n const {\n selectedAccount,\n selectedAsset,\n filteredData: filtered,\n onFilter,\n } = useAssetsMultiFilter(allAccounts);\n\n // Enhanced filtered data with additional calculations for children\n const enhancedFiltered = useMemo(() => {\n return filtered.map((accountData) => {\n // Enhance each child (holding) with calculated fields\n const enhancedChildren =\n accountData.children?.map((holding) => {\n const tokenInfo = tokensInfo?.find(\n (item) => item.token === holding.token,\n );\n\n // Use extracted function for index price calculation\n const indexPrice = getIndexPrice(holding.token, indexPrices);\n\n // Use extracted function for asset value calculation\n const assetValue = calculateAssetValue(\n holding.holding,\n holding.token,\n indexPrices,\n ).toNumber();\n\n // Calculate collateral ratio for this token\n const collateralRatio = tokenInfo\n ? account.collateralRatio({\n baseWeight: tokenInfo.base_weight ?? 0,\n discountFactor: tokenInfo.discount_factor ?? 0,\n collateralQty: holding.holding,\n collateralCap: tokenInfo?.user_max_qty ?? holding.holding,\n indexPrice: indexPrice,\n })\n : zero;\n\n // Calculate collateral contribution for this token\n const collateralContribution = account.collateralContribution({\n collateralQty: holding.holding,\n collateralCap: tokenInfo?.user_max_qty ?? holding.holding,\n collateralRatio: collateralRatio.toNumber(),\n indexPrice: indexPrice,\n });\n\n return {\n ...holding,\n indexPrice,\n assetValue,\n collateralRatio,\n collateralContribution,\n };\n }) || [];\n\n return {\n ...accountData,\n children: enhancedChildren,\n };\n });\n }, [filtered, indexPrices, tokensInfo]);\n\n const handleTransfer = useCallback((accountId: string, token: string) => {\n if (!accountId) {\n return;\n }\n modal.show(TransferDialogId, {\n toAccountId: accountId,\n token,\n });\n }, []);\n\n const handleConvert = (accountId: string, token: string) => {\n modal.show(\"ConvertDialogId\", {\n accountId,\n token,\n });\n };\n\n const showTransfer = isMainAccount ? subAccounts.length > 0 : true;\n\n const assetsColumns = useAssetsColumns({\n onTransfer: showTransfer ? handleTransfer : undefined,\n onConvert: handleConvert,\n });\n\n const openDepositAndWithdraw = useCallback(\n (viewName: \"deposit\" | \"withdraw\") => {\n modal.show(DepositAndWithdrawWithDialogId, {\n activeTab: viewName,\n });\n },\n [],\n );\n\n const onDeposit = useCallback(() => {\n openDepositAndWithdraw(\"deposit\");\n }, []);\n\n const onWithdraw = useCallback(() => {\n openDepositAndWithdraw(\"withdraw\");\n }, []);\n\n return {\n columns: assetsColumns,\n dataSource: enhancedFiltered, // Use enhanced filtered data with calculated children\n visible: visible as boolean,\n onToggleVisibility: toggleVisible,\n selectedAccount,\n selectedAsset,\n onFilter,\n totalValue,\n hasSubAccount: subAccounts.length > 0,\n onDeposit,\n onWithdraw,\n holding,\n assetsOptions,\n };\n};\n\nexport type useAssetsScriptReturn = ReturnType<typeof useAssetsScript> &\n ReturnType<typeof useAccount>;\n","import { useMemo } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useIndexPricesStream,\n} from \"@orderly.network/hooks\";\nimport { SubAccount } from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useAccountsData } from \"./useAccountsData\";\n\nconst isNumber = (val: unknown): val is number => {\n return typeof val === \"number\" && !Number.isNaN(val);\n};\n\n// Extract index price calculation logic\nexport const getIndexPrice = (\n token: string,\n indexPrices?: Record<string, number>,\n) => {\n return token === \"USDC\" ? 1 : (indexPrices?.[`PERP_${token}_USDC`] ?? 0);\n};\n\n// Extract asset value calculation logic\nexport const calculateAssetValue = (\n holding: number,\n token: string,\n indexPrices?: Record<string, number>,\n) => {\n const indexPrice = getIndexPrice(token, indexPrices);\n return new Decimal(holding).mul(indexPrice);\n};\n\nexport const calculateTotalHolding = (\n data: SubAccount[] | SubAccount[\"holding\"],\n indexPrices?: Record<string, number>,\n) => {\n let total = new Decimal(0);\n for (const item of data) {\n if (Array.isArray(item.holding)) {\n for (const hol of item.holding) {\n if (isNumber(hol.holding)) {\n // Use extracted function for asset value calculation\n const assetValue = calculateAssetValue(\n hol.holding,\n hol.token,\n indexPrices,\n );\n total = total.plus(assetValue);\n }\n }\n } else if (isNumber(item.holding) && \"token\" in item) {\n // Use extracted function for asset value calculation\n const assetValue = calculateAssetValue(\n item.holding,\n (item as any).token,\n indexPrices,\n );\n total = total.plus(assetValue);\n }\n }\n return total;\n};\n\n/**\n * Hook to calculate total asset value across all accounts\n * @returns {number} Total asset value in USDC\n */\nexport const useAssetTotalValue = () => {\n const { state, isMainAccount } = useAccount();\n const { holding = [] } = useCollateral();\n const { data: indexPrices } = useIndexPricesStream();\n const allAccounts = useAccountsData();\n\n const subAccounts = state.subAccounts ?? [];\n\n // Calculate main account total value\n const mainTotalValue = useMemo<Decimal>(\n () => calculateTotalHolding(holding, indexPrices),\n [holding, indexPrices],\n );\n\n // Calculate sub accounts total value\n const subTotalValue = useMemo<Decimal>(\n () => calculateTotalHolding(subAccounts, indexPrices),\n [subAccounts, indexPrices],\n );\n\n // Calculate final total value\n const totalValue = useMemo<number>(() => {\n if (isMainAccount) {\n return mainTotalValue.plus(subTotalValue).toNumber();\n } else {\n const find = allAccounts.find((item) => item.id === state.accountId);\n if (Array.isArray(find?.children)) {\n return calculateTotalHolding(find.children, indexPrices).toNumber();\n }\n return 0;\n }\n }, [\n isMainAccount,\n mainTotalValue,\n subTotalValue,\n allAccounts,\n state.accountId,\n indexPrices,\n ]);\n\n return totalValue;\n};\n","import React from \"react\";\nimport { useTokensInfo } from \"@orderly.network/hooks\";\nimport { useWalletConnector } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { ChainNamespace } from \"@orderly.network/types\";\nimport { Button, cn, Flex, Text, TokenIcon } from \"@orderly.network/ui\";\nimport type { Column } from \"@orderly.network/ui\";\n\nexport interface ColumnsOptions {\n onTransfer?: (accountId: string, token: string) => void;\n onConvert?: (accountId: string, token: string) => void;\n}\n\n// Define the enhanced holding interface with calculated fields\ninterface EnhancedHolding {\n token: string;\n holding: number;\n indexPrice: number;\n assetValue: number;\n collateralRatio: number;\n collateralContribution: number;\n account_id: string;\n}\n\nexport const useAssetsColumns = (options: ColumnsOptions) => {\n const { t } = useTranslation();\n const tokensInfo = useTokensInfo();\n const { namespace } = useWalletConnector();\n const { onTransfer, onConvert } = options;\n const columns = React.useMemo<Column[]>(() => {\n return [\n {\n title: t(\"portfolio.overview.column.token\"),\n dataIndex: \"token\",\n align: \"left\",\n width: 150,\n render(val: string) {\n return (\n <Flex itemAlign=\"center\" gap={2}>\n <TokenIcon name={val} />\n {val}\n </Flex>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.qty\"),\n dataIndex: \"holding\",\n align: \"left\",\n width: 140,\n render(val: number, record) {\n const findToken = tokensInfo?.find(\n ({ token }) => token === record.token,\n );\n return (\n <Text.numeral dp={findToken?.decimals ?? 6} padding={false}>\n {val}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.indexPrice\"),\n dataIndex: \"indexPrice\",\n align: \"left\",\n width: 140,\n render(val: number) {\n return (\n <Text.numeral rule=\"price\" dp={6} currency=\"$\" padding={false}>\n {val}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.assetValue\"),\n dataIndex: \"assetValue\",\n align: \"left\",\n width: 140,\n render(val: number) {\n return (\n <Text.numeral rule=\"price\" dp={6} currency=\"$\" padding={false}>\n {val}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.collateralRatio\"),\n dataIndex: \"collateralRatio\",\n align: \"left\",\n width: 140,\n render(val: number) {\n return (\n <Text.numeral dp={2} suffix=\"%\">\n {val * 100}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"transfer.deposit.collateralContribution\"),\n dataIndex: \"collateralContribution\",\n align: \"left\",\n width: 140,\n render(val: number) {\n return (\n <Text.numeral rule=\"price\" dp={6} currency=\"$\" padding={false}>\n {val}\n </Text.numeral>\n );\n },\n },\n {\n title: null,\n dataIndex: \"account_id\",\n align: \"right\",\n width: 180,\n render(id: string, record: EnhancedHolding) {\n return (\n <Flex itemAlign=\"center\" gap={3}>\n <Button\n size={\"sm\"}\n variant={\"outlined\"}\n color={\"secondary\"}\n onClick={() => onConvert?.(id, record.token)}\n className={cn(\n record.token === \"USDC\" || namespace === ChainNamespace.solana\n ? \"oui-invisible\"\n : \"oui-visible\",\n )}\n >\n {t(\"transfer.convert\")}\n </Button>\n {onTransfer && (\n <Button\n size={\"sm\"}\n variant={\"outlined\"}\n color={\"secondary\"}\n onClick={() => onTransfer?.(id, record.token)}\n >\n {t(\"common.transfer\")}\n </Button>\n )}\n </Flex>\n );\n },\n },\n ];\n }, [t, tokensInfo, onTransfer, onConvert, namespace]);\n return columns;\n};\n","import { FC, useMemo } from \"react\";\nimport { useWalletConnector } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { ChainNamespace } from \"@orderly.network/types\";\nimport {\n Button,\n cn,\n TokenIcon,\n Text,\n formatAddress,\n DataFilter,\n modal,\n} from \"@orderly.network/ui\";\nimport { SelectOption } from \"@orderly.network/ui/src/select/withOptions\";\nimport { useAssetsScriptReturn } from \"./assets.script\";\nimport { AccountType } from \"./assets.ui\";\n\nexport const AssetsTableMobile = (props: useAssetsScriptReturn) => {\n // console.log(props);\n const { t } = useTranslation();\n\n const subAccounts = props.state.subAccounts ?? [];\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const ALL_ASSETS: SelectOption = {\n label: \"All assets\",\n value: \"all\",\n };\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\n\n // Create asset options from holding data - optimized and consistent with desktop\n const memoizedAssets = useMemo(() => {\n return [ALL_ASSETS, ...props.assetsOptions];\n }, [props.assetsOptions]);\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1 oui-px-3 oui-pb-4\">\n <div>\n {props.isMainAccount && (\n <DataFilter\n onFilter={props.onFilter}\n className=\"oui-border-none oui-py-2\"\n items={[\n {\n size: \"sm\",\n type: \"picker\",\n name: \"account\",\n value: props.selectedAccount,\n options: memoizedOptions,\n },\n {\n size: \"sm\",\n type: \"picker\",\n name: \"asset\",\n value: props.selectedAsset,\n options: memoizedAssets,\n },\n ]}\n />\n )}\n </div>\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n {props.dataSource.map((assets) => (\n <>\n <AccountTag name={assets.description ?? \"sub account\"} />\n {assets.children.map((child: any) => (\n <AssetMobileItem\n item={child}\n key={`${child.token}-${child.account_id}`}\n />\n ))}\n </>\n ))}\n </div>\n </div>\n );\n};\n\ntype AssetMobileItemProps = {\n item: any;\n};\n\nconst AssetMobileItem: FC<AssetMobileItemProps> = ({ item }) => {\n const { t } = useTranslation();\n const { namespace } = useWalletConnector();\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-3 oui-rounded-xl oui-bg-base-9 oui-p-4\">\n <div className=\"oui-flex oui-items-center oui-justify-between\">\n <div className=\"oui-flex oui-flex-col\">\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"common.token\")}\n </div>\n <div className=\"oui-flex oui-items-center oui-gap-1 oui-text-xs oui-font-semibold oui-text-base-contrast-80\">\n <TokenIcon name={item.token} className=\"oui-size-4\" /> {item.token}\n </div>\n </div>\n <div className=\"oui-flex oui-flex-col\">\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"common.quantity\")}\n </div>\n <div>\n <Text.numeral dp={6} padding={false}>\n {item.holding}\n </Text.numeral>\n </div>\n </div>\n <div className=\"oui-flex oui-flex-col\">\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"transfer.deposit.collateralContribution\")}\n </div>\n <div className=\"oui-flex oui-items-center oui-gap-1 oui-self-end oui-text-xs oui-font-semibold oui-text-base-contrast-80\">\n <Text.numeral dp={6} padding={false}>\n {item.collateralContribution}\n </Text.numeral>\n <div className=\"oui-text-base-contrast-36\">USDC</div>\n </div>\n </div>\n </div>\n <div className=\"oui-flex oui-gap-2\">\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"gray\"\n onClick={() =>\n modal.show(\"ConverSheetId\", {\n accountId: item.account_id,\n token: item.token,\n })\n }\n disabled={\n item.token === \"USDC\" || namespace === ChainNamespace.solana\n }\n className={cn(\n \"oui-flex-1 oui-border-white/[0.36] oui-text-base-contrast-54\",\n (item.token === \"USDC\" || namespace === ChainNamespace.solana) &&\n \"hover:!oui-bg-transparent disabled:oui-border-white/[0.16] disabled:!oui-bg-transparent disabled:oui-text-base-contrast-20\",\n )}\n >\n {t(\"transfer.convert\")}\n </Button>\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"gray\"\n onClick={() =>\n modal.show(\"TransferSheetId\", {\n accountId: item.account_id,\n token: item.token,\n })\n }\n className={cn(\n \"oui-flex-1 oui-border-white/[0.36] oui-text-base-contrast-54\",\n )}\n >\n {t(\"common.transfer\")}\n </Button>\n </div>\n </div>\n );\n};\n\nconst AccountTag: FC<{ name: string }> = ({ name }) => {\n return (\n <div className=\"oui-mt-2 oui-flex oui-h-[18px] oui-w-fit oui-items-center oui-rounded oui-bg-white/[0.06] oui-px-2 oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {name}\n </div>\n );\n};\n","import React from \"react\";\nimport { AssetsWidget, AssetsWidgetProps } from \"./assets.widget\";\n\nexport type AssetsPageProps = AssetsWidgetProps;\n\nexport const AssetsPage: React.FC = () => {\n return <AssetsWidget />;\n};\n","export { HistoryPage } from \"./history.page\";\nexport { HistoryWidget } from \"./history.page\";\n","import { HistoryDataGroupWidget } from \"../overview/historyDataGroup\";\n\nexport const HistoryWidget = () => {\n return <HistoryDataGroupWidget />;\n};\n\nexport const HistoryPage = () => {\n return <HistoryDataGroupWidget />;\n};\n"]}
|