@orderly.network/portfolio 2.3.1 → 2.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +31 -10
- package/dist/index.d.ts +31 -10
- package/dist/index.js +21 -21
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +9 -9
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +17 -17
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/layout/layout.widget.tsx","../src/layout/layout.script.tsx","../src/layout/layout.ui.tsx","../src/layout/layout.ui.mobile.tsx","../src/layout/context.tsx","../src/pages/overview/index.tsx","../src/pages/overview/assets/assets.script.ts","../src/pages/overview/assets/assets.ui.tsx","../src/pages/overview/assets/assetsHeader.tsx","../src/pages/overview/assets/assets.widget.tsx","../src/pages/overview/assetChart/assetsChart.script.ts","../src/pages/overview/providers/overviewCtx.tsx","../src/pages/overview/mobile/useRewardsData.script.ts","../src/pages/overview/shared/useAssetHistory.ts","../src/pages/overview/assetChart/assetsChart.ui.tsx","../src/pages/overview/shared/periodHeader.tsx","../src/pages/overview/assetChart/assetsChart.widget.tsx","../src/pages/overview/historyDataGroup/historyDataGroup.widget.tsx","../src/pages/overview/historyDataGroup/historyDataGroup.ui.desktop.tsx","../src/pages/overview/TransferHistory/transfer.widget.tsx","../src/pages/overview/TransferHistory/transfer.ui.tsx","../src/pages/overview/TransferHistory/column.tsx","../src/pages/overview/TransferHistory/useDataSource.script.ts","../src/pages/overview/helper/date.ts","../src/pages/overview/assetHistory/column.tsx","../src/pages/overview/assetHistory/useDataSource.script.ts","../src/pages/overview/assetHistory/dataTable.ui.tsx","../src/pages/overview/assetHistory/widget.tsx","../src/pages/overview/assetHistory/dataTable.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/overview/historyDataGroup/useState.script.ts","../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/feeTier/index.tsx","../src/pages/feeTier/feeTier.script.ts","../src/pages/feeTier/dataSource.ts","../src/pages/feeTier/column.tsx","../src/pages/feeTier/feeTier.ui.tsx","../src/pages/feeTier/feeTier.widget.tsx","../src/pages/feeTier/page.tsx","../src/pages/positions/page.tsx","../src/pages/assets/assets.ui.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/pages/assets/column.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","AssetsChartWidget","AssetsUI","DistributionHistoryDesktop","DistributionHistoryMobile","DistributionHistoryWidget","FundingHistoryWidget","HistoryDataGroupWidget","OverviewContextProvider","OverviewPage","PerformanceUI","PerformanceWidget","useAssetHistoryColumns","useAssetHistoryHook","useAssetsLineChartScript","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","canTrade","onLeverageEdit","onDeposit","onWithdraw","onTransfer","Card","Divider","Grid","Either","Statistic","Text","EyeIcon","gradientTextVariants","EditIcon","EyeCloseIcon","AuthGuard","ArrowDownSquareFillIcon","ArrowUpSquareFillIcon","Button","CardTitle","AssetsHeader","NoValue","AssetStatistic","connectWallet","useDataTap","useRef","useAllBrokers","useConfig","useCurEpochEstimate","useEpochInfo","useGetClaimed","usePrivateQuery","DistributionId","TWType","useRewardsData","type","totalOrderClaimedReward","curEpochEstimate","brokers","mutate","epochList","brokerId","brokerName","lastStete","timerId","useRewardsDataScript","referralInfo","OverviewContext","isSignIn","useAssetsHistory","useStatisticsDaily","subDays","format","getYear","getMonth","getDate","addDays","Decimal","zero","PeriodType","useAssetsHistoryData","localKey","options","today","d","isRealtime","periodTypes","period","setPeriod","getStartDate","value","periodValue","startDate","setStartDate","endDate","assetHistory","onPeriodChange","calculateLastPnl","inputs","list","i","calculate","lastItem","todayFormattedStr","mergeData","calculateData","realtime","_data","calculatedData","aggregateValue","vol","pnl","roi","tail","dataTailIndex","lastAccountValue","start","end","_","useOverviewContext","rewardsData","filteredData","invisible","Select","PeriodTitle","periodLabel","AssetLineChart","AssetsChartUI","ArrowLeftRightSquareFill","FeeTierIcon","ServerFillIcon","TabPanel","Tabs","ArrowLeftRightIcon","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","subAccounts","memoizedOptions","columns","draft","row","set","useTransferHistory","usePagination","subtractDaysFromCurrentDate","differenceInDays","setHours","parseDateRangeForFilter","from","to","useTransferHistoryHook","date","setDateRange","page","pageSize","setPage","parsePagination","setAccount","setSide","meta","onAccountFilter","filter","pagination","TransferHistoryWidget","accountState","capitalizeFirstLetter","useQuery","AssetHistoryStatusEnum","chains","record","href","SIDES","ListView","ArrowRightShortIcon","EmptyDataState","AssetHistoryMobile","loadMore","getStatusText","status","renderHistoryItem","formattedAmount","getTxLink","chainInfo","chain","itemColor","index","isValidating","TYPES","getTypeText","renderItem","useDistributionHistory","useDistributionHistoryHook","setType","useSymbolsInfo","FundingHistoryDesktop","symbols","symbol","FundingHistoryMobile","switchPaymentType","paymentType","useFundingFeeHistory","setSymbol","HistoryDataGroupDesktop","active","onTabChange","HistoryDataGroupMobile","useStateScript","setActive","PnLBarChart","PnlLineChart","volumeUpdateDate","PerformancePnL","CumulativePnlChart","ctx","ENVType","useGetEnv","parseJSON","useChains","ChainNamespace","CopyIcon","ChainIcon","useCurrentStatus","account","statusText","EVMChainPopover","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","endTime","curEpochId","isOrder","onClaim","event","Countdown","targetTimestamp","timeLeft","setTimeLeft","intervalId","now","distance","days","hours","minutes","seconds","CountDownItem","MobileOverview","portfolioValue","unrealPnL","unrealROI","toggleVisible","layoutContext","env","goToClaim","url","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","DataTable","FeeTier","takerFeeRate","makerFeeRate","FeeTierHeader","FeeTierTable","FeeTierHeaderItem","top","setTop","parentRect","elementRect","offsetTop","onRow","config","FeeTierWidget","page_exports","PositionsPage","LiquidationWidget","PositionHistoryWidget","CombinePositionsWidget","PositionsWidget","pick","TotalValue","onToggleVisibility","Icon","AssetsTable","column","tab","setTab","name","OrdersPage","Tooltip","OrdersWidget","sharePnLConfig","ordersRef","onDownload","TooltipIcon","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","resolve","curKey","reject","doEdit","future","onCopyAccountId","onCopyApiKey","onCopyApiSecretKey","onCopyIP","keyList","filterTag","filterCurKey","verifyIP","accountStatus","accountId","userId","str","SimpleDialog","CreateAPIKeyDialog","ipText","setIpText","read","setRead","trade","setTrade","hint","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","INDEX_PRICE","COLLATERAL_RATIO","useAssetsColumns","onClick","id","calculateTotalHolding","total","hol","ORDERLY_ASSETS_VISIBLE_KEY","EMPTY_HOLDING","useAssetsScript","holding","allAccounts","filtered","mainTotalValue","subTotalValue","memoizedTotalValue","find","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 (current || routerAdapter?.currentPath) {\n setCurrent(current || routerAdapter?.currentPath || \"/portfolio\");\n }\n }, [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 // console.log(\"PortfolioLayoutMobile\", props, props.routerAdapter);\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 {\n PropsWithChildren,\n createContext,\n useContext,\n useState,\n useMemo,\n} from \"react\";\nimport { 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 = (\n props: PropsWithChildren<{ routerAdapter?: RouterAdapter }>,\n) => {\n const [sideOpen, setSideOpen] = useState(true);\n const memoizedValue = useMemo<LayoutContextValue>(\n () => ({\n sideOpen,\n onSideOpenChange: setSideOpen,\n routerAdapter: props.routerAdapter,\n }),\n [sideOpen, setSideOpen, props.routerAdapter],\n );\n return (\n <LayoutContext.Provider value={memoizedValue}>\n {props.children}\n </LayoutContext.Provider>\n );\n};\n","export { AssetWidget, AssetsUI } from \"./assets\";\nexport { AssetsChartWidget } from \"./assetChart/assetsChart.widget\";\nexport { useAssetsLineChartScript } from \"./assetChart/assetsChart.script\";\nexport { HistoryDataGroupWidget } from \"./historyDataGroup\";\n\nexport {\n AssetHistory,\n AssetHistoryWidget,\n useAssetHistoryHook,\n useAssetHistoryColumns,\n} 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 { OverviewContextProvider } from \"./providers/overviewCtx\";\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\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 } 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 />\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 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};\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 {props.isMainAccount ? (\n <Flex gap={3}>\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 <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 </Flex>\n ) : (\n <Button\n disabled={props.disabled}\n size=\"md\"\n color=\"secondary\"\n onClick={() => props.onTransfer?.()}\n >\n {t(\"common.transfer\")}\n </Button>\n )}\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 { AccountStatusEnum } from \"@orderly.network/types\";\nimport { useAssetsHistoryData } from \"../shared/useAssetHistory\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { useOverviewContext } from \"../providers/overviewCtx\";\nimport { useMemo } from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\n\nexport const useAssetsLineChartScript = () => {\n // const assetHistory = useAssetsHistoryData(\"portfolio_asset_history_period\", {\n // isRealtime: true,\n // });\n\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 useAssetsLineChartScriptReturn = ReturnType<\n typeof useAssetsLineChartScript\n>;\n","import { createContext, useContext, PropsWithChildren } from \"react\";\nimport { TWType } from \"@orderly.network/hooks\";\nimport {\n useRewardsData,\n UseRewardsDataReturn,\n} from \"../mobile/useRewardsData.script\";\nimport {\n useAssetsHistoryData,\n useAssetsHistoryDataReturn,\n} 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\nconst localKey = \"portfolio_performance_period\";\n\nexport const useOverviewContext = () => {\n return useContext(OverviewContext);\n};\n\nexport const OverviewContextProvider = (\n props: PropsWithChildren<{ type?: TWType }>,\n) => {\n const state = useAssetsHistoryData(localKey, { isRealtime: true });\n const rewardsData = useRewardsData({ type: props.type });\n\n return (\n <OverviewContext.Provider\n value={{\n ...state,\n type: props.type,\n ...rewardsData,\n }}\n >\n {props.children}\n </OverviewContext.Provider>\n );\n};\n","import { useMemo, useContext, 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 { OverviewContext } from \"../providers/overviewCtx\";\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 } = useContext(OverviewContext);\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 { useMemo, useState } from \"react\";\nimport {\n useAssetsHistory,\n useCollateral,\n useLocalStorage,\n useStatisticsDaily,\n} from \"@orderly.network/hooks\";\nimport { subDays, format, getYear, getMonth, getDate, addDays } from \"date-fns\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\n\nexport enum PeriodType {\n WEEK = \"7D\",\n MONTH = \"30D\",\n QUARTER = \"90D\",\n}\n\nexport const useAssetsHistoryData = (\n localKey: string,\n options?: {\n isRealtime?: boolean;\n }\n) => {\n const [today] = useState(() => {\n const d = new Date();\n\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\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\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\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().toString(),\n endTime: endDate.getTime().toString(),\n pageSize: 50,\n });\n\n const onPeriodChange = (value: PeriodType) => {\n setStartDate(getStartDate(value));\n setPeriod(value);\n };\n\n // const lastItem = data[data.length - 1];\n\n const calculateLastPnl = (inputs: {\n lastItem: API.DailyRow;\n assetHistory: API.AssetHistoryRow[];\n totalValue: number | null;\n }) => {\n if (totalValue == null) return null;\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 // console.log(\"--->>>>> list\", list);\n\n // calculate the sum of deposit and withdraw\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (item.side === \"DEPOSIT\") {\n // value -= item.amount;\n if (item.trans_status === \"COMPLETED\") {\n value = value.sub(item.amount);\n }\n } else if (item.side === \"WITHDRAW\") {\n if (item.trans_status !== \"FAILED\") {\n value = value.add(item.amount);\n }\n }\n }\n }\n\n return value.toNumber();\n };\n\n const calculate = (data: API.DailyRow[], totalValue: number | null) => {\n const lastItem = data[data.length - 1];\n const todayFormattedStr = format(today, \"yyyy-MM-dd\");\n\n return {\n ...lastItem,\n date: todayFormattedStr,\n perp_volume: 0,\n account_value:\n totalValue !== null ? totalValue : lastItem?.account_value ?? 0,\n pnl: calculateLastPnl({ lastItem, assetHistory, totalValue }) ?? 0,\n };\n };\n\n const mergeData = (data: API.DailyRow[], totalValue: number | null) => {\n if (!Array.isArray(data) || data.length === 0) {\n return data;\n }\n\n if (data[data.length - 1].date === format(today, \"yyyy-MM-dd\")) {\n data;\n }\n\n return data.concat([calculate(data, totalValue)]);\n };\n\n const calculateData = (data: API.DailyRow[], realtime: boolean) => {\n const _data = !realtime ? data : mergeData(data, totalValue);\n\n return _data.slice(Math.max(0, _data.length - periodValue));\n };\n\n const calculatedData = useMemo(() => {\n /**\n * need the totalValue and data are all ready, else return null;\n */\n if (totalValue == null) return [];\n return calculateData(data, isRealtime);\n }, [data, totalValue, assetHistory, isRealtime]);\n\n const aggregateValue = useMemo(() => {\n let vol = zero;\n let pnl = zero;\n let roi = zero;\n\n if (Array.isArray(calculatedData) && calculatedData.length) {\n calculatedData.forEach((d) => {\n // vol = vol.add(d.perp_volume);\n pnl = pnl.add(d.pnl);\n });\n\n const tail = calculatedData[0];\n\n const dataTailIndex = data.findIndex((d) => d.date === tail.date);\n\n const lastAccountValue = data[dataTailIndex - 1]?.account_value;\n\n // console.log(data, calculatedData, tail, dataTailIndex);\n\n if (typeof lastAccountValue === \"undefined\" || lastAccountValue === 0) {\n roi = zero;\n } else {\n roi = pnl.div(lastAccountValue);\n }\n }\n\n if (data.length > 0) {\n for (let i = 0; i < periodValue; i++) {\n const item = data[data.length - 1 - i];\n\n if (item) {\n vol = vol.add(item.perp_volume ?? 0);\n }\n }\n }\n\n // console.log(\"---------------------------\");\n\n return { vol: vol.toNumber(), pnl: pnl.toNumber(), roi: roi.toNumber() };\n }, [calculatedData, data, periodValue]);\n\n const createFakeData = (\n start: Partial<API.DailyRow>,\n end: Partial<API.DailyRow>\n ) => {\n return Array.from({ length: 2 }, (_, i) => {\n const date = format(i === 0 ? startDate : new Date(), \"yyyy-MM-dd\");\n\n return {\n date,\n ...(i === 0 ? start : end),\n };\n });\n };\n\n return {\n periodTypes,\n period,\n onPeriodChange,\n data: calculatedData,\n aggregateValue,\n createFakeData,\n volumeUpdateDate: data?.[data.length - 1]?.date ?? \"\",\n } as const;\n};\n\nexport type useAssetsHistoryDataReturn = ReturnType<\n typeof useAssetsHistoryData\n>;\n","import { Card } from \"@orderly.network/ui\";\nimport { PeriodTitle } from \"../shared/periodHeader\";\nimport { useAssetsLineChartScriptReturn } from \"./assetsChart.script\";\nimport { AssetLineChart } from \"@orderly.network/chart\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type AssetsLineChartProps = {} & useAssetsLineChartScriptReturn;\n\nexport const AssetsChartUI = (props: AssetsLineChartProps) => {\n const { onPeriodChange, periodTypes, period, data } = 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} 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 { useAssetsLineChartScript } from \"./assetsChart.script\";\nimport { AssetsChartUI } from \"./assetsChart.ui\";\n\nexport const AssetsChartWidget = () => {\n const state = useAssetsLineChartScript();\n return <AssetsChartUI {...state} />;\n};\n","import { useScreen } from \"@orderly.network/ui\";\nimport { HistoryDataGroupDesktop } from \"./historyDataGroup.ui.desktop\";\nimport { HistoryDataGroupMobile } from \"./historyDataGroup.ui.mobile\";\nimport { useStateScript } from \"./useState.script\";\n\nexport const HistoryDataGroupWidget: React.FC = () => {\n const state = useStateScript();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <HistoryDataGroupMobile {...state} />;\n }\n return <HistoryDataGroupDesktop {...state} />;\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n ArrowLeftRightSquareFill,\n Card,\n FeeTierIcon,\n ServerFillIcon,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { ArrowLeftRightIcon } from \"@orderly.network/ui\";\nimport { TransferHistoryWidget } from \"../TransferHistory\";\nimport { AssetHistoryWidget } from \"../assetHistory\";\nimport { DistributionHistoryWidget } from \"../distribution\";\nimport { FundingHistoryWidget } from \"../funding\";\nimport { TabName } from \"./useState.script\";\n\nexport const HistoryDataGroupDesktop = (props: {\n active?: TabName;\n onTabChange: (tab: string) => void;\n}) => {\n const { active = \"deposit\", onTabChange } = props;\n const { t } = useTranslation();\n\n return (\n <Card>\n <Tabs\n value={active}\n onValueChange={onTabChange}\n variant=\"contained\"\n size=\"xl\"\n // classNames={{\n // tabsList: \"oui-px-3\",\n // }}\n >\n <TabPanel\n title={t(\"portfolio.overview.deposits&Withdrawals\")}\n icon={<ArrowLeftRightIcon />}\n value={\"deposit\"}\n >\n <AssetHistoryWidget />\n </TabPanel>\n <TabPanel\n title={t(\"common.funding\")}\n icon={<FeeTierIcon />}\n value={\"funding\"}\n >\n <FundingHistoryWidget />\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.distribution\")}\n icon={<ServerFillIcon />}\n value={\"distribution\"}\n >\n <DistributionHistoryWidget />\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.transferHistory\")}\n icon={<ArrowLeftRightSquareFill />}\n value={\"transfer\"}\n >\n <TransferHistoryWidget />\n </TabPanel>\n </Tabs>\n </Card>\n );\n};\n","import React from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { TransferHistoryUI } from \"./transfer.ui\";\nimport { useTransferHistoryHook } from \"./useDataSource.script\";\n\nexport const TransferHistoryWidget: React.FC = () => {\n const state = useTransferHistoryHook();\n const accountState = useAccount();\n return <TransferHistoryUI {...state} {...accountState} />;\n};\n","import React, { useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport type { API } from \"@orderly.network/types\";\nimport { DataFilter, formatAddress } from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport type { SelectOption } from \"@orderly.network/ui/src/select/withOptions\";\nimport { useColumns } from \"./column\";\nimport type { useTransferHistoryHookReturn } from \"./useDataSource.script\";\n\ntype HistoryProps = useTransferHistoryHookReturn;\n\nexport enum AccountType {\n ALL = \"All accounts\",\n MAIN = \"Main accounts\",\n}\n\nexport const TransferHistoryUI: React.FC<\n Readonly<HistoryProps & ReturnType<typeof useAccount>>\n> = (props) => {\n const {\n dataSource,\n queryParameter,\n state,\n isMainAccount,\n isLoading,\n selectedAccount,\n onFilter,\n } = props;\n const { side, dateRange } = queryParameter;\n\n const { t } = useTranslation();\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const subAccounts = state.subAccounts ?? [];\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\n\n const columns = useColumns();\n\n return (\n <>\n <DataFilter\n onFilter={onFilter}\n items={produce(\n [\n {\n type: \"select\",\n name: \"side\",\n value: side,\n options: [\n { value: \"OUT\", label: \"Outflow\" },\n { value: \"IN\", label: \"Inflow\" },\n ],\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ],\n (draft) => {\n if (isMainAccount) {\n draft.unshift({\n type: \"select\",\n name: \"account\",\n value: selectedAccount as any,\n options: memoizedOptions,\n });\n }\n },\n )}\n />\n <AuthGuardDataTable<API.TransferHistoryRow>\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n // isValidating={isValidating}\n className=\"oui-font-semibold\"\n classNames={{ root: \"oui-h-[calc(100%_-_49px)]\" }}\n pagination={props.pagination}\n generatedRowKey={(row) => row.id}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } 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 });\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 { useMemo } from \"react\";\nimport {\n capitalizeFirstLetter,\n Text,\n Flex,\n TokenIcon,\n toast,\n type Column,\n} from \"@orderly.network/ui\";\nimport { useQuery } from \"@orderly.network/hooks\";\nimport { useTranslation, i18n } from \"@orderly.network/i18n\";\nimport { AssetHistoryStatusEnum } from \"@orderly.network/types\";\n\nexport const useAssetHistoryColumns = () => {\n const { data: chains } = useQuery(\"/v1/public/chain_info\");\n const { t } = useTranslation();\n\n const columns = useMemo(() => {\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 {\n title: t(\"portfolio.overview.column.txId\"),\n dataIndex: \"tx_id\",\n width: 120,\n\n render: (value, record) => {\n if (!value) {\n return <div className=\"oui-text-base-contrast-54\">-</div>;\n }\n const chainInfo = (chains as any[])?.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\">\n {/* <Tooltip content={value} delayDuration={0}> */}\n\n <Text.formatted\n copyable={!!value}\n rule=\"txId\"\n className=\"oui-underline-offset-4 oui-underline oui-decoration-dashed oui-decoration-line-16\"\n onCopy={(e) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n }}\n >\n {value}\n </Text.formatted>\n {/* </Tooltip> */}\n </a>\n );\n },\n },\n {\n title: t(\"common.status\"),\n dataIndex: \"trans_status\",\n width: 100,\n render: (value) => {\n const statusMap = {\n [AssetHistoryStatusEnum.NEW]: 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.type\"),\n dataIndex: \"side\",\n width: 80,\n // formatter: (value) => capitalizeFirstLetter(value.toLowerCase()),\n render: (value) => {\n return (\n <Text color={value === \"DEPOSIT\" ? \"deposit\" : \"withdraw\"}>\n {value === \"DEPOSIT\" ? t(\"common.deposit\") : t(\"common.withdraw\")}\n </Text>\n );\n },\n },\n {\n title: t(\"common.amount\"),\n dataIndex: \"amount\",\n width: 100,\n rule: \"price\",\n formatter: (value, record) =>\n record.side === \"WITHDRAW\"\n ? -(value - (record.fee ?? 0))\n : value - (record.fee ?? 0),\n numeralProps: {\n coloring: true,\n showIdentifier: true,\n },\n // formatter: \"date\",\n },\n ] as Column[];\n }, [chains, t]);\n\n return columns;\n};\n","import { useMemo, useState } from \"react\";\nimport { useAssetsHistory } from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\n\nconst useAssetHistoryHook = () => {\n // const [fileter, setFilter] = useState<FilterParams>({});\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 [side, setSide] = useState<string>(\"All\");\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const [data, { meta, isLoading }] = useAssetsHistory({\n startTime: dateRange[0].getTime().toString(),\n endTime: set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n })\n .getTime()\n .toString(),\n page,\n pageSize,\n side,\n });\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"side\") {\n setSide(filter.value);\n setPage(1);\n }\n\n if (filter.name === \"dateRange\") {\n // console.log(\"filter.value\", filter.value);\n\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 total: meta?.total,\n isLoading,\n // onDateRangeChange,\n queryParameter: {\n side,\n dateRange,\n },\n // onSearch,\n onFilter,\n pagination,\n };\n};\n\nexport { useAssetHistoryHook };\n\nexport type UseAssetHistoryReturn = ReturnType<typeof useAssetHistoryHook>;\n","import { FC, useMemo } from \"react\";\nimport { DataFilter } from \"@orderly.network/ui\";\nimport { useAssetHistoryColumns } from \"./column\";\nimport { type UseAssetHistoryReturn } from \"./useDataSource.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\ntype AssetHistoryProps = {\n // dataSource?: any[];\n // page?: number;\n // pageSize?: number;\n // dataCount?: number;\n} & UseAssetHistoryReturn;\n\nexport const AssetHistory: FC<AssetHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading } = props;\n const { side, dateRange } = queryParameter;\n const columns = useAssetHistoryColumns();\n const { t } = useTranslation();\n\n const SIDES = useMemo(() => {\n return [\n { label: t(\"common.all\"), value: \"All\" },\n { label: t(\"common.deposit\"), value: \"DEPOSIT\" },\n { label: t(\"common.withdraw\"), value: \"WITHDRAW\" },\n ];\n }, [t]);\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"side\",\n options: SIDES,\n value: side,\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={{ root: \"oui-h-[calc(100%_-_49px)]\" }}\n columns={columns}\n dataSource={dataSource}\n pagination={props.pagination}\n />\n </>\n );\n};\n","import { useCallback } from \"react\";\nimport { useQuery } from \"@orderly.network/hooks\";\nimport { useScreen, modal } from \"@orderly.network/ui\";\nimport { DepositAndWithdrawWithSheetId } from \"@orderly.network/ui-transfer\";\nimport { AssetHistory } from \"./dataTable.ui\";\nimport { AssetHistoryMobile } from \"./dataTable.ui.mobile\";\nimport { useAssetHistoryHook } from \"./useDataSource.script\";\n\nexport const AssetHistoryWidget = () => {\n const state = useAssetHistoryHook();\n const { data: chains } = useQuery(\"/v1/public/chain_info\");\n\n const onDeposit = useCallback(() => {\n modal.show(DepositAndWithdrawWithSheetId, { activeTab: \"deposit\" });\n }, []);\n\n const { isMobile } = useScreen();\n if (isMobile) {\n return (\n <AssetHistoryMobile\n {...state}\n onDeposit={onDeposit}\n chains={chains as any}\n />\n );\n }\n return <AssetHistory {...state} />;\n};\n","import React, { FC, useMemo } from \"react\";\nimport { useQuery } from \"@orderly.network/hooks\";\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 { type UseAssetHistoryReturn } from \"./useDataSource.script\";\n\ninterface AssetHistoryMobileProps extends UseAssetHistoryReturn {\n onDeposit: () => void;\n chains: any[];\n}\n\nexport const AssetHistoryMobile: FC<AssetHistoryMobileProps> = (props) => {\n const {\n dataSource,\n queryParameter,\n onFilter,\n isLoading,\n pagination,\n onDeposit,\n chains,\n } = props;\n const { side, dateRange } = queryParameter;\n const { t } = useTranslation();\n\n const SIDES = useMemo(() => {\n return [\n { label: t(\"common.all\"), value: \"All\" },\n { label: t(\"common.deposit\"), value: \"DEPOSIT\" },\n { label: t(\"common.withdraw\"), value: \"WITHDRAW\" },\n ];\n }, [t]);\n\n const loadMore = () => {\n if (dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange &&\n pagination.onPageSizeChange(pagination?.pageSize + 50);\n }\n };\n\n // 格式化状态文本\n const getStatusText = (status: string) => {\n const statusMap = {\n [AssetHistoryStatusEnum.NEW]: 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 =\n item.side === \"WITHDRAW\"\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 chains && Array.isArray(chains)\n ? chains.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 itemColor = item.side === \"DEPOSIT\" ? \"buy\" : \"sell\";\n\n return (\n <Flex\n p={2}\n direction=\"column\"\n gapY={1}\n className=\"oui-rounded-xl oui-bg-base-9 oui-font-semibold\"\n >\n <Flex\n direction=\"row\"\n justify=\"start\"\n width=\"100%\"\n className=\"oui-text-xs\"\n height=\"18px\"\n >\n <Text color={itemColor}>{formattedAmount}</Text>\n <Text className=\"oui-ml-1 oui-text-base-contrast-80\">\n {item.token}\n </Text>\n <Badge color={itemColor} className=\"oui-ml-2\" size=\"xs\">\n {item.side === \"DEPOSIT\"\n ? t(\"common.deposit\")\n : t(\"common.withdraw\")}\n </Badge>\n <Text className=\"oui-text-base-contrast-80 oui-ml-auto\">\n {getStatusText(item.trans_status)}\n </Text>\n </Flex>\n <Flex direction=\"row\" justify=\"between\" width=\"100%\" height=\"18px\">\n <Text.formatted\n rule=\"date\"\n className=\"oui-text-base-contrast-36 oui-text-2xs\"\n >\n {item.created_time}\n </Text.formatted>\n {item.tx_id ? (\n <a\n href={getTxLink()}\n target=\"_blank\"\n className=\"oui-text-base-contrast-36 oui-text-xs\"\n rel=\"noreferrer\"\n >\n <Text.formatted\n copyable={!!item.tx_id}\n className=\"oui-underline-offset-4 oui-underline oui-decoration-dashed oui-decoration-line-16\"\n rule=\"txId\"\n onCopy={(e) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n }}\n >\n {item.tx_id}\n </Text.formatted>\n </a>\n ) : (\n <div className=\"oui-text-base-contrast-54\">-</div>\n )}\n </Flex>\n </Flex>\n );\n };\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"picker\",\n name: \"side\",\n options: SIDES,\n value: side,\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-border-none oui-px-3 oui-py-2 oui-sticky oui-top-[44px] oui-z-10 oui-bg-base-10\"\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-w-full oui-text-secondary oui-mt-2 oui-h-4\"\n >\n <Text color=\"primary\" size=\"2xs\">\n {t(\"common.deposit\")}\n </Text>\n <ArrowRightShortIcon\n className=\"oui-ml-0.5 oui-opacity-100 oui-w-4 oui-h-4 oui-text-primary\"\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 &&\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 { TabPanel, Tabs } from \"@orderly.network/ui\";\nimport { AssetHistoryWidget } from \"../assetHistory\";\nimport { DistributionHistoryWidget } from \"../distribution\";\nimport { FundingHistoryWidget } from \"../funding\";\nimport { TabName } from \"./useState.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 }}\n >\n <TabPanel\n title={t(\"portfolio.overview.deposits&Withdrawals\")}\n value={\"deposit\"}\n >\n <AssetHistoryWidget />\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 </Tabs>\n );\n};\n","import { useState } from \"react\";\n\nexport type TabName = \"deposit\" | \"funding\" | \"distribution\";\n\nexport const useStateScript = () => {\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\nexport type UseStateScript = ReturnType<typeof useStateScript>;\n","import { useMemo } from \"react\";\nimport { Card, Grid, Box, Statistic, Text, Flex } from \"@orderly.network/ui\";\nimport { PnLBarChart, PnlLineChart } from \"@orderly.network/chart\";\nimport { PeriodTitle } from \"../shared/periodHeader\";\nimport { UsePerformanceScriptReturn } from \"./performance.script\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { PeriodType } from \"../shared/useAssetHistory\";\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={t(\"portfolio.overview.performance.roi\", {\n period: periodLabel[period as PeriodType],\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={t(\"portfolio.overview.performance.pnl\", {\n period: periodLabel[period as PeriodType],\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 {t(\"portfolio.overview.performance.volume\", {\n period: periodLabel[period as PeriodType],\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 data={props.data ?? []} invisible={props.invisible} />\n <CumulativePnlChart\n data={props.data ?? []}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n </Grid>\n </Card>\n );\n};\n\nexport const PerformancePnL = (props: { data: any[]; invisible: boolean }) => {\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: 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 { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { useOverviewContext } from \"../providers/overviewCtx\";\nimport { useAccount, useLocalStorage } from \"@orderly.network/hooks\";\nimport { useMemo } from \"react\";\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/assetsChart.widget\";\nimport { AssetWidget } from \"./assets\";\nimport { HistoryDataGroupWidget } from \"./historyDataGroup\";\nimport { MobileOverview } from \"./mobile\";\nimport { PerformanceWidget } from \"./performance\";\nimport { OverviewContextProvider } from \"./providers/overviewCtx\";\n\nexport const OverviewPage = () => {\n const { isMobile } = useScreen();\n return (\n <OverviewContextProvider>\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 </OverviewContextProvider>\n );\n};\n","import { FC } from \"react\";\nimport { ENVType, useGetEnv } from \"@orderly.network/hooks\";\nimport { Flex } from \"@orderly.network/ui\";\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 } = useAssetScript();\n const rewardsData = useRewardsDataScript();\n const layoutContext = useLayoutContext();\n const env = useGetEnv();\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 // 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 <PortfolioValueMobile\n toggleVisible={toggleVisible}\n portfolioValue={portfolioValue}\n unrealPnL={unrealPnL}\n unrealROI={unrealROI}\n visible={visible}\n canTrade={canTrade}\n namespace={namespace}\n />\n <PortfolioHandleMobile\n disabled={!canTrade}\n onWithdraw={onWithdraw}\n onDeposit={onDeposit}\n onTransfer={onTransfer}\n isMainAccount={isMainAccount}\n routerAdapter={layoutContext?.routerAdapter}\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.signIn.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};\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 <>\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 <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 ) : (\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 <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 { Flex, Text, cn } from \"@orderly.network/ui\";\nimport { EyeIcon } from \"@orderly.network/ui\";\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};\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 Portfolio value\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-base-contrast oui-text-3xl oui-font-bold\"\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-base-contrast oui-text-sm\"\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 </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","export { FeeTierPage } from \"./page\";\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useAccountInfo,\n usePrivateQuery,\n} from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { dataSource as defaultDataSource } from \"./dataSource\";\nimport { AccountStatusEnum, API } from \"@orderly.network/types\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { Column } from \"@orderly.network/ui\";\nimport { useFeeTierColumns } from \"./column\";\n\nexport type useFeeTierScriptReturn = ReturnType<typeof useFeeTierScript>;\n\nexport type UseFeeTierScriptOptions = {\n dataAdapter?: (\n columns: Column[],\n dataSource: any[]\n ) => { columns: Column[]; dataSource: any[] };\n onRow?: (\n record: any,\n index: number\n ) => {\n normal: any;\n active: any;\n };\n};\n\nexport function useFeeTierScript(options?: UseFeeTierScriptOptions) {\n const { dataAdapter } = options || {};\n const [tier, setTier] = useState<number>();\n const { data } = useAccountInfo();\n const { state } = useAccount();\n\n const cols = useFeeTierColumns();\n\n const { data: volumeStatistics } = usePrivateQuery<\n | {\n perp_volume_last_30_days: number;\n }\n | undefined\n >(\"/v1/volume/user/stats\");\n\n const { columns, dataSource } = useMemo(() => {\n return typeof dataAdapter === \"function\"\n ? dataAdapter(cols, defaultDataSource)\n : {\n columns: cols,\n dataSource: defaultDataSource,\n };\n }, [dataAdapter, cols]);\n\n const getFuturesCurrentTier = (\n feeList: typeof defaultDataSource,\n data: API.AccountInfo\n ) => {\n const { futures_taker_fee_rate = 0, futures_maker_fee_rate = 0 } = data;\n const takerRate = `${new Decimal(futures_taker_fee_rate)\n .mul(0.01)\n .toString()}%`;\n const makerRate = `${new Decimal(futures_maker_fee_rate)\n .mul(0.01)\n .toString()}%`;\n\n for (const item of feeList) {\n if (takerRate === item.taker_fee && makerRate === item.maker_fee) {\n return item.tier;\n }\n }\n };\n\n useEffect(() => {\n if (!data) {\n return;\n }\n\n const tier = getFuturesCurrentTier(dataSource, data);\n setTier(tier!);\n }, [data, dataSource]);\n\n const futures_taker_fee_rate = useMemo(() => {\n const value = data?.futures_taker_fee_rate;\n if (typeof value === \"undefined\") return undefined;\n return `${new Decimal(value).mul(0.01).toString()}%`;\n }, [data]);\n\n const futures_maker_fee_rate = useMemo(() => {\n const value = data?.futures_maker_fee_rate;\n if (typeof value === \"undefined\") return undefined;\n return `${new Decimal(value).mul(0.01).toString()}%`;\n }, [data]);\n\n const authData = useDataTap(\n {\n tier,\n vol: volumeStatistics?.perp_volume_last_30_days,\n takerFeeRate: futures_taker_fee_rate,\n makerFeeRate: futures_maker_fee_rate,\n },\n {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n }\n );\n\n return {\n ...authData,\n columns,\n dataSource,\n onRow: options?.onRow,\n };\n}\n","export const dataSource = [\n {\n tier: 1,\n maker_fee: \"0.03%\",\n taker_fee: \"0.06%\",\n volume_min: 0,\n volume_max: 500000,\n },\n {\n tier: 2,\n maker_fee: \"0.02%\",\n taker_fee: \"0.05%\",\n volume_min: 500000,\n volume_max: 2500000,\n },\n {\n tier: 3,\n maker_fee: \"0.015%\",\n taker_fee: \"0.045%\",\n volume_min: 2500000,\n volume_max: 10000000,\n },\n {\n tier: 4,\n maker_fee: \"0.01%\",\n taker_fee: \"0.04%\",\n volume_min: 10000000,\n volume_max: 50000000,\n },\n {\n tier: 5,\n maker_fee: \"0.005%\",\n taker_fee: \"0.035%\",\n volume_min: 50000000,\n volume_max: 125000000,\n or: \"/\",\n staking_min: 300000,\n staking_max: null,\n },\n {\n tier: 6,\n maker_fee: \"0%\",\n taker_fee: \"0.03%\",\n volume_min: 125000000,\n volume_max: null,\n or: \"/\",\n staking: null,\n staking_min: null,\n staking_max: null,\n },\n];\n","import { useMemo } from \"react\";\nimport { type Column, Text } from \"@orderly.network/ui\";\nimport { numberToHumanStyle } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const useFeeTierColumns = () => {\n const { t } = useTranslation();\n const columns = useMemo(() => {\n return [\n {\n title: t(\"portfolio.feeTier.column.tier\"),\n dataIndex: \"tier\",\n align: \"left\",\n width: 100,\n },\n {\n title: `${t(\"portfolio.feeTier.column.30dVolume\")} (USDC)`,\n dataIndex: \"volume\",\n align: \"center\",\n width: 170,\n render: (value, row) => {\n const { volume_min, volume_max, volume_node } = row;\n\n if (volume_node) return volume_node;\n if (!volume_min && !volume_max) {\n return <div style={{ fontVariantLigatures: \"none\" }}>--</div>;\n }\n\n if (volume_min && !volume_max) {\n return (\n <div>\n {t(\"portfolio.feeTier.column.30dVolume.above\", {\n volume: numberToHumanStyle(\n volume_min,\n volume_min === 2500000 ? 1 : 0\n ),\n })}\n </div>\n );\n }\n return (\n <div>\n {volume_min &&\n numberToHumanStyle(volume_min, volume_min === 2500000 ? 1 : 0)}\n {` - `}\n {volume_max &&\n numberToHumanStyle(volume_max, volume_max === 2500000 ? 1 : 0)}\n </div>\n );\n },\n },\n {\n title: t(\"portfolio.feeTier.column.maker\"),\n dataIndex: \"maker_fee\",\n align: \"right\",\n width: 100,\n render: (value) => {\n return <Text>{value}</Text>;\n },\n },\n {\n title: t(\"portfolio.feeTier.column.taker\"),\n dataIndex: \"taker_fee\",\n align: \"right\",\n width: 100,\n render: (value) => {\n return <Text>{value}</Text>;\n },\n },\n ] as Column[];\n }, [t]);\n\n return columns;\n};\n","import { FC, ReactNode, useCallback, useEffect, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Flex,\n Text,\n Card,\n Divider,\n DataTable,\n Column,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useFeeTierScriptReturn } from \"./feeTier.script\";\n\nexport type FeeTierProps = useFeeTierScriptReturn;\n\nexport const FeeTier: React.FC<FeeTierProps> = (props) => {\n const { columns, dataSource, tier, vol, takerFeeRate, makerFeeRate } = props;\n const { t } = useTranslation();\n return (\n <Card\n title={\n <Flex justify={\"between\"}>\n <Text size=\"lg\">{t(\"portfolio.feeTier\")}</Text>\n <Flex gap={1}>\n <Text size=\"xs\" intensity={54}>\n {t(\"portfolio.feeTier.updatedDailyBy\")}\n </Text>\n <Text size=\"xs\" intensity={80}>\n 2:00 UTC\n </Text>\n </Flex>\n </Flex>\n }\n className=\"w-full\"\n id=\"oui-portfolio-fee-tier\"\n >\n <Divider />\n <FeeTierHeader\n tier={tier!}\n vol={vol!}\n takerFeeRate={takerFeeRate!}\n makerFeeRate={makerFeeRate!}\n />\n <FeeTierTable\n dataSource={dataSource}\n columns={columns}\n tier={tier}\n onRow={props.onRow}\n />\n </Card>\n );\n};\n\nexport type FeeTierHeaderProps = {\n tier?: number;\n vol?: number;\n takerFeeRate?: string;\n makerFeeRate?: string;\n};\n\nexport const FeeTierHeader: React.FC<FeeTierHeaderProps> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex direction=\"row\" gapX={4} my={4} itemAlign={\"stretch\"}>\n <FeeTierHeaderItem\n label={t(\"portfolio.feeTier.header.yourTier\")}\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.tier || \"--\"}\n </Text.gradient>\n }\n />\n <FeeTierHeaderItem\n label={`${t(\"portfolio.feeTier.header.30dVolume\")} (USDC)`}\n value={\n <Text.numeral rule=\"price\" dp={2} rm={Decimal.ROUND_DOWN}>\n {typeof props.vol !== undefined ? `${props.vol}` : \"-\"}\n </Text.numeral>\n }\n />\n <FeeTierHeaderItem\n label={t(\"portfolio.feeTier.header.takerFeeRate\")}\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.takerFeeRate || \"--\"}\n </Text.gradient>\n }\n />\n <FeeTierHeaderItem\n label={t(\"portfolio.feeTier.header.makerFeeRate\")}\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.makerFeeRate || \"--\"}\n </Text.gradient>\n }\n />\n </Flex>\n );\n};\n\nexport type FeeTierHeaderItemProps = {\n label: string;\n value: ReactNode;\n};\n\nexport const FeeTierHeaderItem: React.FC<FeeTierHeaderItemProps> = (props) => {\n return (\n <Box\n gradient=\"neutral\"\n r=\"lg\"\n px={4}\n py={2}\n angle={184}\n width=\"100%\"\n border\n borderColor={6}\n >\n <Text\n as=\"div\"\n intensity={36}\n size=\"2xs\"\n weight=\"semibold\"\n className=\"oui-leading-[18px]\"\n >\n {props.label}\n </Text>\n\n <Text\n size=\"base\"\n intensity={80}\n className=\"oui-mt-[2px] oui-leading-[24px]\"\n >\n {props.value}\n </Text>\n </Box>\n );\n};\n\ntype FeeTierTableProps = {\n columns: Column[];\n dataSource?: any[];\n page?: number;\n pageSize?: number;\n dataCount?: number;\n tier?: number | null;\n onRow?: (\n record: any,\n index: number,\n ) => {\n normal: any;\n active: any;\n };\n};\n\nexport const FeeTierTable: FC<FeeTierTableProps> = (props) => {\n const [top, setTop] = useState<undefined | number>(undefined);\n useEffect(() => {\n const parentRect = document\n .getElementById(\"oui-fee-tier-content\")\n ?.getBoundingClientRect();\n const elementRect = document\n .getElementById(\"oui-fee-tier-current\")\n ?.getBoundingClientRect();\n\n if (elementRect && parentRect && !!props.tier) {\n const offsetTop = elementRect.top - parentRect.top;\n setTop(offsetTop);\n } else {\n setTop(undefined);\n }\n }, [props.tier]);\n\n const onRow = useCallback(\n (record: any, index: number) => {\n const config = props?.onRow?.(record, index) ?? {\n normal: undefined,\n active: undefined,\n };\n if (index + 1 == props.tier) {\n const innerConfig = {\n id: \"oui-fee-tier-current\",\n \"data-state\": \"active\",\n className:\n \"group oui-h-12 oui-text-[rgba(0,0,0,0.88)] oui-pointer-events-none\",\n };\n return {\n ...innerConfig,\n ...config.active,\n };\n }\n\n return {\n \"data-state\": \"none\",\n ...{ className: \"oui-h-12\" },\n ...config.normal,\n };\n },\n [props.tier, props.onRow],\n );\n\n return (\n <Box\n id=\"oui-fee-tier-content\"\n className=\"oui-relative oui-border-b oui-border-line-4\"\n >\n {top && (\n <Box\n angle={90}\n gradient=\"brand\"\n className=\"oui-absolute oui-w-full oui-rounded-md\"\n style={{\n top: `${top}px`,\n height: \"48px\",\n }}\n />\n )}\n <DataTable\n bordered\n className=\"oui-font-semibold\"\n classNames={{\n root: \"oui-bg-transparent\",\n }}\n onRow={onRow}\n columns={props.columns}\n dataSource={props.dataSource}\n />\n </Box>\n );\n};\n","import { FC } from \"react\";\nimport { useFeeTierScript, UseFeeTierScriptOptions } from \"./feeTier.script\";\nimport { FeeTier } from \"./feeTier.ui\";\n\nexport type FeeTierWidgetProps = UseFeeTierScriptOptions;\n\nexport const FeeTierWidget: FC<FeeTierWidgetProps> = (props) => {\n const state = useFeeTierScript(props);\n return <FeeTier {...state} />;\n};\n","import { FC } from \"react\";\nimport { FeeTierWidget, FeeTierWidgetProps } from \"./feeTier.widget\";\n\nexport type FeeTierPageProps = FeeTierWidgetProps;\n\nexport const FeeTierPage: FC<FeeTierPageProps> = (props) => {\n return <FeeTierWidget {...props} />;\n};\n","import { useMemo, useState } from \"react\";\nimport React from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Flex,\n Text,\n Divider,\n Box,\n Tabs,\n TabPanel,\n DataFilter,\n formatAddress,\n} from \"@orderly.network/ui\";\nimport {\n LiquidationWidget,\n PositionHistoryWidget,\n PositionsProps,\n CombinePositionsWidget,\n PositionsWidget,\n} from \"@orderly.network/ui-positions\";\nimport type { SelectOption } from \"@orderly.network/ui/src/select/withOptions\";\nimport { AccountType } from \"../assets/assets.ui\";\n\nenum TabsType {\n positions = \"Positions\",\n positionHistory = \"Position history\",\n liquidation = \"Liquidation\",\n}\n\nexport const PositionsPage: React.FC<PositionsProps> = (props) => {\n const [tab, setTab] = useState(TabsType.positions);\n const { t } = useTranslation();\n const { state, isMainAccount } = useAccount();\n\n const subAccounts = state.subAccounts ?? [];\n\n const [selectedAccount, setAccount] = React.useState<string>(AccountType.ALL);\n\n const onAccountFilter = React.useCallback(\n (filter: { name: string; value: string }) => {\n const { name, value } = filter;\n if (name === \"account\") {\n setAccount(value);\n }\n },\n [],\n );\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\n\n return (\n <Flex\n // p={6}\n direction={\"column\"}\n itemAlign={\"start\"}\n gap={4}\n width=\"100%\"\n height=\"100%\"\n >\n <Flex>\n <Text size=\"lg\">{t(\"common.positions\")}</Text>\n </Flex>\n <Divider className=\"oui-w-full\" />\n {/* 26(title height) + 1(divider) + 32 (padding) */}\n <Box width=\"100%\" className=\"oui-h-[calc(100%_-_59px)]\">\n <Tabs\n value={tab}\n onValueChange={(e) => setTab(e as any)}\n classNames={{\n tabsList: \"!oui-border-none oui-pb-1\",\n tabsContent: \"oui-h-[calc(100%_-_28px)]\",\n }}\n className=\"oui-h-full\"\n >\n <TabPanel value={TabsType.positions} title={t(\"common.positions\")}>\n {isMainAccount && (\n <DataFilter\n onFilter={onAccountFilter}\n items={[\n {\n type: \"select\",\n name: \"account\",\n value: selectedAccount,\n options: memoizedOptions,\n },\n ]}\n />\n )}\n {isMainAccount ? (\n <CombinePositionsWidget\n selectedAccount={selectedAccount}\n {...props}\n />\n ) : (\n <PositionsWidget {...props} />\n )}\n </TabPanel>\n <TabPanel\n value={TabsType.positionHistory}\n title={t(\"positions.positionHistory\")}\n >\n <PositionHistoryWidget {...props} />\n </TabPanel>\n <TabPanel\n value={TabsType.liquidation}\n title={t(\"positions.liquidation\")}\n >\n <LiquidationWidget />\n </TabPanel>\n </Tabs>\n </Box>\n </Flex>\n );\n};\n","import React, { useMemo } from \"react\";\nimport pick from \"ramda/es/pick\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n// import { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Text,\n Card,\n Flex,\n Divider,\n gradientTextVariants,\n EyeIcon,\n EyeCloseIcon,\n cn,\n DataFilter,\n Badge,\n formatAddress,\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\";\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\nexport const AssetsTable: React.FC<\n Readonly<AssetsWidgetProps & ReturnType<typeof useAccount>>\n> = (props) => {\n const {\n state,\n isMainAccount,\n selectedAccount,\n columns,\n dataSource,\n onFilter,\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 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 return (\n <Card\n className=\"w-full\"\n title={\n <Flex\n gap={4}\n direction={\"column\"}\n itemAlign={\"start\"}\n justify={\"between\"}\n >\n <Text size=\"lg\">{t(\"common.assets\")}</Text>\n <TotalValue\n {...pick([\"totalValue\", \"visible\", \"onToggleVisibility\"], props)}\n />\n </Flex>\n }\n >\n <Divider />\n {isMainAccount && (\n <DataFilter\n onFilter={onFilter}\n items={[\n {\n type: \"select\",\n name: \"account\",\n value: selectedAccount,\n options: memoizedOptions,\n },\n ]}\n />\n )}\n <AuthGuardDataTable\n bordered\n className=\"oui-font-semibold\"\n classNames={{ root: \"oui-bg-transparent\" }}\n columns={columns}\n dataSource={dataSource}\n expanded\n getSubRows={(row) => row.children}\n generatedRowKey={(record) => {\n return `${record.account_id}${record.token ? `_${record.token}` : \"\"}`;\n }}\n onCell={(column, record) => {\n const isGroup = (record.children ?? []).length > 0;\n if (isGroup) {\n return {\n children:\n column.id === \"token\" ? (\n <Badge color=\"neutral\" size=\"xs\">\n {record?.description || formatAddress(record?.id)}\n </Badge>\n ) : null,\n };\n }\n }}\n />\n </Card>\n );\n};\n","import { FC, SVGProps, useRef } from \"react\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { Box, Button, Divider, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { OrderListInstance, OrdersWidget } from \"@orderly.network/ui-orders\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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: FC<SVGProps<SVGSVGElement>> = (props) => (\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 {...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","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(\"portfolio.apiKey.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.signIn.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-evm/evm-api/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 { cn, Flex, SimpleDialog, Statistic, Text } from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\nimport { ScopeType } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 {/* <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-createApiKey-dialog-textarea\"\n placeholder={t(\"portfolio.apiKey.create.ipRestriction.placeholder\")}\n className={cn(\n \"oui-text-sm oui-text-base-contrast-80 oui-p-3 oui-h-[100px] oui-rounded-xl oui-bg-base-6 oui-w-full\",\n \"oui-border-0 focus:oui-border-2 focus:oui-border-primary-darken oui-outline-none\",\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-h-1 oui-w-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 \"disabled:oui-cursor-not-allowed disabled:oui-opacity-50 oui-flex oui-items-center oui-gap-2\"\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-break-normal oui-whitespace-nowrap\"\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(\"portfolio.apiKey.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 { cn, Flex, SimpleDialog, Statistic, Text } from \"@orderly.network/ui\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\nimport { Checkbox } from \"./createApiKey\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 useEffect(() => {\n setIpText(item.ip_restriction_list.join(\",\"));\n setRead(item.scope?.toLocaleLowerCase().includes(\"read\") || false);\n setTrade(item.scope?.toLocaleLowerCase().includes(\"trading\") || false);\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-text-sm oui-text-base-contrast-80 oui-p-3 oui-h-[100px] oui-rounded-xl oui-bg-base-6 oui-w-full\",\n \"oui-border-0 focus:oui-border-2 focus:oui-border-primary-darken oui-outline-none\",\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-h-1 oui-w-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-font-semibold oui-border-t-2 oui-border-line-6\"\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\n className=\"oui-flex-row oui-items-center oui-mt-1 oui-mb-2 oui-p-4 oui-bg-base-9 oui-rounded-xl\"\n onClick={onLanguageChange}\n >\n <LanguageSwitcherWidget open={open} setOpen={setOpen} />\n <Text className=\"oui-text-base oui-font-semibold oui-text-base-contrast-80 oui-ml-2\">\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 <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 { useAssetsScript, useAssetsScriptReturn } from \"./assets.script\";\nimport { AssetsTable } from \"./assets.ui\";\n\nexport type AssetsWidgetProps = useAssetsScriptReturn;\n\nexport const AssetsWidget: React.FC = () => {\n const state = useAssetsScript();\n const accountState = useAccount();\n return <AssetsTable {...state} {...accountState} />;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport {\n SubAccount,\n useAccount,\n useCollateral,\n useLocalStorage,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport type { API } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\nimport { TransferDialogId } from \"@orderly.network/ui-transfer\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { AccountType } from \"./assets.ui\";\nimport { useAssetsColumns } from \"./column\";\n\nconst isNumber = (val: unknown): val is number => {\n return typeof val === \"number\" && !Number.isNaN(val);\n};\n\nconst calculateTotalHolding = (data: SubAccount[] | SubAccount[\"holding\"]) => {\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 total = total.plus(hol.holding);\n }\n }\n } else if (isNumber(item.holding)) {\n total = total.plus(item.holding);\n }\n }\n return total;\n};\n\nconst ORDERLY_ASSETS_VISIBLE_KEY = \"orderly_assets_visible\";\n\nconst EMPTY_HOLDING: Partial<API.Holding> = {\n token: \"USDC\",\n holding: 0,\n frozen: 0,\n};\n\nexport const useAssetsScript = () => {\n const [visible, setVisible] = useLocalStorage<boolean>(\n ORDERLY_ASSETS_VISIBLE_KEY,\n true,\n );\n\n const { t } = useTranslation();\n\n const { state, isMainAccount } = useAccount();\n\n const { holding = [] } = useCollateral();\n\n const subAccounts = state.subAccounts ?? [];\n\n const toggleVisible = () => {\n // @ts-ignore\n setVisible((visible: boolean) => !visible);\n };\n\n const [selectedAccount, setAccount] = React.useState<string>(AccountType.ALL);\n\n const allAccounts = useMemo(() => {\n return produce<any[]>(subAccounts, (draft) => {\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 Reflect.deleteProperty(sub, \"holding\");\n }\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]);\n\n const filtered = React.useMemo(() => {\n return allAccounts.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 }, [allAccounts, selectedAccount, isMainAccount, state]);\n\n const mainTotalValue = useMemo<Decimal>(\n () => calculateTotalHolding(holding),\n [holding],\n );\n\n const subTotalValue = useMemo<Decimal>(\n () => calculateTotalHolding(subAccounts),\n [subAccounts],\n );\n\n const memoizedTotalValue = 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).toNumber();\n }\n return 0;\n }\n }, [\n isMainAccount,\n mainTotalValue,\n subTotalValue,\n allAccounts,\n state.accountId,\n ]);\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 handleTransfer = (accountId: string) => {\n if (!accountId) {\n return;\n }\n modal.show(TransferDialogId, {\n toAccountId: accountId,\n });\n };\n\n const assetsColumns = useAssetsColumns({ onClick: handleTransfer });\n\n return {\n columns: assetsColumns,\n dataSource: filtered,\n visible: visible as boolean,\n onToggleVisibility: toggleVisible,\n selectedAccount,\n onFilter: onAccountFilter,\n totalValue: memoizedTotalValue,\n };\n};\n\nexport type useAssetsScriptReturn = ReturnType<typeof useAssetsScript>;\n","import React from \"react\";\n// import { useIndexPrice } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Button, Flex, Text, TokenIcon } from \"@orderly.network/ui\";\nimport type { Column } from \"@orderly.network/ui\";\n\nexport interface ColumnsOptions {\n onClick?: (id: string) => void;\n}\n\nconst INDEX_PRICE = 1;\nconst COLLATERAL_RATIO = 100;\n// TODO: use real index price\n// const { data } = useIndexPrice(\"\");\n\nexport const useAssetsColumns = (options: ColumnsOptions) => {\n const { t } = useTranslation();\n const { onClick } = 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: 170,\n },\n {\n title: t(\"portfolio.overview.column.indexPrice\"),\n dataIndex: \"price\",\n align: \"left\",\n width: 100,\n render: () => INDEX_PRICE,\n },\n {\n title: t(\"portfolio.overview.column.collateralRatio\"),\n dataIndex: \"ratio\",\n align: \"left\",\n width: 100,\n render: () => `${COLLATERAL_RATIO}%`,\n },\n {\n title: t(\"portfolio.overview.column.assetContribution\"),\n dataIndex: \"asset_contribution\",\n align: \"left\",\n width: 100,\n render(_, record) {\n return (\n <Text>\n {record.holding * INDEX_PRICE} {record.token}\n </Text>\n );\n },\n },\n {\n title: null,\n dataIndex: \"account_id\",\n align: \"center\",\n width: 100,\n render(id: string) {\n return (\n <Button\n size={\"sm\"}\n variant={\"outlined\"}\n color={\"secondary\"}\n onClick={() => onClick?.(id)}\n >\n {t(\"common.transfer\")}\n </Button>\n );\n },\n },\n ];\n }, [t]);\n return columns;\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/assetChart/assetsChart.script.ts","../src/pages/overview/providers/overviewCtx.tsx","../src/pages/overview/mobile/useRewardsData.script.ts","../src/pages/overview/shared/useAssetHistory.ts","../src/pages/overview/assetChart/assetsChart.ui.tsx","../src/pages/overview/shared/periodHeader.tsx","../src/pages/overview/assetChart/assetsChart.widget.tsx","../src/pages/overview/historyDataGroup/historyDataGroup.widget.tsx","../src/pages/overview/historyDataGroup/historyDataGroup.ui.desktop.tsx","../src/pages/overview/TransferHistory/transfer.widget.tsx","../src/pages/overview/TransferHistory/transfer.ui.tsx","../src/pages/overview/TransferHistory/column.tsx","../src/pages/overview/TransferHistory/useDataSource.script.ts","../src/pages/overview/helper/date.ts","../src/pages/overview/assetHistory/column.tsx","../src/pages/overview/assetChart/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/overview/historyDataGroup/useState.script.ts","../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/feeTier/index.tsx","../src/pages/feeTier/feeTier.script.ts","../src/pages/feeTier/dataSource.ts","../src/pages/feeTier/column.tsx","../src/pages/feeTier/feeTier.ui.tsx","../src/pages/feeTier/feeTier.widget.tsx","../src/pages/feeTier/page.tsx","../src/pages/positions/page.tsx","../src/pages/assets/assets.ui.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/pages/assets/column.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","AssetsChartWidget","AssetsUI","DistributionHistoryDesktop","DistributionHistoryMobile","DistributionHistoryWidget","FundingHistoryWidget","HistoryDataGroupWidget","OverviewContextProvider","OverviewPage","PerformanceUI","PerformanceWidget","useAssetHistoryColumns","useAssetHistoryScript","useAssetsLineChartScript","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","canTrade","onLeverageEdit","onDeposit","onWithdraw","onTransfer","Card","Divider","Grid","Either","Statistic","Text","EyeIcon","gradientTextVariants","EditIcon","EyeCloseIcon","AuthGuard","ArrowDownSquareFillIcon","ArrowUpSquareFillIcon","Button","CardTitle","AssetsHeader","NoValue","AssetStatistic","connectWallet","useDataTap","useRef","useAllBrokers","useConfig","useCurEpochEstimate","useEpochInfo","useGetClaimed","usePrivateQuery","DistributionId","TWType","useRewardsData","type","totalOrderClaimedReward","curEpochEstimate","brokers","mutate","epochList","brokerId","brokerName","lastStete","timerId","useRewardsDataScript","referralInfo","OverviewContext","isSignIn","useAssetsHistory","useStatisticsDaily","subDays","format","getYear","getMonth","getDate","addDays","Decimal","zero","PeriodType","useAssetsHistoryData","localKey","options","today","d","isRealtime","periodTypes","period","setPeriod","getStartDate","value","periodValue","startDate","setStartDate","endDate","assetHistory","onPeriodChange","calculateLastPnl","inputs","list","i","calculate","lastItem","todayFormattedStr","mergeData","calculateData","realtime","_data","calculatedData","aggregateValue","vol","pnl","roi","tail","dataTailIndex","lastAccountValue","start","end","_","useOverviewContext","rewardsData","filteredData","invisible","Select","PeriodTitle","periodLabel","AssetLineChart","AssetsChartUI","ArrowLeftRightSquareFill","FeeTierIcon","ServerFillIcon","TabPanel","Tabs","produce","DataFilter","formatAddress","AuthGuardDataTable","React","TokenIcon","toast","Badge","capitalizeString","useColumns","onCopy","sub","val","subAccount","TransferHistoryUI","dataSource","queryParameter","isLoading","selectedAccount","onFilter","side","dateRange","ALL_ACCOUNTS","MAIN_ACCOUNT","subAccounts","memoizedOptions","columns","draft","row","set","useTransferHistory","usePagination","subtractDaysFromCurrentDate","differenceInDays","setHours","parseDateRangeForFilter","from","to","useTransferHistoryHook","date","setDateRange","page","pageSize","setPage","parsePagination","setAccount","setSide","meta","onAccountFilter","filter","pagination","TransferHistoryWidget","accountState","AssetHistoryStatusEnum","capitalizeFirstLetter","chainsInfo","isDeposit","isWeb3Wallet","txIdColumn","record","href","accountIdColumn","accountId","recoed","useQuery","target","setTarget","startTime","endTime","withdrawData","withdrawMeta","withdrawLoading","transferData","transferLoading","transferMeta","ListView","ArrowRightShortIcon","EmptyDataState","AssetHistoryMobile","loadMore","getStatusText","status","renderHistoryItem","formattedAmount","getTxLink","chainInfo","chain","itemColor","amountView","statusView","timeView","txIdView","accountIdView","index","isValidating","TYPES","getTypeText","renderItem","useDistributionHistory","useDistributionHistoryHook","setType","useSymbolsInfo","FundingHistoryDesktop","symbols","symbol","FundingHistoryMobile","switchPaymentType","paymentType","useFundingFeeHistory","setSymbol","HistoryDataGroupDesktop","active","onTabChange","HistoryDataGroupMobile","useStateScript","setActive","PnLBarChart","PnlLineChart","volumeUpdateDate","PerformancePnL","CumulativePnlChart","ctx","ENVType","useGetEnv","parseJSON","useChains","ChainNamespace","CopyIcon","ChainIcon","useCurrentStatus","account","statusText","EVMChainPopover","chains","key","MoreIcon","EVMChains","ShowAccount","onCopyAddress","currentNamespace","getLinkDeviceStorage","leftNode","rightNode","bgClass","bg","AccountStatusMobile","description","rootClass","linkDeviceStorage","isNumber","AffiliateIcon","ChevronRightIcon","commifyOptional","AffiliateCardMobile","CalendarMinusIcon","ArrowLeftRightIcon","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","unrealPnL","unrealROI","toggleVisible","layoutContext","env","goToClaim","url","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","DataTable","FeeTier","takerFeeRate","makerFeeRate","FeeTierHeader","FeeTierTable","FeeTierHeaderItem","top","setTop","parentRect","elementRect","offsetTop","onRow","config","FeeTierWidget","page_exports","PositionsPage","LiquidationWidget","PositionHistoryWidget","CombinePositionsWidget","PositionsWidget","pick","TotalValue","onToggleVisibility","Icon","AssetsTable","column","tab","setTab","name","OrdersPage","Tooltip","OrdersWidget","sharePnLConfig","ordersRef","onDownload","TooltipIcon","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","resolve","curKey","reject","doEdit","future","onCopyAccountId","onCopyApiKey","onCopyApiSecretKey","onCopyIP","keyList","filterTag","filterCurKey","verifyIP","accountStatus","userId","str","SimpleDialog","CreateAPIKeyDialog","ipText","setIpText","read","setRead","trade","setTrade","asset","setAsset","hint","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","INDEX_PRICE","COLLATERAL_RATIO","useAssetsColumns","onClick","id","calculateTotalHolding","total","hol","ORDERLY_ASSETS_VISIBLE_KEY","EMPTY_HOLDING","useAssetsScript","holding","allAccounts","filtered","mainTotalValue","subTotalValue","memoizedTotalValue","find","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 (current || routerAdapter?.currentPath) {\n setCurrent(current || routerAdapter?.currentPath || \"/portfolio\");\n }\n }, [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 // console.log(\"PortfolioLayoutMobile\", props, props.routerAdapter);\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 {\n PropsWithChildren,\n createContext,\n useContext,\n useState,\n useMemo,\n} from \"react\";\nimport { 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 = (\n props: PropsWithChildren<{ routerAdapter?: RouterAdapter }>,\n) => {\n const [sideOpen, setSideOpen] = useState(true);\n const memoizedValue = useMemo<LayoutContextValue>(\n () => ({\n sideOpen,\n onSideOpenChange: setSideOpen,\n routerAdapter: props.routerAdapter,\n }),\n [sideOpen, setSideOpen, props.routerAdapter],\n );\n return (\n <LayoutContext.Provider value={memoizedValue}>\n {props.children}\n </LayoutContext.Provider>\n );\n};\n","export { AssetWidget, AssetsUI } from \"./assets\";\nexport { AssetsChartWidget } from \"./assetChart/assetsChart.widget\";\nexport { useAssetsLineChartScript } from \"./assetChart/assetsChart.script\";\nexport { HistoryDataGroupWidget } from \"./historyDataGroup\";\n\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 { OverviewContextProvider } from \"./providers/overviewCtx\";\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\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 } 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 />\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 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};\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 {props.isMainAccount ? (\n <Flex gap={3}>\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 <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 </Flex>\n ) : (\n <Button\n disabled={props.disabled}\n size=\"md\"\n color=\"secondary\"\n onClick={() => props.onTransfer?.()}\n >\n {t(\"common.transfer\")}\n </Button>\n )}\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 { AccountStatusEnum } from \"@orderly.network/types\";\nimport { useAssetsHistoryData } from \"../shared/useAssetHistory\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { useOverviewContext } from \"../providers/overviewCtx\";\nimport { useMemo } from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\n\nexport const useAssetsLineChartScript = () => {\n // const assetHistory = useAssetsHistoryData(\"portfolio_asset_history_period\", {\n // isRealtime: true,\n // });\n\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 useAssetsLineChartScriptReturn = ReturnType<\n typeof useAssetsLineChartScript\n>;\n","import { createContext, useContext, PropsWithChildren } from \"react\";\nimport { TWType } from \"@orderly.network/hooks\";\nimport {\n useRewardsData,\n UseRewardsDataReturn,\n} from \"../mobile/useRewardsData.script\";\nimport {\n useAssetsHistoryData,\n useAssetsHistoryDataReturn,\n} 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\nconst localKey = \"portfolio_performance_period\";\n\nexport const useOverviewContext = () => {\n return useContext(OverviewContext);\n};\n\nexport const OverviewContextProvider = (\n props: PropsWithChildren<{ type?: TWType }>,\n) => {\n const state = useAssetsHistoryData(localKey, { isRealtime: true });\n const rewardsData = useRewardsData({ type: props.type });\n\n return (\n <OverviewContext.Provider\n value={{\n ...state,\n type: props.type,\n ...rewardsData,\n }}\n >\n {props.children}\n </OverviewContext.Provider>\n );\n};\n","import { useMemo, useContext, 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 { OverviewContext } from \"../providers/overviewCtx\";\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 } = useContext(OverviewContext);\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 { useMemo, useState } from \"react\";\nimport {\n useAssetsHistory,\n useCollateral,\n useLocalStorage,\n useStatisticsDaily,\n} from \"@orderly.network/hooks\";\nimport { subDays, format, getYear, getMonth, getDate, addDays } from \"date-fns\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\n\nexport enum PeriodType {\n WEEK = \"7D\",\n MONTH = \"30D\",\n QUARTER = \"90D\",\n}\n\nexport const useAssetsHistoryData = (\n localKey: string,\n options?: {\n isRealtime?: boolean;\n }\n) => {\n const [today] = useState(() => {\n const d = new Date();\n\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\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\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\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().toString(),\n endTime: endDate.getTime().toString(),\n pageSize: 50,\n });\n\n const onPeriodChange = (value: PeriodType) => {\n setStartDate(getStartDate(value));\n setPeriod(value);\n };\n\n // const lastItem = data[data.length - 1];\n\n const calculateLastPnl = (inputs: {\n lastItem: API.DailyRow;\n assetHistory: API.AssetHistoryRow[];\n totalValue: number | null;\n }) => {\n if (totalValue == null) return null;\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 // console.log(\"--->>>>> list\", list);\n\n // calculate the sum of deposit and withdraw\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (item.side === \"DEPOSIT\") {\n // value -= item.amount;\n if (item.trans_status === \"COMPLETED\") {\n value = value.sub(item.amount);\n }\n } else if (item.side === \"WITHDRAW\") {\n if (item.trans_status !== \"FAILED\") {\n value = value.add(item.amount);\n }\n }\n }\n }\n\n return value.toNumber();\n };\n\n const calculate = (data: API.DailyRow[], totalValue: number | null) => {\n const lastItem = data[data.length - 1];\n const todayFormattedStr = format(today, \"yyyy-MM-dd\");\n\n return {\n ...lastItem,\n date: todayFormattedStr,\n perp_volume: 0,\n account_value:\n totalValue !== null ? totalValue : lastItem?.account_value ?? 0,\n pnl: calculateLastPnl({ lastItem, assetHistory, totalValue }) ?? 0,\n };\n };\n\n const mergeData = (data: API.DailyRow[], totalValue: number | null) => {\n if (!Array.isArray(data) || data.length === 0) {\n return data;\n }\n\n if (data[data.length - 1].date === format(today, \"yyyy-MM-dd\")) {\n data;\n }\n\n return data.concat([calculate(data, totalValue)]);\n };\n\n const calculateData = (data: API.DailyRow[], realtime: boolean) => {\n const _data = !realtime ? data : mergeData(data, totalValue);\n\n return _data.slice(Math.max(0, _data.length - periodValue));\n };\n\n const calculatedData = useMemo(() => {\n /**\n * need the totalValue and data are all ready, else return null;\n */\n if (totalValue == null) return [];\n return calculateData(data, isRealtime);\n }, [data, totalValue, assetHistory, isRealtime]);\n\n const aggregateValue = useMemo(() => {\n let vol = zero;\n let pnl = zero;\n let roi = zero;\n\n if (Array.isArray(calculatedData) && calculatedData.length) {\n calculatedData.forEach((d) => {\n // vol = vol.add(d.perp_volume);\n pnl = pnl.add(d.pnl);\n });\n\n const tail = calculatedData[0];\n\n const dataTailIndex = data.findIndex((d) => d.date === tail.date);\n\n const lastAccountValue = data[dataTailIndex - 1]?.account_value;\n\n // console.log(data, calculatedData, tail, dataTailIndex);\n\n if (typeof lastAccountValue === \"undefined\" || lastAccountValue === 0) {\n roi = zero;\n } else {\n roi = pnl.div(lastAccountValue);\n }\n }\n\n if (data.length > 0) {\n for (let i = 0; i < periodValue; i++) {\n const item = data[data.length - 1 - i];\n\n if (item) {\n vol = vol.add(item.perp_volume ?? 0);\n }\n }\n }\n\n // console.log(\"---------------------------\");\n\n return { vol: vol.toNumber(), pnl: pnl.toNumber(), roi: roi.toNumber() };\n }, [calculatedData, data, periodValue]);\n\n const createFakeData = (\n start: Partial<API.DailyRow>,\n end: Partial<API.DailyRow>\n ) => {\n return Array.from({ length: 2 }, (_, i) => {\n const date = format(i === 0 ? startDate : new Date(), \"yyyy-MM-dd\");\n\n return {\n date,\n ...(i === 0 ? start : end),\n };\n });\n };\n\n return {\n periodTypes,\n period,\n onPeriodChange,\n data: calculatedData,\n aggregateValue,\n createFakeData,\n volumeUpdateDate: data?.[data.length - 1]?.date ?? \"\",\n } as const;\n};\n\nexport type useAssetsHistoryDataReturn = ReturnType<\n typeof useAssetsHistoryData\n>;\n","import { Card } from \"@orderly.network/ui\";\nimport { PeriodTitle } from \"../shared/periodHeader\";\nimport { useAssetsLineChartScriptReturn } from \"./assetsChart.script\";\nimport { AssetLineChart } from \"@orderly.network/chart\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type AssetsLineChartProps = {} & useAssetsLineChartScriptReturn;\n\nexport const AssetsChartUI = (props: AssetsLineChartProps) => {\n const { onPeriodChange, periodTypes, period, data } = 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} 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 { useAssetsLineChartScript } from \"./assetsChart.script\";\nimport { AssetsChartUI } from \"./assetsChart.ui\";\n\nexport const AssetsChartWidget = () => {\n const state = useAssetsLineChartScript();\n return <AssetsChartUI {...state} />;\n};\n","import { useScreen } from \"@orderly.network/ui\";\nimport { HistoryDataGroupDesktop } from \"./historyDataGroup.ui.desktop\";\nimport { HistoryDataGroupMobile } from \"./historyDataGroup.ui.mobile\";\nimport { useStateScript } from \"./useState.script\";\n\nexport const HistoryDataGroupWidget: React.FC = () => {\n const state = useStateScript();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <HistoryDataGroupMobile {...state} />;\n }\n return <HistoryDataGroupDesktop {...state} />;\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowLeftRightSquareFill,\n ArrowUpSquareFillIcon,\n Card,\n FeeTierIcon,\n ServerFillIcon,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { ArrowLeftRightIcon } from \"@orderly.network/ui\";\nimport { TransferHistoryWidget } from \"../TransferHistory\";\nimport { AssetHistoryWidget } from \"../assetHistory\";\nimport { DistributionHistoryWidget } from \"../distribution\";\nimport { FundingHistoryWidget } from \"../funding\";\nimport { TabName } from \"./useState.script\";\n\nexport const HistoryDataGroupDesktop = (props: {\n active?: TabName;\n onTabChange: (tab: string) => void;\n}) => {\n const { active = \"deposit\", onTabChange } = props;\n const { t } = useTranslation();\n\n return (\n <Card>\n <Tabs\n value={active}\n onValueChange={onTabChange}\n variant=\"contained\"\n size=\"xl\"\n // classNames={{\n // tabsList: \"oui-px-3\",\n // }}\n >\n <TabPanel\n title={t(\"common.deposits\")}\n icon={<ArrowDownSquareFillIcon />}\n value={\"deposit\"}\n >\n <AssetHistoryWidget side=\"deposit\" />\n </TabPanel>\n <TabPanel\n title={t(\"common.withdrawals\")}\n icon={<ArrowUpSquareFillIcon />}\n value={\"withdraw\"}\n >\n <AssetHistoryWidget side=\"withdraw\" />\n </TabPanel>\n <TabPanel\n title={t(\"common.funding\")}\n icon={<FeeTierIcon />}\n value={\"funding\"}\n >\n <FundingHistoryWidget />\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.distribution\")}\n icon={<ServerFillIcon />}\n value={\"distribution\"}\n >\n <DistributionHistoryWidget />\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.transferHistory\")}\n icon={<ArrowLeftRightSquareFill />}\n value={\"transfer\"}\n >\n <TransferHistoryWidget />\n </TabPanel>\n </Tabs>\n </Card>\n );\n};\n","import React from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { TransferHistoryUI } from \"./transfer.ui\";\nimport { useTransferHistoryHook } from \"./useDataSource.script\";\n\nexport const TransferHistoryWidget: React.FC = () => {\n const state = useTransferHistoryHook();\n const accountState = useAccount();\n return <TransferHistoryUI {...state} {...accountState} />;\n};\n","import React, { useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport type { API } from \"@orderly.network/types\";\nimport { DataFilter, formatAddress } from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport type { SelectOption } from \"@orderly.network/ui/src/select/withOptions\";\nimport { useColumns } from \"./column\";\nimport type { useTransferHistoryHookReturn } from \"./useDataSource.script\";\n\ntype HistoryProps = useTransferHistoryHookReturn;\n\nexport enum AccountType {\n ALL = \"All accounts\",\n MAIN = \"Main accounts\",\n}\n\nexport const TransferHistoryUI: React.FC<\n Readonly<HistoryProps & ReturnType<typeof useAccount>>\n> = (props) => {\n const {\n dataSource,\n queryParameter,\n state,\n isMainAccount,\n isLoading,\n selectedAccount,\n onFilter,\n } = props;\n const { side, dateRange } = queryParameter;\n\n const { t } = useTranslation();\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const subAccounts = state.subAccounts ?? [];\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\n\n const columns = useColumns();\n\n return (\n <>\n <DataFilter\n onFilter={onFilter}\n items={produce(\n [\n {\n type: \"select\",\n name: \"side\",\n value: side,\n options: [\n { value: \"OUT\", label: \"Outflow\" },\n { value: \"IN\", label: \"Inflow\" },\n ],\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ],\n (draft) => {\n if (isMainAccount) {\n draft.unshift({\n type: \"select\",\n name: \"account\",\n value: selectedAccount as any,\n options: memoizedOptions,\n });\n }\n },\n )}\n />\n <AuthGuardDataTable<API.TransferHistoryRow>\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n // isValidating={isValidating}\n className=\"oui-font-semibold\"\n classNames={{ root: \"oui-h-[calc(100%_-_49px)]\" }}\n pagination={props.pagination}\n generatedRowKey={(row) => row.id}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } 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 { 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 { AssetSide } from \"../assetChart/assetHistory.script\";\n\ntype Options = {\n side: AssetSide;\n chainsInfo: any[];\n isDeposit: boolean;\n isWeb3Wallet: boolean;\n};\n\nexport const useAssetHistoryColumns = (options: Options) => {\n const { side, 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(() => {\n const txIdColumn = {\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 as any[])?.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 } as Column;\n\n const accountIdColumn = {\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 } as Column;\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.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 formatter: (value, record) =>\n isDeposit ? value - (record.fee ?? 0) : -(value - (record.fee ?? 0)),\n numeralProps: {\n coloring: true,\n showIdentifier: true,\n },\n // formatter: \"date\",\n },\n ] as Column[];\n }, [t, chainsInfo, side, 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 useTransferHistory,\n} from \"@orderly.network/hooks\";\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 type AssetSide = \"deposit\" | \"withdraw\";\n\nexport enum AssetTarget {\n Web3Wallet = \"Web3Wallet\",\n AccountId = \"AccountId\",\n}\n\nexport type AssetHistoryScriptOptions = {\n side: AssetSide;\n};\n\nexport type AssetHistoryScriptReturn = ReturnType<typeof useAssetHistoryScript>;\n\nexport const useAssetHistoryScript = (options: AssetHistoryScriptOptions) => {\n const { side } = options;\n const [today] = useState(() => {\n const d = new Date();\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\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 = 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 const [withdrawData, { meta: withdrawMeta, isLoading: withdrawLoading }] =\n useAssetsHistory({\n startTime: startTime.toString(),\n endTime: endTime.toString(),\n page,\n pageSize,\n side: side.toUpperCase(),\n });\n\n const [transferData, { isLoading: transferLoading, meta: transferMeta }] =\n useTransferHistory({\n dataRange: [startTime, endTime],\n side: side === \"deposit\" ? \"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 withdrawLoading;\n }\n return transferLoading;\n }, [target, withdrawLoading, transferLoading]);\n\n const meta = useMemo(() => {\n if (target === AssetTarget.Web3Wallet) {\n return withdrawMeta;\n }\n return transferMeta;\n }, [target, withdrawMeta, transferMeta]);\n\n const pagination = useMemo(\n () => parsePagination(meta),\n [parsePagination, meta],\n );\n\n const dataSource = useMemo(() => {\n if (target === AssetTarget.Web3Wallet) {\n return withdrawData;\n }\n return transferData;\n }, [target, withdrawData, transferData]);\n\n const onDeposit = useCallback(() => {\n modal.show(DepositAndWithdrawWithSheetId, { activeTab: \"deposit\" });\n }, []);\n\n const isDeposit = side === \"deposit\";\n const isWeb3Wallet = target === AssetTarget.Web3Wallet;\n\n return {\n dataSource,\n total: meta?.total,\n isLoading,\n queryParameter: {\n dateRange,\n },\n onFilter,\n pagination,\n side,\n target,\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 \"../assetChart/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 } = queryParameter;\n const columns = useAssetHistoryColumns({\n side: props.side,\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: props.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 { useScreen } from \"@orderly.network/ui\";\nimport {\n AssetSide,\n useAssetHistoryScript,\n} from \"../assetChart/assetHistory.script\";\nimport { AssetHistory } from \"./assetHistory.ui\";\nimport { AssetHistoryMobile } from \"./assetHistory.ui.mobile\";\n\ntype AssetHistoryWidgetProps = {\n side: AssetSide;\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 \"../assetChart/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 } = 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.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: props.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 &&\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 { TabPanel, Tabs } from \"@orderly.network/ui\";\nimport { AssetHistoryWidget } from \"../assetHistory\";\nimport { DistributionHistoryWidget } from \"../distribution\";\nimport { FundingHistoryWidget } from \"../funding\";\nimport { TabName } from \"./useState.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 }}\n >\n <TabPanel title={t(\"common.deposits\")} value={\"deposit\"}>\n <AssetHistoryWidget side=\"deposit\" />\n </TabPanel>\n <TabPanel title={t(\"common.withdrawals\")} value={\"withdraw\"}>\n <AssetHistoryWidget side=\"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 </Tabs>\n );\n};\n","import { useState } from \"react\";\n\nexport type TabName = \"deposit\" | \"funding\" | \"distribution\";\n\nexport const useStateScript = () => {\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\nexport type UseStateScript = ReturnType<typeof useStateScript>;\n","import { useMemo } from \"react\";\nimport { Card, Grid, Box, Statistic, Text, Flex } from \"@orderly.network/ui\";\nimport { PnLBarChart, PnlLineChart } from \"@orderly.network/chart\";\nimport { PeriodTitle } from \"../shared/periodHeader\";\nimport { UsePerformanceScriptReturn } from \"./performance.script\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { PeriodType } from \"../shared/useAssetHistory\";\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={t(\"portfolio.overview.performance.roi\", {\n period: periodLabel[period as PeriodType],\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={t(\"portfolio.overview.performance.pnl\", {\n period: periodLabel[period as PeriodType],\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 {t(\"portfolio.overview.performance.volume\", {\n period: periodLabel[period as PeriodType],\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 data={props.data ?? []} invisible={props.invisible} />\n <CumulativePnlChart\n data={props.data ?? []}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n </Grid>\n </Card>\n );\n};\n\nexport const PerformancePnL = (props: { data: any[]; invisible: boolean }) => {\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: 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 { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { useOverviewContext } from \"../providers/overviewCtx\";\nimport { useAccount, useLocalStorage } from \"@orderly.network/hooks\";\nimport { useMemo } from \"react\";\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/assetsChart.widget\";\nimport { AssetWidget } from \"./assets\";\nimport { HistoryDataGroupWidget } from \"./historyDataGroup\";\nimport { MobileOverview } from \"./mobile\";\nimport { PerformanceWidget } from \"./performance\";\nimport { OverviewContextProvider } from \"./providers/overviewCtx\";\n\nexport const OverviewPage = () => {\n const { isMobile } = useScreen();\n return (\n <OverviewContextProvider>\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 </OverviewContextProvider>\n );\n};\n","import { FC } from \"react\";\nimport { ENVType, useGetEnv } from \"@orderly.network/hooks\";\nimport { Flex } from \"@orderly.network/ui\";\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 } = useAssetScript();\n const rewardsData = useRewardsDataScript();\n const layoutContext = useLayoutContext();\n const env = useGetEnv();\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 // 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 <PortfolioValueMobile\n toggleVisible={toggleVisible}\n portfolioValue={portfolioValue}\n unrealPnL={unrealPnL}\n unrealROI={unrealROI}\n visible={visible}\n canTrade={canTrade}\n namespace={namespace}\n />\n <PortfolioHandleMobile\n disabled={!canTrade}\n onWithdraw={onWithdraw}\n onDeposit={onDeposit}\n onTransfer={onTransfer}\n isMainAccount={isMainAccount}\n routerAdapter={layoutContext?.routerAdapter}\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};\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 <>\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 <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 ) : (\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 <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 { Flex, Text, cn } from \"@orderly.network/ui\";\nimport { EyeIcon } from \"@orderly.network/ui\";\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};\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 Portfolio value\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-base-contrast oui-text-3xl oui-font-bold\"\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-base-contrast oui-text-sm\"\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 </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","export { FeeTierPage } from \"./page\";\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useAccountInfo,\n usePrivateQuery,\n} from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { dataSource as defaultDataSource } from \"./dataSource\";\nimport { AccountStatusEnum, API } from \"@orderly.network/types\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { Column } from \"@orderly.network/ui\";\nimport { useFeeTierColumns } from \"./column\";\n\nexport type useFeeTierScriptReturn = ReturnType<typeof useFeeTierScript>;\n\nexport type UseFeeTierScriptOptions = {\n dataAdapter?: (\n columns: Column[],\n dataSource: any[]\n ) => { columns: Column[]; dataSource: any[] };\n onRow?: (\n record: any,\n index: number\n ) => {\n normal: any;\n active: any;\n };\n};\n\nexport function useFeeTierScript(options?: UseFeeTierScriptOptions) {\n const { dataAdapter } = options || {};\n const [tier, setTier] = useState<number>();\n const { data } = useAccountInfo();\n const { state } = useAccount();\n\n const cols = useFeeTierColumns();\n\n const { data: volumeStatistics } = usePrivateQuery<\n | {\n perp_volume_last_30_days: number;\n }\n | undefined\n >(\"/v1/volume/user/stats\");\n\n const { columns, dataSource } = useMemo(() => {\n return typeof dataAdapter === \"function\"\n ? dataAdapter(cols, defaultDataSource)\n : {\n columns: cols,\n dataSource: defaultDataSource,\n };\n }, [dataAdapter, cols]);\n\n const getFuturesCurrentTier = (\n feeList: typeof defaultDataSource,\n data: API.AccountInfo\n ) => {\n const { futures_taker_fee_rate = 0, futures_maker_fee_rate = 0 } = data;\n const takerRate = `${new Decimal(futures_taker_fee_rate)\n .mul(0.01)\n .toString()}%`;\n const makerRate = `${new Decimal(futures_maker_fee_rate)\n .mul(0.01)\n .toString()}%`;\n\n for (const item of feeList) {\n if (takerRate === item.taker_fee && makerRate === item.maker_fee) {\n return item.tier;\n }\n }\n };\n\n useEffect(() => {\n if (!data) {\n return;\n }\n\n const tier = getFuturesCurrentTier(dataSource, data);\n setTier(tier!);\n }, [data, dataSource]);\n\n const futures_taker_fee_rate = useMemo(() => {\n const value = data?.futures_taker_fee_rate;\n if (typeof value === \"undefined\") return undefined;\n return `${new Decimal(value).mul(0.01).toString()}%`;\n }, [data]);\n\n const futures_maker_fee_rate = useMemo(() => {\n const value = data?.futures_maker_fee_rate;\n if (typeof value === \"undefined\") return undefined;\n return `${new Decimal(value).mul(0.01).toString()}%`;\n }, [data]);\n\n const authData = useDataTap(\n {\n tier,\n vol: volumeStatistics?.perp_volume_last_30_days,\n takerFeeRate: futures_taker_fee_rate,\n makerFeeRate: futures_maker_fee_rate,\n },\n {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n }\n );\n\n return {\n ...authData,\n columns,\n dataSource,\n onRow: options?.onRow,\n };\n}\n","export const dataSource = [\n {\n tier: 1,\n maker_fee: \"0.03%\",\n taker_fee: \"0.06%\",\n volume_min: 0,\n volume_max: 500000,\n },\n {\n tier: 2,\n maker_fee: \"0.02%\",\n taker_fee: \"0.05%\",\n volume_min: 500000,\n volume_max: 2500000,\n },\n {\n tier: 3,\n maker_fee: \"0.015%\",\n taker_fee: \"0.045%\",\n volume_min: 2500000,\n volume_max: 10000000,\n },\n {\n tier: 4,\n maker_fee: \"0.01%\",\n taker_fee: \"0.04%\",\n volume_min: 10000000,\n volume_max: 50000000,\n },\n {\n tier: 5,\n maker_fee: \"0.005%\",\n taker_fee: \"0.035%\",\n volume_min: 50000000,\n volume_max: 125000000,\n or: \"/\",\n staking_min: 300000,\n staking_max: null,\n },\n {\n tier: 6,\n maker_fee: \"0%\",\n taker_fee: \"0.03%\",\n volume_min: 125000000,\n volume_max: null,\n or: \"/\",\n staking: null,\n staking_min: null,\n staking_max: null,\n },\n];\n","import { useMemo } from \"react\";\nimport { type Column, Text } from \"@orderly.network/ui\";\nimport { numberToHumanStyle } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const useFeeTierColumns = () => {\n const { t } = useTranslation();\n const columns = useMemo(() => {\n return [\n {\n title: t(\"portfolio.feeTier.column.tier\"),\n dataIndex: \"tier\",\n align: \"left\",\n width: 100,\n },\n {\n title: `${t(\"portfolio.feeTier.column.30dVolume\")} (USDC)`,\n dataIndex: \"volume\",\n align: \"center\",\n width: 170,\n render: (value, row) => {\n const { volume_min, volume_max, volume_node } = row;\n\n if (volume_node) return volume_node;\n if (!volume_min && !volume_max) {\n return <div style={{ fontVariantLigatures: \"none\" }}>--</div>;\n }\n\n if (volume_min && !volume_max) {\n return (\n <div>\n {t(\"portfolio.feeTier.column.30dVolume.above\", {\n volume: numberToHumanStyle(\n volume_min,\n volume_min === 2500000 ? 1 : 0\n ),\n })}\n </div>\n );\n }\n return (\n <div>\n {volume_min &&\n numberToHumanStyle(volume_min, volume_min === 2500000 ? 1 : 0)}\n {` - `}\n {volume_max &&\n numberToHumanStyle(volume_max, volume_max === 2500000 ? 1 : 0)}\n </div>\n );\n },\n },\n {\n title: t(\"portfolio.feeTier.column.maker\"),\n dataIndex: \"maker_fee\",\n align: \"right\",\n width: 100,\n render: (value) => {\n return <Text>{value}</Text>;\n },\n },\n {\n title: t(\"portfolio.feeTier.column.taker\"),\n dataIndex: \"taker_fee\",\n align: \"right\",\n width: 100,\n render: (value) => {\n return <Text>{value}</Text>;\n },\n },\n ] as Column[];\n }, [t]);\n\n return columns;\n};\n","import { FC, ReactNode, useCallback, useEffect, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Flex,\n Text,\n Card,\n Divider,\n DataTable,\n Column,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useFeeTierScriptReturn } from \"./feeTier.script\";\n\nexport type FeeTierProps = useFeeTierScriptReturn;\n\nexport const FeeTier: React.FC<FeeTierProps> = (props) => {\n const { columns, dataSource, tier, vol, takerFeeRate, makerFeeRate } = props;\n const { t } = useTranslation();\n return (\n <Card\n title={\n <Flex justify={\"between\"}>\n <Text size=\"lg\">{t(\"portfolio.feeTier\")}</Text>\n <Flex gap={1}>\n <Text size=\"xs\" intensity={54}>\n {t(\"portfolio.feeTier.updatedDailyBy\")}\n </Text>\n <Text size=\"xs\" intensity={80}>\n 2:00 UTC\n </Text>\n </Flex>\n </Flex>\n }\n className=\"w-full\"\n id=\"oui-portfolio-fee-tier\"\n >\n <Divider />\n <FeeTierHeader\n tier={tier!}\n vol={vol!}\n takerFeeRate={takerFeeRate!}\n makerFeeRate={makerFeeRate!}\n />\n <FeeTierTable\n dataSource={dataSource}\n columns={columns}\n tier={tier}\n onRow={props.onRow}\n />\n </Card>\n );\n};\n\nexport type FeeTierHeaderProps = {\n tier?: number;\n vol?: number;\n takerFeeRate?: string;\n makerFeeRate?: string;\n};\n\nexport const FeeTierHeader: React.FC<FeeTierHeaderProps> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex direction=\"row\" gapX={4} my={4} itemAlign={\"stretch\"}>\n <FeeTierHeaderItem\n label={t(\"portfolio.feeTier.header.yourTier\")}\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.tier || \"--\"}\n </Text.gradient>\n }\n />\n <FeeTierHeaderItem\n label={`${t(\"portfolio.feeTier.header.30dVolume\")} (USDC)`}\n value={\n <Text.numeral rule=\"price\" dp={2} rm={Decimal.ROUND_DOWN}>\n {typeof props.vol !== undefined ? `${props.vol}` : \"-\"}\n </Text.numeral>\n }\n />\n <FeeTierHeaderItem\n label={t(\"portfolio.feeTier.header.takerFeeRate\")}\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.takerFeeRate || \"--\"}\n </Text.gradient>\n }\n />\n <FeeTierHeaderItem\n label={t(\"portfolio.feeTier.header.makerFeeRate\")}\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.makerFeeRate || \"--\"}\n </Text.gradient>\n }\n />\n </Flex>\n );\n};\n\nexport type FeeTierHeaderItemProps = {\n label: string;\n value: ReactNode;\n};\n\nexport const FeeTierHeaderItem: React.FC<FeeTierHeaderItemProps> = (props) => {\n return (\n <Box\n gradient=\"neutral\"\n r=\"lg\"\n px={4}\n py={2}\n angle={184}\n width=\"100%\"\n border\n borderColor={6}\n >\n <Text\n as=\"div\"\n intensity={36}\n size=\"2xs\"\n weight=\"semibold\"\n className=\"oui-leading-[18px]\"\n >\n {props.label}\n </Text>\n\n <Text\n size=\"base\"\n intensity={80}\n className=\"oui-mt-[2px] oui-leading-[24px]\"\n >\n {props.value}\n </Text>\n </Box>\n );\n};\n\ntype FeeTierTableProps = {\n columns: Column[];\n dataSource?: any[];\n page?: number;\n pageSize?: number;\n dataCount?: number;\n tier?: number | null;\n onRow?: (\n record: any,\n index: number,\n ) => {\n normal: any;\n active: any;\n };\n};\n\nexport const FeeTierTable: FC<FeeTierTableProps> = (props) => {\n const [top, setTop] = useState<undefined | number>(undefined);\n useEffect(() => {\n const parentRect = document\n .getElementById(\"oui-fee-tier-content\")\n ?.getBoundingClientRect();\n const elementRect = document\n .getElementById(\"oui-fee-tier-current\")\n ?.getBoundingClientRect();\n\n if (elementRect && parentRect && !!props.tier) {\n const offsetTop = elementRect.top - parentRect.top;\n setTop(offsetTop);\n } else {\n setTop(undefined);\n }\n }, [props.tier]);\n\n const onRow = useCallback(\n (record: any, index: number) => {\n const config = props?.onRow?.(record, index) ?? {\n normal: undefined,\n active: undefined,\n };\n if (index + 1 == props.tier) {\n const innerConfig = {\n id: \"oui-fee-tier-current\",\n \"data-state\": \"active\",\n className:\n \"group oui-h-12 oui-text-[rgba(0,0,0,0.88)] oui-pointer-events-none\",\n };\n return {\n ...innerConfig,\n ...config.active,\n };\n }\n\n return {\n \"data-state\": \"none\",\n ...{ className: \"oui-h-12\" },\n ...config.normal,\n };\n },\n [props.tier, props.onRow],\n );\n\n return (\n <Box\n id=\"oui-fee-tier-content\"\n className=\"oui-relative oui-border-b oui-border-line-4\"\n >\n {top && (\n <Box\n angle={90}\n gradient=\"brand\"\n className=\"oui-absolute oui-w-full oui-rounded-md\"\n style={{\n top: `${top}px`,\n height: \"48px\",\n }}\n />\n )}\n <DataTable\n bordered\n className=\"oui-font-semibold\"\n classNames={{\n root: \"oui-bg-transparent\",\n }}\n onRow={onRow}\n columns={props.columns}\n dataSource={props.dataSource}\n />\n </Box>\n );\n};\n","import { FC } from \"react\";\nimport { useFeeTierScript, UseFeeTierScriptOptions } from \"./feeTier.script\";\nimport { FeeTier } from \"./feeTier.ui\";\n\nexport type FeeTierWidgetProps = UseFeeTierScriptOptions;\n\nexport const FeeTierWidget: FC<FeeTierWidgetProps> = (props) => {\n const state = useFeeTierScript(props);\n return <FeeTier {...state} />;\n};\n","import { FC } from \"react\";\nimport { FeeTierWidget, FeeTierWidgetProps } from \"./feeTier.widget\";\n\nexport type FeeTierPageProps = FeeTierWidgetProps;\n\nexport const FeeTierPage: FC<FeeTierPageProps> = (props) => {\n return <FeeTierWidget {...props} />;\n};\n","import { useMemo, useState } from \"react\";\nimport React from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Flex,\n Text,\n Divider,\n Box,\n Tabs,\n TabPanel,\n DataFilter,\n formatAddress,\n} from \"@orderly.network/ui\";\nimport {\n LiquidationWidget,\n PositionHistoryWidget,\n PositionsProps,\n CombinePositionsWidget,\n PositionsWidget,\n} from \"@orderly.network/ui-positions\";\nimport type { SelectOption } from \"@orderly.network/ui/src/select/withOptions\";\nimport { AccountType } from \"../assets/assets.ui\";\n\nenum TabsType {\n positions = \"Positions\",\n positionHistory = \"Position history\",\n liquidation = \"Liquidation\",\n}\n\nexport const PositionsPage: React.FC<PositionsProps> = (props) => {\n const [tab, setTab] = useState(TabsType.positions);\n const { t } = useTranslation();\n const { state, isMainAccount } = useAccount();\n\n const subAccounts = state.subAccounts ?? [];\n\n const [selectedAccount, setAccount] = React.useState<string>(AccountType.ALL);\n\n const onAccountFilter = React.useCallback(\n (filter: { name: string; value: string }) => {\n const { name, value } = filter;\n if (name === \"account\") {\n setAccount(value);\n }\n },\n [],\n );\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\n\n return (\n <Flex\n // p={6}\n direction={\"column\"}\n itemAlign={\"start\"}\n gap={4}\n width=\"100%\"\n height=\"100%\"\n >\n <Flex>\n <Text size=\"lg\">{t(\"common.positions\")}</Text>\n </Flex>\n <Divider className=\"oui-w-full\" />\n {/* 26(title height) + 1(divider) + 32 (padding) */}\n <Box width=\"100%\" className=\"oui-h-[calc(100%_-_59px)]\">\n <Tabs\n value={tab}\n onValueChange={(e) => setTab(e as any)}\n classNames={{\n tabsList: \"!oui-border-none oui-pb-1\",\n tabsContent: \"oui-h-[calc(100%_-_28px)]\",\n }}\n className=\"oui-h-full\"\n >\n <TabPanel value={TabsType.positions} title={t(\"common.positions\")}>\n {isMainAccount && (\n <DataFilter\n onFilter={onAccountFilter}\n items={[\n {\n type: \"select\",\n name: \"account\",\n value: selectedAccount,\n options: memoizedOptions,\n },\n ]}\n />\n )}\n {isMainAccount ? (\n <CombinePositionsWidget\n selectedAccount={selectedAccount}\n {...props}\n />\n ) : (\n <PositionsWidget {...props} />\n )}\n </TabPanel>\n <TabPanel\n value={TabsType.positionHistory}\n title={t(\"positions.positionHistory\")}\n >\n <PositionHistoryWidget {...props} />\n </TabPanel>\n <TabPanel\n value={TabsType.liquidation}\n title={t(\"positions.liquidation\")}\n >\n <LiquidationWidget />\n </TabPanel>\n </Tabs>\n </Box>\n </Flex>\n );\n};\n","import React, { useMemo } from \"react\";\nimport pick from \"ramda/es/pick\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n// import { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Text,\n Card,\n Flex,\n Divider,\n gradientTextVariants,\n EyeIcon,\n EyeCloseIcon,\n cn,\n DataFilter,\n Badge,\n formatAddress,\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\";\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\nexport const AssetsTable: React.FC<\n Readonly<AssetsWidgetProps & ReturnType<typeof useAccount>>\n> = (props) => {\n const {\n state,\n isMainAccount,\n selectedAccount,\n columns,\n dataSource,\n onFilter,\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 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 return (\n <Card\n className=\"w-full\"\n title={\n <Flex\n gap={4}\n direction={\"column\"}\n itemAlign={\"start\"}\n justify={\"between\"}\n >\n <Text size=\"lg\">{t(\"common.assets\")}</Text>\n <TotalValue\n {...pick([\"totalValue\", \"visible\", \"onToggleVisibility\"], props)}\n />\n </Flex>\n }\n >\n <Divider />\n {isMainAccount && (\n <DataFilter\n onFilter={onFilter}\n items={[\n {\n type: \"select\",\n name: \"account\",\n value: selectedAccount,\n options: memoizedOptions,\n },\n ]}\n />\n )}\n <AuthGuardDataTable\n bordered\n className=\"oui-font-semibold\"\n classNames={{ root: \"oui-bg-transparent\" }}\n columns={columns}\n dataSource={dataSource}\n expanded\n getSubRows={(row) => row.children}\n generatedRowKey={(record) => {\n return `${record.account_id}${record.token ? `_${record.token}` : \"\"}`;\n }}\n onCell={(column, record) => {\n const isGroup = (record.children ?? []).length > 0;\n if (isGroup) {\n return {\n children:\n column.id === \"token\" ? (\n <Badge color=\"neutral\" size=\"xs\">\n {record?.description || formatAddress(record?.id)}\n </Badge>\n ) : null,\n };\n }\n }}\n />\n </Card>\n );\n};\n","import { FC, SVGProps, useRef } from \"react\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { Box, Button, Divider, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { OrderListInstance, OrdersWidget } from \"@orderly.network/ui-orders\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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: FC<SVGProps<SVGSVGElement>> = (props) => (\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 {...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","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 [asset, setAsset] = 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 if (asset) {\n scopes.push(\"asset\");\n }\n await props.doCreate(ipText, scopes.join(\",\") as ScopeType);\n },\n disabled: !trade && !read && !asset,\n size: \"md\",\n },\n }}\n classNames={{\n footer: \"oui-justify-center\",\n content:\n \"oui-bg-base-8 oui-w-[300px] lg:oui-w-[360px] oui-font-semibold\",\n }}\n >\n <Flex direction={\"column\"} gap={6}>\n <Flex direction={\"column\"} gap={1} width={\"100%\"} itemAlign={\"start\"}>\n <Text intensity={54} size=\"2xs\">\n {t(\"portfolio.apiKey.create.ipRestriction\")}\n </Text>\n <textarea\n data-testid=\"oui-testid-apiKey-createApiKey-dialog-textarea\"\n placeholder={t(\"portfolio.apiKey.create.ipRestriction.placeholder\")}\n className={cn(\n \"oui-h-[100px] oui-w-full oui-rounded-xl oui-bg-base-6 oui-p-3 oui-text-sm oui-text-base-contrast-80\",\n \"oui-border-0 oui-outline-none focus:oui-border-2 focus:oui-border-primary-darken\",\n \"oui-placeholder-base-contrast-20\",\n hint.length > 0 &&\n \"oui-outline-1 oui-outline-danger focus:oui-outline-none\",\n )}\n value={ipText}\n onChange={(e) => {\n setIpText(e.target.value);\n }}\n style={{\n resize: \"none\",\n }}\n />\n {hint.length > 0 && (\n <Flex gap={1} className=\"oui-relative\">\n <div\n className={cn(\n \"oui-absolute oui-top-[10px]\",\n \"oui-size-1 oui-rounded-full oui-bg-danger\",\n )}\n />\n <Text color=\"danger\" size=\"xs\" className=\"oui-ml-2\">\n {hint}\n </Text>\n </Flex>\n )}\n </Flex>\n <Statistic\n label={\n <Text size=\"xs\" intensity={54}>\n {t(\"portfolio.apiKey.permissions\")}\n </Text>\n }\n className=\"oui-w-full\"\n >\n <Flex\n direction={\"row\"}\n gap={6}\n itemAlign={\"start\"}\n className=\"oui-mt-2\"\n >\n <Checkbox\n size={18}\n checked={read}\n onCheckedChange={(e) => setRead(e as boolean)}\n label={t(\"portfolio.apiKey.permissions.read\")}\n testid=\"oui-testid-apiKey-createApiKey-dialog-read-checkbox\"\n />\n <Checkbox\n size={18}\n checked={trade}\n onCheckedChange={(e) => setTrade(e as boolean)}\n label={t(\"portfolio.apiKey.permissions.trading\")}\n testid=\"oui-testid-apiKey-createApiKey-dialog-trading-checkbox\"\n />\n <Checkbox\n size={18}\n checked={asset}\n onCheckedChange={(e) => setAsset(e as boolean)}\n label={t(\"portfolio.apiKey.permissions.asset\")}\n testid=\"oui-testid-apiKey-createApiKey-dialog-asset-checkbox\"\n />\n </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 [asset, setAsset] = 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 setAsset(scope.includes(\"asset\"));\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 <Checkbox\n disabled\n size={18}\n checked={asset}\n onCheckedChange={(e) => setAsset(e as boolean)}\n label={t(\"portfolio.apiKey.permissions.asset\")}\n />\n </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-font-semibold oui-border-t-2 oui-border-line-6\"\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\n className=\"oui-flex-row oui-items-center oui-mt-1 oui-mb-2 oui-p-4 oui-bg-base-9 oui-rounded-xl\"\n onClick={onLanguageChange}\n >\n <LanguageSwitcherWidget open={open} setOpen={setOpen} />\n <Text className=\"oui-text-base oui-font-semibold oui-text-base-contrast-80 oui-ml-2\">\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 <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 { useAssetsScript, useAssetsScriptReturn } from \"./assets.script\";\nimport { AssetsTable } from \"./assets.ui\";\n\nexport type AssetsWidgetProps = useAssetsScriptReturn;\n\nexport const AssetsWidget: React.FC = () => {\n const state = useAssetsScript();\n const accountState = useAccount();\n return <AssetsTable {...state} {...accountState} />;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport {\n SubAccount,\n useAccount,\n useCollateral,\n useLocalStorage,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport type { API } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\nimport { TransferDialogId } from \"@orderly.network/ui-transfer\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { AccountType } from \"./assets.ui\";\nimport { useAssetsColumns } from \"./column\";\n\nconst isNumber = (val: unknown): val is number => {\n return typeof val === \"number\" && !Number.isNaN(val);\n};\n\nconst calculateTotalHolding = (data: SubAccount[] | SubAccount[\"holding\"]) => {\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 total = total.plus(hol.holding);\n }\n }\n } else if (isNumber(item.holding)) {\n total = total.plus(item.holding);\n }\n }\n return total;\n};\n\nconst ORDERLY_ASSETS_VISIBLE_KEY = \"orderly_assets_visible\";\n\nconst EMPTY_HOLDING: Partial<API.Holding> = {\n token: \"USDC\",\n holding: 0,\n frozen: 0,\n};\n\nexport const useAssetsScript = () => {\n const [visible, setVisible] = useLocalStorage<boolean>(\n ORDERLY_ASSETS_VISIBLE_KEY,\n true,\n );\n\n const { t } = useTranslation();\n\n const { state, isMainAccount } = useAccount();\n\n const { holding = [] } = useCollateral();\n\n const subAccounts = state.subAccounts ?? [];\n\n const toggleVisible = () => {\n // @ts-ignore\n setVisible((visible: boolean) => !visible);\n };\n\n const [selectedAccount, setAccount] = React.useState<string>(AccountType.ALL);\n\n const allAccounts = useMemo(() => {\n return produce<any[]>(subAccounts, (draft) => {\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 Reflect.deleteProperty(sub, \"holding\");\n }\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]);\n\n const filtered = React.useMemo(() => {\n return allAccounts.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 }, [allAccounts, selectedAccount, isMainAccount, state]);\n\n const mainTotalValue = useMemo<Decimal>(\n () => calculateTotalHolding(holding),\n [holding],\n );\n\n const subTotalValue = useMemo<Decimal>(\n () => calculateTotalHolding(subAccounts),\n [subAccounts],\n );\n\n const memoizedTotalValue = 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).toNumber();\n }\n return 0;\n }\n }, [\n isMainAccount,\n mainTotalValue,\n subTotalValue,\n allAccounts,\n state.accountId,\n ]);\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 handleTransfer = (accountId: string) => {\n if (!accountId) {\n return;\n }\n modal.show(TransferDialogId, {\n toAccountId: accountId,\n });\n };\n\n const assetsColumns = useAssetsColumns({ onClick: handleTransfer });\n\n return {\n columns: assetsColumns,\n dataSource: filtered,\n visible: visible as boolean,\n onToggleVisibility: toggleVisible,\n selectedAccount,\n onFilter: onAccountFilter,\n totalValue: memoizedTotalValue,\n };\n};\n\nexport type useAssetsScriptReturn = ReturnType<typeof useAssetsScript>;\n","import React from \"react\";\n// import { useIndexPrice } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Button, Flex, Text, TokenIcon } from \"@orderly.network/ui\";\nimport type { Column } from \"@orderly.network/ui\";\n\nexport interface ColumnsOptions {\n onClick?: (id: string) => void;\n}\n\nconst INDEX_PRICE = 1;\nconst COLLATERAL_RATIO = 100;\n// TODO: use real index price\n// const { data } = useIndexPrice(\"\");\n\nexport const useAssetsColumns = (options: ColumnsOptions) => {\n const { t } = useTranslation();\n const { onClick } = 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: 170,\n },\n {\n title: t(\"portfolio.overview.column.indexPrice\"),\n dataIndex: \"price\",\n align: \"left\",\n width: 100,\n render: () => INDEX_PRICE,\n },\n {\n title: t(\"portfolio.overview.column.collateralRatio\"),\n dataIndex: \"ratio\",\n align: \"left\",\n width: 100,\n render: () => `${COLLATERAL_RATIO}%`,\n },\n {\n title: t(\"portfolio.overview.column.assetContribution\"),\n dataIndex: \"asset_contribution\",\n align: \"left\",\n width: 100,\n render(_, record) {\n return (\n <Text>\n {record.holding * INDEX_PRICE} {record.token}\n </Text>\n );\n },\n },\n {\n title: null,\n dataIndex: \"account_id\",\n align: \"center\",\n width: 100,\n render(id: string) {\n return (\n <Button\n size={\"sm\"}\n variant={\"outlined\"}\n color={\"secondary\"}\n onClick={() => onClick?.(id)}\n >\n {t(\"common.transfer\")}\n </Button>\n );\n },\n },\n ];\n }, [t]);\n return columns;\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"]}
|