@orderly.network/portfolio 2.6.1 → 2.6.2-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.
@@ -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/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"]}
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.widget.tsx","../src/pages/overview/VaultsHistory/transfer.ui.tsx","../src/pages/overview/VaultsHistory/column.tsx","../src/pages/overview/VaultsHistory/useDataSource.script.ts","../src/pages/overview/VaultsHistory/vaults.ui.mobile.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/assets/assets.script.ts","../src/hooks/useAssetTotalValue.ts","../src/pages/assets/column.tsx","../src/pages/overview/performance/performance.widget.tsx","../src/pages/overview/performanceMobileDialog/performance.ui.tsx","../src/pages/overview/performanceMobileDialog/performance.widget.tsx","../src/pages/overview/provider/overviewProvider.tsx","../src/pages/overview/mobile/useRewardsData.script.ts","../src/pages/overview/main.tsx","../src/pages/overview/mobile/mobile.widget.tsx","../src/pages/overview/portfolioChartsMobile/portfolioChartsMobile.widget.tsx","../src/pages/overview/portfolioChartsMobile/portfolioChartsMobile.script.ts","../src/pages/overview/portfolioChartsMobile/portfolioChartsMobile.ui.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/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.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","PerformanceMobileDialogId","PerformanceMobileSheetId","PerformanceMobileUI","PerformanceMobileWidget","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","ListView","VaultsHistoryMobile","loadMore","renderHistoryItem","typeColor","typeText","amountText","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","ArrowRightShortIcon","EmptyDataState","AssetHistoryMobile","getStatusText","status","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","useAssetsHistoryData","localKey","getIndexPrice","isRealtime","periodTypes","period","setPeriod","convertToUSDCAndOperate","inputs","amount","op","indexPrice","delta","periodLabel","getStartDate","periodValue","startDate","setStartDate","endDate","totalDeposit","transferOutHistory","transferInHistory","allDepositHistory","totalDepositForROI","acc","totalTransferInForROI","onPeriodChange","lastItem","totalTransferIn","totalTransferOut","calculateLastPnl","list","i","calculate","getUTCStr","mergeData","calculateData","realtime","calculatedData","aggregateValue","vol","pnl","roi","tail","dataTailIndex","lastAccountValue","createFakeData","start","end","_","year","month","day","PeriodTitle","PnLBarChart","PnlLineChart","volumeUpdateDate","curPeriod","LabelWithHint","PerformancePnL","CumulativePnlChart","hint","isNumber","calculateAssetValue","calculateTotalHolding","total","hol","assetValue","useAssetTotalValue","mainTotalValue","subTotalValue","find","ChainNamespace","useAssetsColumns","onConvert","id","ORDERLY_ASSETS_VISIBLE_KEY","useAssetsScript","toggleVisible","filtered","enhancedFiltered","accountData","enhancedChildren","tokenInfo","collateralRatio","collateralContribution","handleTransfer","handleConvert","showTransfer","assetsColumns","openDepositAndWithdraw","viewName","ctx","responsiveProps","mergedData","i18n","registerSimpleDialog","registerSimpleSheet","useAllBrokers","useConfig","useCurEpochEstimate","useEpochInfo","useGetClaimed","DistributionId","TWType","useRewardsData","totalOrderClaimedReward","curEpochEstimate","brokers","mutate","epochList","brokerId","brokerName","lastStete","timerId","useRewardsDataScript","referralInfo","isSignIn","rewardsData","ENVType","useGetEnv","DepositStatusWidget","usePortfolioChartsState","onPerformanceClick","useId","Area","AreaChart","ChevronRightIcon","PortfolioChartsMobileUI","unrealPnL","unrealROI","colorId","PortfolioChartsMobileWidget","parseJSON","useChains","CopyIcon","ChainIcon","useCurrentStatus","statusText","EVMChainPopover","chains","key","MoreIcon","EVMChains","ShowAccount","onCopyAddress","currentNamespace","getLinkDeviceStorage","leftNode","rightNode","bgClass","bg","AccountStatusMobile","description","rootClass","linkDeviceStorage","AffiliateIcon","commifyOptional","AffiliateCardMobile","rebate","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","MobileOverview","portfolioValue","hasSubAccount","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","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\";\n\nexport * from \"./performanceMobileDialog\";\n\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 { useScreen } from \"@orderly.network/ui\";\nimport { VaultsHistoryUI } from \"./transfer.ui\";\nimport { useVaultsHistoryHook } from \"./useDataSource.script\";\nimport { VaultsHistoryMobile } from \"./vaults.ui.mobile\";\n\nexport const VaultsHistoryWidget: React.FC = () => {\n const state = useVaultsHistoryHook();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <VaultsHistoryMobile {...state} />;\n }\n return <VaultsHistoryUI {...state} />;\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 { useTranslation } from \"@orderly.network/i18n\";\nimport { Divider } from \"@orderly.network/ui\";\nimport { DataFilter, TokenIcon, ListView, Text } from \"@orderly.network/ui\";\nimport { useVaultsHistoryHookReturn } from \"./useDataSource.script\";\n\nexport const VaultsHistoryMobile = (props: useVaultsHistoryHookReturn) => {\n const { dateRange, onFilter, dataSource, isLoading, pagination } = props;\n const { t } = useTranslation();\n\n const loadMore = () => {\n if (dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange?.(pagination?.pageSize + 50);\n }\n };\n\n const renderHistoryItem = (item: any) => {\n const typeColor = item.type === \"deposit\" ? \"buy\" : \"sell\";\n const typeText =\n item.type === \"deposit\" ? t(\"common.deposit\") : t(\"common.withdraw\");\n const amountText = item.amount_change ? Math.abs(item.amount_change) : \"-\";\n return (\n <div className=\"oui-flex oui-flex-col oui-rounded-xl oui-bg-base-9 oui-p-2 oui-font-semibold\">\n <div className=\"oui-flex oui-items-center oui-justify-between oui-text-sm oui-text-base-contrast-80\">\n <div>{item.vaultName}</div>\n <div>\n {item.status?.slice(0, 1).toUpperCase() + item.status?.slice(1)}\n </div>\n </div>\n <Text.formatted rule=\"date\" intensity={36} size=\"2xs\">\n {item.created_time}\n </Text.formatted>\n <Divider className=\"oui-my-2\" />\n <div className=\"oui-flex oui-items-center [&>div]:oui-flex-1 [&>div]:oui-text-2xs [&>div]:oui-text-base-contrast-36\">\n <div>\n <div>{t(\"common.token\")}</div>\n <div className=\"oui-flex oui-items-center oui-gap-1 oui-text-xs oui-text-base-contrast-80\">\n <TokenIcon name={\"USDC\"} size=\"2xs\" />\n <Text>USDC</Text>\n </div>\n </div>\n <div>\n <div>{t(\"common.type\")}</div>\n <Text color={typeColor} className=\"oui-text-xs\">\n {typeText}\n </Text>\n </div>\n <div className=\"oui-text-right\">\n <div>{t(\"common.amount\")}</div>\n <div className=\"oui-text-xs oui-text-base-contrast-80\">\n {amountText}\n </div>\n </div>\n </div>\n </div>\n );\n };\n\n return (\n <>\n <DataFilter\n items={[\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 <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","/* 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 { VaultsHistoryWidget } from \"../VaultsHistory/transfer.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 <TabPanel title={t(\"common.vaults\")} value={\"vaults\"}>\n <VaultsHistoryWidget />\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 { account_value: 0 },\n { account_value: 500 },\n ),\n });\n\n const _data = useMemo(() => {\n if (filteredData?.length) {\n return filteredData;\n }\n return assetHistory.createFakeData(\n { account_value: 0 },\n { account_value: 500 },\n );\n }, [filteredData, assetHistory]);\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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React from \"react\";\nimport { 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: React.FC<AssetsLineChartProps> = (props) => {\n const { onPeriodChange, data, periodTypes, period } = props;\n const { t } = useTranslation();\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={{ content: \"oui-h-[168px] oui-pb-0\" }}\n >\n <AssetLineChart data={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 { useCallback, 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 { useTranslation } from \"@orderly.network/i18n\";\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?: { isRealtime?: boolean },\n) => {\n const [today] = useState(() => new Date());\n\n const { getIndexPrice } = useIndexPricesStream();\n // const { account } = useAccount();\n\n const { t } = useTranslation();\n\n const { isRealtime = false } = options || {};\n const periodTypes = Object.values(PeriodType);\n\n const [period, setPeriod] = useLocalStorage<PeriodType>(\n localKey,\n PeriodType.WEEK,\n );\n\n const convertToUSDCAndOperate = useCallback(\n (inputs: {\n token: string;\n amount: string | number;\n value: Decimal;\n op?: \"add\" | \"sub\";\n }): Decimal => {\n const { token, amount, value, op = \"sub\" } = inputs;\n if (token.toUpperCase() === \"USDC\") {\n return op === \"add\" ? value.add(amount) : value.sub(amount);\n } else {\n const indexPrice = getIndexPrice(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 [getIndexPrice],\n );\n\n const periodLabel = useMemo<Record<PeriodType, string>>(() => {\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 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=200&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=200&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 // get deposit & withdraw records to calculate the current PNL\n const [assetHistory] = useAssetsHistory({\n startTime: subDays(today, 2).getTime(),\n endTime: endDate.getTime(),\n pageSize: 50,\n });\n\n // get all deposit records to calculate the ROI\n const [allDepositHistory] = useAssetsHistory({\n side: \"DEPOSIT\",\n startTime: subDays(today, periodValue).getTime(),\n endTime: endDate.getTime(),\n pageSize: 200,\n });\n\n const totalDepositForROI = useMemo(() => {\n return allDepositHistory\n ?.filter((item) => item.trans_status === \"COMPLETED\")\n .reduce((acc, item) => {\n return acc.add(\n // item.amount\n convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value: zero,\n op: \"add\",\n }),\n );\n }, zero);\n }, [allDepositHistory, convertToUSDCAndOperate]);\n\n const totalTransferInForROI = useMemo(() => {\n if (!Array.isArray(transferInHistory)) {\n return zero;\n }\n return transferInHistory\n ?.filter((item) => item.status === \"COMPLETED\")\n .reduce((acc, item) => {\n return acc.add(\n convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value: zero,\n op: \"add\",\n }),\n );\n }, zero);\n }, [transferInHistory, convertToUSDCAndOperate]);\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 (\n item.status === \"COMPLETED\" &&\n item.created_time > lastItem?.snapshot_time\n );\n });\n return list?.reduce((acc, item) => {\n return acc.add(\n convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value: zero,\n op: \"add\",\n }),\n );\n }, zero);\n }, [transferInHistory, lastItem, convertToUSDCAndOperate]);\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 (\n item.status === \"COMPLETED\" &&\n item.created_time > lastItem?.snapshot_time\n );\n });\n return list?.reduce((acc, item) => {\n return acc.add(\n convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value: zero,\n op: \"add\",\n }),\n );\n }, zero);\n }, [transferOutHistory, lastItem, convertToUSDCAndOperate]);\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 value,\n op: \"sub\",\n });\n\n totalDeposit.current = convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\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 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 getIndexPrice,\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 totalTransferInForROI.add(lastAccountValue).add(totalDepositForROI),\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 }, [\n calculatedData,\n data,\n periodValue,\n totalTransferInForROI,\n totalDepositForROI,\n ]);\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 return { date, ...(i === 0 ? start : end) };\n });\n };\n\n return {\n periodTypes,\n period: period as PeriodType,\n onPeriodChange: onPeriodChange,\n periodLabel: periodLabel,\n curPeriod: periodLabel[period as PeriodType],\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 React from \"react\";\nimport { useAssetsChartScript } from \"./assetsChart.script\";\nimport { AssetsChart } from \"./assetsChart.ui\";\n\nexport const AssetsChartWidget: React.FC = () => {\n const state = useAssetsChartScript();\n return <AssetsChart {...state} />;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useMemo } 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: React.FC<PerformanceUIProps> = (props) => {\n const {\n periodTypes,\n period,\n onPeriodChange,\n aggregateValue,\n invisible,\n visible,\n volumeUpdateDate,\n curPeriod,\n } = 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(\"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: curPeriod,\n })}\n hint={t(\"portfolio.overview.performance.roi.tooltip\")}\n />\n }\n valueProps={{ rule: \"percentages\", coloring: true, visible }}\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: curPeriod,\n })}\n hint={t(\"portfolio.overview.performance.pnl.tooltip\")}\n />\n }\n valueProps={{ coloring: true, showIdentifier: true, visible }}\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: curPeriod,\n })}\n hint={t(\"portfolio.overview.performance.volume.tooltip\")}\n />\n </span>\n <span>{volumeUpdateDate}</span>\n </Flex>\n }\n valueProps={{ visible }}\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?: React.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: React.FC<{\n data: ReadonlyArray<any> | any[];\n invisible: boolean;\n}> = (props) => {\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-h-[188px] oui-border oui-border-line-4\">\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: React.FC<{\n data: ReadonlyArray<any> | any[];\n invisible: boolean;\n}> = (props) => {\n const { t } = useTranslation();\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-h-[188px] oui-border oui-border-line-4\">\n <PnlLineChart\n data={props.data}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\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 { ORDERLY_ASSETS_VISIBLE_KEY } from \"../../assets/assets.script\";\nimport { useOverviewContext } from \"../provider/overviewContext\";\n\nexport const usePerformanceScript = () => {\n const ctx = useOverviewContext();\n const [visible, setVisible] = useLocalStorage<boolean>(\n ORDERLY_ASSETS_VISIBLE_KEY,\n true,\n );\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 { account_value: 0, pnl: 0 },\n { account_value: 500, pnl: 500 },\n ),\n });\n\n const _data = useMemo(() => {\n if (filteredData?.length) {\n return filteredData;\n }\n return ctx?.createFakeData?.(\n { account_value: 0, pnl: 0 },\n { account_value: 500, pnl: 500 },\n );\n }, [ctx, 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 as ReadonlyArray<any>,\n invisible,\n visible: visible as boolean,\n setVisible: setVisible,\n };\n};\n\nexport type UsePerformanceScriptReturn = ReturnType<\n typeof usePerformanceScript\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\nexport const 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 React from \"react\";\nimport { usePerformanceScript } from \"./performance.script\";\nimport { PerformanceUI } from \"./performance.ui\";\n\nexport const PerformanceWidget: React.FC = () => {\n const state = usePerformanceScript();\n return <PerformanceUI {...state} />;\n};\n","import React from \"react\";\nimport {\n AssetLineChart,\n PnLBarChart,\n PnlLineChart,\n PnlLineChartProps,\n} from \"@orderly.network/chart\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Tabs, TabPanel, Flex, Text } from \"@orderly.network/ui\";\nimport type { UsePerformanceScriptReturn } from \"../performance/performance.script\";\nimport {\n PeriodType,\n useAssetsHistoryDataReturn,\n} from \"../shared/useAssetHistory\";\n\nconst responsiveProps: PnlLineChartProps[\"responsiveContainerProps\"] = {\n width: \"100%\",\n minHeight: 144,\n aspect: 2.5,\n};\n\nexport const PerformanceMobileUI: React.FC<\n Pick<\n useAssetsHistoryDataReturn & UsePerformanceScriptReturn,\n | \"data\"\n | \"curPeriod\"\n | \"aggregateValue\"\n | \"onPeriodChange\"\n | \"invisible\"\n | \"visible\"\n | \"createFakeData\"\n >\n> = (props) => {\n const { t } = useTranslation();\n const {\n data,\n aggregateValue,\n visible,\n invisible,\n curPeriod,\n onPeriodChange,\n createFakeData,\n } = props;\n\n const mergedData = data.length\n ? data\n : (createFakeData?.(\n { account_value: 0, pnl: 0 },\n { account_value: 500, pnl: 500 },\n ) as any[]);\n\n return (\n <div>\n <Tabs\n defaultValue={PeriodType.WEEK}\n classNames={{ tabsList: \"oui-justify-between\", trigger: \"oui-w-1/3\" }}\n onValueChange={(value) => onPeriodChange(value as PeriodType)}\n >\n <TabPanel\n title={t(\"common.select.7d\")}\n value={PeriodType.WEEK}\n className=\"oui-min-h-40\"\n >\n <AssetLineChart\n data={mergedData}\n invisible={invisible || (mergedData?.length ?? 0) <= 2}\n responsiveContainerProps={responsiveProps}\n />\n </TabPanel>\n <TabPanel\n title={t(\"common.select.30d\")}\n value={PeriodType.MONTH}\n className=\"oui-min-h-40\"\n >\n <AssetLineChart\n data={mergedData}\n invisible={invisible || (mergedData?.length ?? 0) <= 2}\n responsiveContainerProps={responsiveProps}\n />\n </TabPanel>\n <TabPanel\n title={t(\"common.select.90d\")}\n value={PeriodType.QUARTER}\n className=\"oui-min-h-40\"\n >\n <AssetLineChart\n data={mergedData}\n invisible={invisible || (mergedData?.length ?? 0) <= 2}\n responsiveContainerProps={responsiveProps}\n />\n </TabPanel>\n </Tabs>\n <Flex justify=\"between\" itemAlign=\"center\" gap={2} my={4}>\n <Flex\n gap={1}\n direction=\"column\"\n itemAlign=\"start\"\n className=\"oui-w-1/3 oui-rounded-lg oui-bg-base-7 oui-px-2 oui-py-1.5\"\n >\n <Text className=\"oui-truncate\" intensity={36} size=\"2xs\">\n {t(\"portfolio.overview.performance.roi\", { period: curPeriod })}\n </Text>\n <Text.numeral size=\"sm\" visible={visible} rule=\"percentages\" coloring>\n {invisible ? \"--\" : aggregateValue.roi}\n </Text.numeral>\n </Flex>\n <Flex\n gap={1}\n direction=\"column\"\n itemAlign=\"start\"\n className=\"oui-w-1/3 oui-rounded-lg oui-bg-base-7 oui-px-2 oui-py-1.5\"\n >\n <Text className=\"oui-truncate\" intensity={36} size=\"2xs\">\n {t(\"portfolio.overview.performance.pnl\", { period: curPeriod })}\n </Text>\n <Text.numeral size=\"sm\" visible={visible} coloring showIdentifier>\n {invisible ? \"--\" : aggregateValue.pnl}\n </Text.numeral>\n </Flex>\n <Flex\n gap={1}\n direction=\"column\"\n itemAlign=\"start\"\n className=\"oui-w-1/3 oui-rounded-lg oui-bg-base-7 oui-px-2 oui-py-1.5\"\n >\n <Text className=\"oui-truncate\" intensity={36} size=\"2xs\">\n {t(\"portfolio.overview.performance.volume\", { period: curPeriod })}\n </Text>\n <Text.numeral size=\"sm\" visible={visible} coloring={false}>\n {invisible ? \"--\" : aggregateValue.vol}\n </Text.numeral>\n </Flex>\n </Flex>\n <Tabs defaultValue={\"dailyPnl\"}>\n <TabPanel\n value={\"dailyPnl\"}\n title={t(\"portfolio.overview.performance.dailyPnl\")}\n className=\"oui-min-h-40\"\n >\n <PnLBarChart\n data={mergedData}\n invisible={invisible || (mergedData?.length ?? 0) <= 2}\n responsiveContainerProps={responsiveProps}\n />\n </TabPanel>\n <TabPanel\n value={\"cumulativePnl\"}\n title={t(\"portfolio.overview.performance.cumulativePnl\")}\n className=\"oui-min-h-40\"\n >\n <PnlLineChart\n data={mergedData}\n invisible={invisible || (mergedData?.length ?? 0) <= 2}\n responsiveContainerProps={responsiveProps}\n />\n </TabPanel>\n </Tabs>\n </div>\n );\n};\n","import React from \"react\";\nimport { pick } from \"ramda\";\nimport { i18n } from \"@orderly.network/i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { usePerformanceScript } from \"..\";\nimport { localKey } from \"../provider/overviewProvider\";\nimport { useAssetsHistoryData } from \"../shared/useAssetHistory\";\nimport { PerformanceMobileUI } from \"./performance.ui\";\n\nexport const PerformanceMobileWidget: React.FC = () => {\n const state = useAssetsHistoryData(localKey, { isRealtime: true });\n const { visible, invisible } = usePerformanceScript();\n return (\n <PerformanceMobileUI\n {...pick(\n [\n \"data\",\n \"curPeriod\",\n \"aggregateValue\",\n \"onPeriodChange\",\n \"createFakeData\",\n ],\n state,\n )}\n visible={visible}\n invisible={invisible}\n />\n );\n};\n\nexport const PerformanceMobileSheetId = \"PerformanceMobileSheetId\";\n\nexport const PerformanceMobileDialogId = \"PerformanceMobileDialogId\";\n\nregisterSimpleSheet(PerformanceMobileSheetId, PerformanceMobileWidget, {\n title: () => i18n.t(\"portfolio.overview.performance\"),\n});\n\nregisterSimpleDialog(PerformanceMobileDialogId, PerformanceMobileWidget, {\n title: () => i18n.t(\"portfolio.overview.performance\"),\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\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\nexport const 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","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 React from \"react\";\nimport { 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: React.FC = () => {\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 React 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 { PortfolioChartsMobileWidget } from \"../portfolioChartsMobile\";\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: React.FC = () => {\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 onClick={navigateToPortfolioHistory} />\n </Flex>\n <PortfolioChartsMobileWidget />\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 React from \"react\";\nimport { EMPTY_LIST } from \"@orderly.network/types\";\nimport { useAssetsChartScript } from \"../assetChart\";\nimport { usePortfolioChartsState } from \"./portfolioChartsMobile.script\";\nimport { PortfolioChartsMobileUI } from \"./portfolioChartsMobile.ui\";\n\nexport const PortfolioChartsMobileWidget: React.FC = () => {\n const { data, invisible } = useAssetsChartScript();\n const state = usePortfolioChartsState();\n return (\n <PortfolioChartsMobileUI\n data={data || EMPTY_LIST}\n invisible={invisible}\n {...state}\n />\n );\n};\n","import { useCallback } from \"react\";\nimport { useLocalStorage, usePositionStream } from \"@orderly.network/hooks\";\nimport { modal } from \"@orderly.network/ui\";\nimport { ORDERLY_ASSETS_VISIBLE_KEY } from \"../../assets/assets.script\";\nimport { PerformanceMobileSheetId } from \"../performanceMobileDialog\";\n\nexport const usePortfolioChartsState = () => {\n const [data] = usePositionStream();\n const [visible, setVisible] = useLocalStorage<boolean>(\n ORDERLY_ASSETS_VISIBLE_KEY,\n true,\n );\n const onPerformanceClick = useCallback(() => {\n return modal.show(PerformanceMobileSheetId);\n }, []);\n return {\n unrealPnL: data?.aggregated.total_unreal_pnl,\n unrealROI: data?.totalUnrealizedROI,\n visible: visible as boolean,\n setVisible: setVisible,\n onPerformanceClick: onPerformanceClick,\n } as const;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useId } from \"react\";\nimport { Area, AreaChart } from \"@orderly.network/chart\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { EMPTY_LIST } from \"@orderly.network/types\";\nimport { ChevronRightIcon, cn, Flex, Text } from \"@orderly.network/ui\";\nimport { usePortfolioChartsState } from \".\";\n\nexport const PortfolioChartsMobileUI: React.FC<\n ReturnType<typeof usePortfolioChartsState> & {\n data: any[];\n invisible?: boolean;\n }\n> = (props) => {\n const { data, invisible, unrealPnL, unrealROI, visible, onPerformanceClick } =\n props;\n const { t } = useTranslation();\n const colorId = useId();\n return (\n <Flex\n p={4}\n width={\"100%\"}\n itemAlign=\"center\"\n justify=\"between\"\n className={cn(\n \"oui-relative oui-overflow-hidden oui-rounded-2xl oui-border oui-border-solid oui-border-line-12 oui-bg-base-9\",\n )}\n >\n <Flex\n width={\"100%\"}\n justify={\"center\"}\n itemAlign={\"start\"}\n direction={\"column\"}\n gap={2}\n >\n <Text size=\"xs\" intensity={54}>\n {t(\"common.unrealizedPnl\")}\n </Text>\n <Flex justify={\"start\"} itemAlign={\"center\"}>\n <Text.numeral\n coloring\n size=\"base\"\n weight=\"semibold\"\n visible={visible}\n >\n {unrealPnL}\n </Text.numeral>\n <Text.numeral\n coloring\n rule=\"percentages\"\n size=\"sm\"\n weight=\"semibold\"\n prefix={\"(\"}\n suffix={\")\"}\n visible={visible}\n >\n {unrealROI}\n </Text.numeral>\n </Flex>\n <Text\n size=\"xs\"\n intensity={54}\n className=\"oui-flex oui-items-center oui-justify-start oui-gap-1\"\n onClick={onPerformanceClick}\n >\n {t(\"portfolio.overview.performance\")}\n <ChevronRightIcon className=\"oui-text-base-contrast-54\" />\n </Text>\n </Flex>\n <Flex\n width={\"100%\"}\n justify={\"center\"}\n itemAlign={\"center\"}\n direction={\"column\"}\n >\n <AreaChart data={data || EMPTY_LIST} width={160} height={52}>\n {!invisible && (\n <>\n <defs>\n <linearGradient id={colorId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop stopColor=\"#00B49E\" offset=\"0%\" stopOpacity={0.5} />\n <stop stopColor=\"#00B49E\" offset=\"100%\" stopOpacity={0} />\n </linearGradient>\n </defs>\n <Area\n type=\"natural\"\n dataKey=\"account_value\"\n stroke={\"rgb(41, 233, 169)\"}\n strokeWidth={1.5}\n dot={false}\n isAnimationActive={false}\n fill={`url(#${colorId})`}\n />\n </>\n )}\n </AreaChart>\n </Flex>\n </Flex>\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 { 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\nconst isNumber = (val: unknown): val is number => {\n return typeof val === \"number\" && !Number.isNaN(val);\n};\n\ntype AffiliateCardMobileProps = {\n referralInfo?: API.ReferralInfo;\n routerAdapter?: RouterAdapter;\n};\n\nexport const AffiliateCardMobile: FC<AffiliateCardMobileProps> = (props) => {\n const { t } = useTranslation();\n const { referralInfo, routerAdapter } = props;\n const rebate = referralInfo?.referrer_info?.[\"30d_referrer_rebate\"];\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(rebate) && rebate !== 0\n ? \"oui-text-base-contrast\"\n : \"oui-text-base-contrast-36\",\n )}\n >\n {commifyOptional(rebate, { fix: 2, fallback: \"--\" })}\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 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 { 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\nconst isNumber = (val: unknown): val is number => {\n return typeof val === \"number\" && !Number.isNaN(val);\n};\n\ntype TraderCardMobileProps = {\n referralInfo?: API.ReferralInfo;\n routerAdapter?: RouterAdapter;\n};\n\nexport const TraderCardMobile: FC<TraderCardMobileProps> = (props) => {\n const { t } = useTranslation();\n const { referralInfo, routerAdapter } = props;\n const rebate = referralInfo?.referee_info?.[\"30d_referee_rebate\"];\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(rebate) && rebate !== 0\n ? \"oui-text-base-contrast\"\n : \"oui-text-base-contrast-36\",\n )}\n >\n {commifyOptional(rebate, { fix: 2, fallback: \"--\" })}\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 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 { 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 type { UseRewardsDataReturn } from \"./useRewardsData.script\";\n\nconst isNumber = (val: unknown): val is number => {\n return typeof val === \"number\" && !Number.isNaN(val);\n};\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","export { FeeTierPage } from \"./page\";\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { 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: dataSource,\n onRow: options?.onRow,\n };\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { type Column, Text } from \"@orderly.network/ui\";\nimport { numberToHumanStyle } from \"@orderly.network/utils\";\n\nexport const useFeeTierColumns = () => {\n const { t } = useTranslation();\n const columns = useMemo<Column[]>(() => {\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 ];\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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport 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 React, { 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, index) => (\n <React.Fragment key={`item-${index}`}>\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 </React.Fragment>\n ))}\n </div>\n </div>\n );\n};\n\ntype AssetMobileItemProps = {\n item: any;\n};\n\nconst AssetMobileItem: React.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: React.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"]}