@orderly.network/portfolio 2.1.0 → 2.1.1-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +16 -16
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/layout/layout.ui.tsx","../src/layout/layout.script.tsx","../src/layout/layout.widget.tsx","../src/pages/overview/index.tsx","../src/pages/overview/assets/useBuilder.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/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.ui.tsx","../src/pages/overview/assetHistory/column.tsx","../src/pages/overview/assetHistory/useDataSource.script.ts","../src/pages/overview/helper/date.ts","../src/pages/overview/assetHistory/dataTable.ui.tsx","../src/pages/overview/assetHistory/widget.tsx","../src/pages/overview/funding/fundingHistory.ui.tsx","../src/pages/overview/funding/column.tsx","../src/pages/overview/funding/useDataSource.script.ts","../src/pages/overview/funding/fundingHistory.widget.tsx","../src/pages/overview/distribution/distribution.ui.tsx","../src/pages/overview/distribution/column.tsx","../src/pages/overview/distribution/useDataSource.script.ts","../src/pages/overview/distribution/distribution.widget.tsx","../src/pages/overview/historyDataGroup/useState.script.ts","../src/pages/overview/historyDataGroup/historyDataGroup.widget.tsx","../src/pages/overview/performance/performance.ui.tsx","../src/pages/overview/performance/performance.script.ts","../src/pages/overview/performance/performance.widget.tsx","../src/pages/overview/main.tsx","../src/pages/feeTier/index.tsx","../src/pages/feeTier/feeTier.script.ts","../src/pages/feeTier/dataSource.ts","../src/pages/feeTier/column.tsx","../src/pages/feeTier/feeTier.ui.tsx","../src/pages/feeTier/feeTier.widget.tsx","../src/pages/feeTier/page.tsx","../src/pages/positions/page.tsx","../src/pages/orders/page.tsx","../src/pages/api/index.ts","../src/pages/api/apiManager.ui.tsx","../src/pages/api/apiManager.script.tsx","../src/pages/api/dialog/createApiKey.tsx","../src/pages/api/dialog/createdApiKey.tsx","../src/pages/api/dialog/deleteApiKey.tsx","../src/pages/api/dialog/editApiKey.tsx","../src/pages/api/apiManager.widget.tsx","../src/pages/api/apiManager.page.tsx","../src/pages/setting/index.ts","../src/pages/setting/setting.ui.tsx","../src/pages/setting/setting.script.tsx","../src/pages/setting/setting.widget.tsx","../src/pages/setting/setting.page.tsx"],"names":["Box","Scaffold","SideBar","useScaffoldContext","useTranslation","jsx","PortfolioLayout","props","children","leftSideProps","LeftSidebar","expanded","setExpand","t","open","e","useEffect","useMemo","useState","useMediaQuery","PortfolioLeftSidebarPath","usePortfolioLayoutScript","routerAdapter","current","setCurrent","items","hideSideBar","item","PortfolioLayoutWidget","state","overview_exports","__export","AssetHistory","AssetHistoryWidget","AssetWidget","AssetsChartWidget","AssetsUI","DistributionHistoryUI","DistributionHistoryWidget","FundingHistoryWidget","HistoryDataGroupWidget","OverviewContextProvider","OverviewPage","PerformanceUI","PerformanceWidget","useAssetHistoryColumns","useAssetHistoryHook","useAssetsLineChartScript","useFundingHistoryColumns","useFundingHistoryHook","usePerformanceScript","useAccount","useCollateral","useLeverage","useLocalStorage","usePositionStream","useWalletConnector","AccountStatusEnum","modal","LeverageWidgetId","DepositAndWithdrawWithDialogId","useAppContext","useAssetScript","connect","totalValue","freeCollateral","wrongNetwork","disabledConnect","data","currentLeverage","visible","setVisible","canTrade","onLeverageEdit","onDeposit","onWithdraw","Card","Divider","Flex","Grid","Either","Statistic","Text","EyeIcon","gradientTextVariants","EditIcon","EyeCloseIcon","ArrowDownSquareFillIcon","ArrowUpSquareFillIcon","Button","CardTitle","jsxs","AssetsHeader","AuthGuard","Fragment","NoValue","AssetStatistic","connectWallet","portfolioValue","rest","useDataTap","createContext","useContext","useAssetsHistory","useStatisticsDaily","subDays","format","getYear","getMonth","getDate","addDays","Decimal","zero","PeriodType","useAssetsHistoryData","localKey","options","today","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","d","tail","dataTailIndex","lastAccountValue","start","end","_","OverviewContext","useOverviewContext","filteredData","invisible","Select","PeriodTitle","periodLabel","AssetLineChart","AssetsChartUI","FeeTierIcon","ServerFillIcon","TabPanel","Tabs","ArrowLeftRightIcon","capitalizeFirstLetter","TokenIcon","toast","useQuery","AssetHistoryStatusEnum","chains","record","href","usePagination","subtractDaysFromCurrentDate","differenceInDays","setHours","parseDateRangeForFilter","dateRange","from","to","set","setDateRange","side","setSide","page","pageSize","setPage","parsePagination","meta","isLoading","onFilter","filter","pagination","DataFilter","AuthGuardDataTable","dataSource","queryParameter","columns","SIDES","index","useSymbolsInfo","FundingHistoryUI","symbols","symbol","useFundingFeeHistory","setSymbol","isValidating","useColumns","type","TYPES","useDistributionHistory","useDistributionHistoryHook","setType","HistoryDataGroupUI","active","onTabChange","useStateScript","setActive","PnLBarChart","PnlLineChart","volumeUpdateDate","PerformancePnL","CumulativePnlChart","ctx","feeTier_exports","FeeTierPage","useAccountInfo","usePrivateQuery","numberToHumanStyle","useFeeTierColumns","row","volume_min","volume_max","volume_node","useFeeTierScript","dataAdapter","tier","setTier","cols","volumeStatistics","getFuturesCurrentTier","feeList","futures_taker_fee_rate","futures_maker_fee_rate","takerRate","makerRate","useCallback","DataTable","FeeTier","takerFeeRate","makerFeeRate","FeeTierHeader","FeeTierTable","FeeTierHeaderItem","top","setTop","parentRect","elementRect","offsetTop","onRow","config","FeeTierWidget","page_exports","PositionsPage","LiquidationWidget","PositionHistoryWidget","PositionsWidget","tab","setTab","OrdersPage","useRef","Tooltip","OrdersWidget","sharePnLConfig","ordersRef","onDownload","TooltipIcon","api_exports","APIManagerPage","APIManagerWidget","CopyIcon","PlusIcon","OrderlyContext","useApiKeyManager","useApiManagerScript","filterTags","keyStatus","showCreateDialog","setShowCreateDialog","showCreatedDialog","setShowCreatedDialog","generateKey","setGenerateKey","configStore","brokerId","account","canCreateApiKey","keys","generateOrderlyKey","setIPRestriction","removeOrderlyKey","resetOrderlyKeyIPRestriction","refresh","error","curPubKey","setCurPubKey","pubKey","onCreateApiKey","onReadApiGuide","hideCreateDialog","doCreate","ipRestriction","scope","createdSuccess","res","ip","key","secretKey","capitalizeFirstChar","generateKeyRes","err","hideCreatedDialog","onCopyApiKeyInfo","doConfirm","doDelete","resolve","curKey","reject","doEdit","future","onCopyAccountId","onCopyApiKey","onCopyApiSecretKey","onCopyIP","keyList","filterTag","filterCurKey","verifyIP","accountStatus","address","uid","str","cn","SimpleDialog","CreateAPIKeyDialog","ipText","setIpText","read","setRead","trade","setTrade","hint","setHint","scopes","Checkbox","CreatedAPIKeyDialog","Trans","DeleteAPIKeyDialog","setOpen","onDelete","formatKey","EditAPIKeyDialog","onUpdate","AuthGuardEmpty","AuthGuardTooltip","APIManager","AccountInfo","Subtitle","KeyList","EditButton","DeleteButton","setting_exports","SettingPage","SettingWidget","Switch","Setting","useDebouncedCallback","useMutation","useSettingScript","update","isMutating","checked","setChecked","updateCheckState","setMaintainConfig","maintenance_cancel_order_flag","canTouch"],"mappings":"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","sourcesContent":["import { FC, PropsWithChildren } from \"react\";\nimport { Box } from \"@orderly.network/ui\";\nimport {\n ScaffoldProps,\n RouterAdapter,\n Scaffold,\n SideBar,\n SideBarProps,\n useScaffoldContext,\n} from \"@orderly.network/ui-scaffold\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type PortfolioLayoutProps = ScaffoldProps & {\n hideSideBar?: boolean;\n /** @deprecated use leftSideProps.items instead */\n items?: SideBarProps[\"items\"];\n};\n\nexport const PortfolioLayout: FC<PropsWithChildren<PortfolioLayoutProps>> = (\n props\n) => {\n const { children, leftSideProps } = props;\n\n return (\n <Scaffold\n leftSidebar={\n props.hideSideBar ? null : (\n <LeftSidebar\n items={props.items}\n current={props.routerAdapter?.currentPath}\n {...leftSideProps}\n routerAdapter={props.routerAdapter}\n />\n )\n }\n routerAdapter={props.routerAdapter}\n classNames={{\n content: \"lg:oui-mb-0\",\n topNavbar: \"oui-bg-base-9\",\n leftSidebar:\n \"oui-m-3 oui-p-4 oui-broder oui-border-[1px] oui-border-line oui-rounded-xl oui-bg-base-9\",\n }}\n {...props}\n >\n <Box mx={3} my={6}>\n {children}\n </Box>\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 { useEffect, useMemo, useState } from \"react\";\nimport { SideMenuItem, useScaffoldContext } from \"@orderly.network/ui-scaffold\";\nimport { useMediaQuery } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport enum PortfolioLeftSidebarPath {\n Overview = \"/portfolio\",\n Positions = \"/portfolio/positions\",\n Orders = \"/portfolio/orders\",\n FeeTier = \"/portfolio/feeTier\",\n ApiKey = \"/portfolio/apiKey\",\n Setting = \"/portfolio/setting\",\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(\"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 }, [t]);\n\n const hideSideBar = useMediaQuery(\"(max-width: 768px)\");\n\n return {\n items,\n current,\n hideSideBar,\n onItemSelect: (item: SideMenuItem) => {\n // console.log(\"item\", item);\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","import { FC, PropsWithChildren } from \"react\";\nimport { PortfolioLayout, PortfolioLayoutProps } from \"./layout.ui\";\nimport { usePortfolioLayoutScript } from \"./layout.script\";\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 return (\n <PortfolioLayout {...state} {...props}>\n {props.children}\n </PortfolioLayout>\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 DistributionHistoryUI,\n} from \"./distribution\";\n\nexport { OverviewPage } from \"./main\";\n\nexport { OverviewContextProvider } from \"./providers/overviewCtx\";\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useLeverage,\n useLocalStorage,\n usePositionStream,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\nimport { LeverageWidgetId } from \"@orderly.network/ui-leverage\";\nimport { DepositAndWithdrawWithDialogId } from \"@orderly.network/ui-transfer\";\nimport { useAppContext } from \"@orderly.network/react-app\";\n\nexport const useAssetScript = () => {\n const { connect } = useWalletConnector();\n const { state } = useAccount();\n const { totalValue, freeCollateral } = useCollateral();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const [data] = usePositionStream();\n const [currentLeverage] = useLeverage();\n const [visible, setVisible] = useLocalStorage(\"orderly_assets_visible\", true);\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(LeverageWidgetId);\n };\n\n const onDeposit = () => {\n modal.show(DepositAndWithdrawWithDialogId, { activeTab: \"deposit\" });\n };\n\n const onWithdraw = () => {\n modal.show(DepositAndWithdrawWithDialogId, { activeTab: \"withdraw\" });\n };\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,\n onLeverageEdit,\n visible,\n wrongNetwork,\n toggleVisible: () => setVisible(!visible),\n onDeposit,\n onWithdraw,\n } as const;\n};\n\nexport type UseAssetScriptReturn = ReturnType<typeof useAssetScript>;\n","import { FC } from \"react\";\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 { AssetsHeader } from \"./assetsHeader\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\ntype Props = {\n canTrade?: boolean;\n onConnectWallet?: () => void;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n onLeverageEdit?: () => void;\n portfolioValue: number | null;\n visible: boolean;\n toggleVisible: () => void;\n wrongNetwork: boolean;\n} & StatisticProps;\n\ntype StatisticProps = {\n currentLeverage: number;\n unrealPnL: number;\n unrealROI: number;\n freeCollateral: number;\n};\n\nexport const AssetsUI = (props: Props) => {\n const { t } = useTranslation();\n return (\n <Card\n classNames={{\n footer: \"oui-h-[48px]\",\n root: \"oui-h-[240px]\",\n }}\n // @ts-ignore\n title={\n <AssetsHeader\n disabled={!props.canTrade}\n onDeposit={props.onDeposit}\n onWithdraw={props.onWithdraw}\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\nexport const AssetStatistic = (\n props: StatisticProps & { onLeverageEdit?: () => void; visible: boolean }\n) => {\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 {\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n Button,\n CardTitle,\n Flex,\n} from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\ntype Props = {\n disabled: boolean;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n};\n\nexport const AssetsHeader: FC<Props> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex justify={\"between\"}>\n <CardTitle>{t(\"common.overview\")}</CardTitle>\n <Flex gap={3}>\n <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 </Flex>\n );\n};\n","import { AssetsUI } from \"./assets.ui\";\nimport { useAssetScript } from \"./useBuilder.script\";\n\nexport const AssetWidget = () => {\n const {\n canTrade,\n connect: connectWallet,\n portfolioValue,\n onLeverageEdit,\n ...rest\n } = useAssetScript();\n return (\n <AssetsUI\n onConnectWallet={connectWallet}\n canTrade={canTrade}\n portfolioValue={portfolioValue}\n onLeverageEdit={onLeverageEdit}\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 } from \"react\";\nimport {\n useAssetsHistoryData,\n useAssetsHistoryDataReturn,\n} from \"../shared/useAssetHistory\";\n\nexport type OverviewContextState = {\n // period: PeriodType;\n} & useAssetsHistoryDataReturn;\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 children,\n}: {\n children: React.ReactNode;\n}) => {\n const state = useAssetsHistoryData(localKey, { isRealtime: true });\n\n return (\n <OverviewContext.Provider\n value={{\n ...state,\n }}\n >\n {children}\n </OverviewContext.Provider>\n );\n};\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 {\n Card,\n FeeTierIcon,\n ServerFillIcon,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { ArrowLeftRightIcon } from \"@orderly.network/ui\";\nimport { AssetHistoryWidget } from \"../assetHistory\";\nimport { TabName } from \"./useState.script\";\nimport { FundingHistoryWidget } from \"../funding\";\nimport { DistributionHistoryWidget } from \"../distribution\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nexport const HistoryDataGroupUI = (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 </Tabs>\n </Card>\n );\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 { differenceInDays, setHours } from \"date-fns\";\n\nexport const parseDateRangeForFilter = (dateRange: {\n from: Date;\n to?: Date;\n}) => {\n let { from, to } = dateRange;\n\n if (typeof to === \"undefined\") {\n to = new Date();\n }\n\n const diff = differenceInDays(from, to);\n\n // console.log(\"diff\", diff);\n\n if (diff === 0) {\n return [from, setHours(to, 23)];\n }\n\n return [from, to];\n};\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 { AssetHistory } from \"./dataTable.ui\";\nimport { useAssetHistoryHook } from \"./useDataSource.script\";\n\nexport const AssetHistoryWidget = () => {\n const state = useAssetHistoryHook();\n return <AssetHistory {...state} />;\n};\n","import { DataFilter } from \"@orderly.network/ui\";\nimport { useFundingHistoryColumns } from \"./column\";\nimport { FC } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { type UseFundingHistoryReturn } from \"./useDataSource.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\ntype FundingHistoryProps = {} & UseFundingHistoryReturn;\n\nexport const FundingHistoryUI: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading } = props;\n const columns = useFundingHistoryColumns();\n const symbols = useSymbolsInfo();\n const { symbol, dateRange } = queryParameter;\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 />\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 { Flex, Text, type Column } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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(\"portfolio.overview.column.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(\"portfolio.overview.column.paymentType\"),\n dataIndex: \"payment_type\",\n width: 80,\n render: (value: any) => {\n switch (value) {\n case \"Pay\":\n case \"Paid\":\n return t(\"portfolio.overview.column.paymentType.paid\");\n case \"Receive\":\n case \"Received\":\n return t(\"portfolio.overview.column.paymentType.received\");\n default:\n return value;\n }\n },\n },\n {\n title: `${t(\"portfolio.overview.column.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 { 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 { FundingHistoryUI } from \"./fundingHistory.ui\";\nimport { useFundingHistoryHook } from \"./useDataSource.script\";\n\nexport const FundingHistoryWidget = () => {\n const state = useFundingHistoryHook();\n return <FundingHistoryUI {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { DataFilter } from \"@orderly.network/ui\";\nimport { useColumns } from \"./column\";\nimport { type useDistributionHistoryHookReturn } from \"./useDataSource.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\ntype FundingHistoryProps = {} & useDistributionHistoryHookReturn;\n\nexport const DistributionHistoryUI: 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 { Flex, type Column, TokenIcon } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\nimport { useTranslation, i18n } from \"@orderly.network/i18n\";\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(\"portfolio.assetHistory.status.processing\");\n case \"COMPLETED\":\n default:\n return t(\"portfolio.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 { 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 { DistributionHistoryUI } from \"./distribution.ui\";\nimport { useDistributionHistoryHook } from \"./useDataSource.script\";\n\nexport const DistributionHistoryWidget = () => {\n const state = useDistributionHistoryHook();\n return <DistributionHistoryUI {...state} />;\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\n return {\n active,\n onTabChange: (value: string) => setActive(value as TabName),\n };\n};\n\nexport type UseStateScript = ReturnType<typeof useStateScript>;\n","import { HistoryDataGroupUI } from \"./historyDataGroup.ui\";\nimport { useStateScript } from \"./useState.script\";\n\nexport const HistoryDataGroupWidget = () => {\n const state = useStateScript();\n return <HistoryDataGroupUI {...state} />;\n};\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 } from \"@orderly.network/ui\";\nimport { PerformanceWidget } from \"./performance\";\nimport { AssetsChartWidget } from \"./assetChart/assetsChart.widget\";\nimport { AssetWidget } from \"./assets\";\nimport { HistoryDataGroupWidget } from \"./historyDataGroup\";\nimport { OverviewContextProvider } from \"./providers/overviewCtx\";\n\nexport const OverviewPage = () => {\n return (\n <OverviewContextProvider>\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 </OverviewContextProvider>\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 {\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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 // @ts-ignore\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-leading-[24px] oui-mt-[2px]\"\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-border-b oui-border-line-4 oui-relative\"\n >\n {top && (\n <Box\n angle={90}\n gradient=\"brand\"\n className=\"oui-rounded-md oui-absolute oui-w-full\"\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 { useState } from \"react\";\nimport {\n LiquidationWidget,\n PositionHistoryWidget,\n PositionsProps,\n PositionsWidget,\n} from \"@orderly.network/ui-positions\";\nimport { Flex, Text, Divider, Box, Tabs, TabPanel } from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nenum TabsType {\n positions = \"Positions\",\n positionHistory = \"Position history\",\n liquidation = \"Liquidation\",\n}\n\nexport const PositionsPage = (props: PositionsProps) => {\n const [tab, setTab] = useState(TabsType.positions);\n const { t } = useTranslation();\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 <PositionsWidget {...props} />\n </TabPanel>\n <TabPanel\n value={TabsType.positionHistory}\n title={t(\"positions.positionHistory\")}\n >\n <PositionHistoryWidget {...props} />\n </TabPanel>\n <TabPanel\n value={TabsType.liquidation}\n title={t(\"positions.liquidation\")}\n >\n <LiquidationWidget />\n </TabPanel>\n </Tabs>\n </Box>\n </Flex>\n );\n};\n","import { FC, SVGProps, useRef } from \"react\";\nimport { 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 {\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 ApiManagerScriptReturns,\n capitalizeFirstChar,\n} from \"./apiManager.script\";\nimport { FC, useState } from \"react\";\nimport { CreateAPIKeyDialog } from \"./dialog/createApiKey\";\nimport { CreatedAPIKeyDialog } from \"./dialog/createdApiKey\";\nimport { DeleteAPIKeyDialog } from \"./dialog/deleteApiKey\";\nimport { EditAPIKeyDialog } from \"./dialog/editApiKey\";\nimport {\n AuthGuardEmpty,\n AuthGuardDataTable,\n AuthGuardTooltip,\n} from \"@orderly.network/ui-connector\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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.address !== \"--\"}\n copyIconSize={16}\n onCopy={props.onCopyAccountId}\n copyIconTestid=\"oui-testid-apiKey-accountInfo-accountId-copy-btn\"\n >\n {props.address}\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.uid}\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 {\n APIKeyItem,\n OrderlyContext,\n ScopeType,\n useAccount,\n useApiKeyManager,\n useQuery,\n} from \"@orderly.network/hooks\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { toast, usePagination } from \"@orderly.network/ui\";\nimport { useContext, useEffect, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 { configStore } = useContext(OrderlyContext);\n const brokerId = configStore.get(\"brokerId\");\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 { data } = useQuery<\n | undefined\n | {\n user_id: number;\n account_id: string;\n }\n >(\n `/v1/get_account?address=${account.address}&broker_id=${brokerId}&chain_type=${account.walletAdapter?.chainNamespace}`\n );\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 address = useDataTap(data?.account_id, {\n accountStatus,\n });\n const uid = useDataTap(data?.user_id, {\n accountStatus,\n });\n\n const { pagination } = usePagination();\n\n return {\n address: address ?? \"--\",\n uid: `${uid ?? \"--\"}`,\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 {\n Box,\n CopyIcon,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n} from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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.address}\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 { Card, Flex, Switch, Text } from \"@orderly.network/ui\";\nimport { SettingScriptReturns } from \"./setting.script\";\nimport { AuthGuardTooltip } from \"@orderly.network/ui-connector\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const Setting: 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 { 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};"]}
|
|
1
|
+
{"version":3,"sources":["../src/layout/layout.ui.tsx","../src/layout/layout.script.tsx","../src/layout/layout.widget.tsx","../src/pages/overview/index.tsx","../src/pages/overview/assets/useBuilder.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/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.ui.tsx","../src/pages/overview/assetHistory/column.tsx","../src/pages/overview/assetHistory/useDataSource.script.ts","../src/pages/overview/helper/date.ts","../src/pages/overview/assetHistory/dataTable.ui.tsx","../src/pages/overview/assetHistory/widget.tsx","../src/pages/overview/funding/fundingHistory.ui.tsx","../src/pages/overview/funding/column.tsx","../src/pages/overview/funding/useDataSource.script.ts","../src/pages/overview/funding/fundingHistory.widget.tsx","../src/pages/overview/distribution/distribution.ui.tsx","../src/pages/overview/distribution/column.tsx","../src/pages/overview/distribution/useDataSource.script.ts","../src/pages/overview/distribution/distribution.widget.tsx","../src/pages/overview/historyDataGroup/useState.script.ts","../src/pages/overview/historyDataGroup/historyDataGroup.widget.tsx","../src/pages/overview/performance/performance.ui.tsx","../src/pages/overview/performance/performance.script.ts","../src/pages/overview/performance/performance.widget.tsx","../src/pages/overview/main.tsx","../src/pages/feeTier/index.tsx","../src/pages/feeTier/feeTier.script.ts","../src/pages/feeTier/dataSource.ts","../src/pages/feeTier/column.tsx","../src/pages/feeTier/feeTier.ui.tsx","../src/pages/feeTier/feeTier.widget.tsx","../src/pages/feeTier/page.tsx","../src/pages/positions/page.tsx","../src/pages/orders/page.tsx","../src/pages/api/index.ts","../src/pages/api/apiManager.ui.tsx","../src/pages/api/apiManager.script.tsx","../src/pages/api/dialog/createApiKey.tsx","../src/pages/api/dialog/createdApiKey.tsx","../src/pages/api/dialog/deleteApiKey.tsx","../src/pages/api/dialog/editApiKey.tsx","../src/pages/api/apiManager.widget.tsx","../src/pages/api/apiManager.page.tsx","../src/pages/setting/index.ts","../src/pages/setting/setting.ui.tsx","../src/pages/setting/setting.script.tsx","../src/pages/setting/setting.widget.tsx","../src/pages/setting/setting.page.tsx"],"names":["Box","Scaffold","SideBar","useScaffoldContext","useTranslation","jsx","PortfolioLayout","props","children","leftSideProps","LeftSidebar","expanded","setExpand","t","open","e","useEffect","useMemo","useState","useMediaQuery","PortfolioLeftSidebarPath","usePortfolioLayoutScript","routerAdapter","current","setCurrent","items","hideSideBar","item","PortfolioLayoutWidget","state","overview_exports","__export","AssetHistory","AssetHistoryWidget","AssetWidget","AssetsChartWidget","AssetsUI","DistributionHistoryUI","DistributionHistoryWidget","FundingHistoryWidget","HistoryDataGroupWidget","OverviewContextProvider","OverviewPage","PerformanceUI","PerformanceWidget","useAssetHistoryColumns","useAssetHistoryHook","useAssetsLineChartScript","useFundingHistoryColumns","useFundingHistoryHook","usePerformanceScript","useAccount","useCollateral","useLeverage","useLocalStorage","usePositionStream","useWalletConnector","AccountStatusEnum","modal","LeverageWidgetId","DepositAndWithdrawWithDialogId","useAppContext","useAssetScript","connect","totalValue","freeCollateral","wrongNetwork","disabledConnect","data","currentLeverage","visible","setVisible","canTrade","onLeverageEdit","onDeposit","onWithdraw","Card","Divider","Flex","Grid","Either","Statistic","Text","EyeIcon","gradientTextVariants","EditIcon","EyeCloseIcon","ArrowDownSquareFillIcon","ArrowUpSquareFillIcon","Button","CardTitle","jsxs","AssetsHeader","AuthGuard","Fragment","NoValue","AssetStatistic","connectWallet","portfolioValue","rest","useDataTap","createContext","useContext","useAssetsHistory","useStatisticsDaily","subDays","format","getYear","getMonth","getDate","addDays","Decimal","zero","PeriodType","useAssetsHistoryData","localKey","options","today","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","d","tail","dataTailIndex","lastAccountValue","start","end","_","OverviewContext","useOverviewContext","filteredData","invisible","Select","PeriodTitle","periodLabel","AssetLineChart","AssetsChartUI","FeeTierIcon","ServerFillIcon","TabPanel","Tabs","ArrowLeftRightIcon","capitalizeFirstLetter","TokenIcon","toast","useQuery","AssetHistoryStatusEnum","chains","record","href","usePagination","subtractDaysFromCurrentDate","differenceInDays","setHours","parseDateRangeForFilter","dateRange","from","to","set","setDateRange","side","setSide","page","pageSize","setPage","parsePagination","meta","isLoading","onFilter","filter","pagination","DataFilter","AuthGuardDataTable","dataSource","queryParameter","columns","SIDES","index","useSymbolsInfo","FundingHistoryUI","symbols","symbol","useFundingFeeHistory","setSymbol","isValidating","useColumns","type","TYPES","useDistributionHistory","useDistributionHistoryHook","setType","HistoryDataGroupUI","active","onTabChange","useStateScript","setActive","PnLBarChart","PnlLineChart","volumeUpdateDate","PerformancePnL","CumulativePnlChart","ctx","feeTier_exports","FeeTierPage","useAccountInfo","usePrivateQuery","numberToHumanStyle","useFeeTierColumns","row","volume_min","volume_max","volume_node","useFeeTierScript","dataAdapter","tier","setTier","cols","volumeStatistics","getFuturesCurrentTier","feeList","futures_taker_fee_rate","futures_maker_fee_rate","takerRate","makerRate","useCallback","DataTable","FeeTier","takerFeeRate","makerFeeRate","FeeTierHeader","FeeTierTable","FeeTierHeaderItem","top","setTop","parentRect","elementRect","offsetTop","onRow","config","FeeTierWidget","page_exports","PositionsPage","LiquidationWidget","PositionHistoryWidget","PositionsWidget","tab","setTab","OrdersPage","useRef","Tooltip","OrdersWidget","sharePnLConfig","ordersRef","onDownload","TooltipIcon","api_exports","APIManagerPage","APIManagerWidget","CopyIcon","PlusIcon","OrderlyContext","useApiKeyManager","useApiManagerScript","filterTags","keyStatus","showCreateDialog","setShowCreateDialog","showCreatedDialog","setShowCreatedDialog","generateKey","setGenerateKey","configStore","brokerId","account","canCreateApiKey","keys","generateOrderlyKey","setIPRestriction","removeOrderlyKey","resetOrderlyKeyIPRestriction","refresh","error","curPubKey","setCurPubKey","pubKey","onCreateApiKey","onReadApiGuide","hideCreateDialog","doCreate","ipRestriction","scope","createdSuccess","res","ip","key","secretKey","capitalizeFirstChar","generateKeyRes","err","hideCreatedDialog","onCopyApiKeyInfo","doConfirm","doDelete","resolve","curKey","reject","doEdit","future","onCopyAccountId","onCopyApiKey","onCopyApiSecretKey","onCopyIP","keyList","filterTag","filterCurKey","verifyIP","accountStatus","address","uid","str","cn","SimpleDialog","CreateAPIKeyDialog","ipText","setIpText","read","setRead","trade","setTrade","hint","setHint","scopes","Checkbox","CreatedAPIKeyDialog","Trans","DeleteAPIKeyDialog","setOpen","onDelete","formatKey","EditAPIKeyDialog","onUpdate","AuthGuardEmpty","AuthGuardTooltip","APIManager","AccountInfo","Subtitle","KeyList","EditButton","DeleteButton","setting_exports","SettingPage","SettingWidget","Switch","Setting","useDebouncedCallback","useMutation","useSettingScript","update","isMutating","checked","setChecked","updateCheckState","setMaintainConfig","maintenance_cancel_order_flag","canTouch"],"mappings":"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","sourcesContent":["import { FC, PropsWithChildren } from \"react\";\nimport { Box } from \"@orderly.network/ui\";\nimport {\n ScaffoldProps,\n RouterAdapter,\n Scaffold,\n SideBar,\n SideBarProps,\n useScaffoldContext,\n} from \"@orderly.network/ui-scaffold\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type PortfolioLayoutProps = ScaffoldProps & {\n hideSideBar?: boolean;\n /** @deprecated use leftSideProps.items instead */\n items?: SideBarProps[\"items\"];\n};\n\nexport const PortfolioLayout: FC<PropsWithChildren<PortfolioLayoutProps>> = (\n props\n) => {\n const { children, leftSideProps } = props;\n\n return (\n <Scaffold\n leftSidebar={\n props.hideSideBar ? null : (\n <LeftSidebar\n items={props.items}\n current={props.routerAdapter?.currentPath}\n {...leftSideProps}\n routerAdapter={props.routerAdapter}\n />\n )\n }\n routerAdapter={props.routerAdapter}\n classNames={{\n content: \"lg:oui-mb-0\",\n topNavbar: \"oui-bg-base-9\",\n leftSidebar:\n \"oui-m-3 oui-p-4 oui-broder oui-border-[1px] oui-border-line oui-rounded-xl oui-bg-base-9\",\n }}\n {...props}\n >\n <Box mx={3} my={6}>\n {children}\n </Box>\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 { useEffect, useMemo, useState } from \"react\";\nimport { SideMenuItem, useScaffoldContext } from \"@orderly.network/ui-scaffold\";\nimport { useMediaQuery } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport enum PortfolioLeftSidebarPath {\n Overview = \"/portfolio\",\n Positions = \"/portfolio/positions\",\n Orders = \"/portfolio/orders\",\n FeeTier = \"/portfolio/feeTier\",\n ApiKey = \"/portfolio/apiKey\",\n Setting = \"/portfolio/setting\",\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(\"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 }, [t]);\n\n const hideSideBar = useMediaQuery(\"(max-width: 768px)\");\n\n return {\n items,\n current,\n hideSideBar,\n onItemSelect: (item: SideMenuItem) => {\n // console.log(\"item\", item);\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","import { FC, PropsWithChildren } from \"react\";\nimport { PortfolioLayout, PortfolioLayoutProps } from \"./layout.ui\";\nimport { usePortfolioLayoutScript } from \"./layout.script\";\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 return (\n <PortfolioLayout {...state} {...props}>\n {props.children}\n </PortfolioLayout>\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 DistributionHistoryUI,\n} from \"./distribution\";\n\nexport { OverviewPage } from \"./main\";\n\nexport { OverviewContextProvider } from \"./providers/overviewCtx\";\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useLeverage,\n useLocalStorage,\n usePositionStream,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\nimport { LeverageWidgetId } from \"@orderly.network/ui-leverage\";\nimport { DepositAndWithdrawWithDialogId } from \"@orderly.network/ui-transfer\";\nimport { useAppContext } from \"@orderly.network/react-app\";\n\nexport const useAssetScript = () => {\n const { connect } = useWalletConnector();\n const { state } = useAccount();\n const { totalValue, freeCollateral } = useCollateral();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const [data] = usePositionStream();\n const [currentLeverage] = useLeverage();\n const [visible, setVisible] = useLocalStorage(\"orderly_assets_visible\", true);\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(LeverageWidgetId);\n };\n\n const onDeposit = () => {\n modal.show(DepositAndWithdrawWithDialogId, { activeTab: \"deposit\" });\n };\n\n const onWithdraw = () => {\n modal.show(DepositAndWithdrawWithDialogId, { activeTab: \"withdraw\" });\n };\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,\n onLeverageEdit,\n visible,\n wrongNetwork,\n toggleVisible: () => setVisible(!visible),\n onDeposit,\n onWithdraw,\n } as const;\n};\n\nexport type UseAssetScriptReturn = ReturnType<typeof useAssetScript>;\n","import { FC } from \"react\";\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 { AssetsHeader } from \"./assetsHeader\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\ntype Props = {\n canTrade?: boolean;\n onConnectWallet?: () => void;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n onLeverageEdit?: () => void;\n portfolioValue: number | null;\n visible: boolean;\n toggleVisible: () => void;\n wrongNetwork: boolean;\n} & StatisticProps;\n\ntype StatisticProps = {\n currentLeverage: number;\n unrealPnL: number;\n unrealROI: number;\n freeCollateral: number;\n};\n\nexport const AssetsUI = (props: Props) => {\n const { t } = useTranslation();\n return (\n <Card\n classNames={{\n footer: \"oui-h-[48px]\",\n root: \"oui-h-[240px]\",\n }}\n // @ts-ignore\n title={\n <AssetsHeader\n disabled={!props.canTrade}\n onDeposit={props.onDeposit}\n onWithdraw={props.onWithdraw}\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\nexport const AssetStatistic = (\n props: StatisticProps & { onLeverageEdit?: () => void; visible: boolean }\n) => {\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 {\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n Button,\n CardTitle,\n Flex,\n} from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\ntype Props = {\n disabled: boolean;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n};\n\nexport const AssetsHeader: FC<Props> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex justify={\"between\"}>\n <CardTitle>{t(\"common.overview\")}</CardTitle>\n <Flex gap={3}>\n <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 </Flex>\n );\n};\n","import { AssetsUI } from \"./assets.ui\";\nimport { useAssetScript } from \"./useBuilder.script\";\n\nexport const AssetWidget = () => {\n const {\n canTrade,\n connect: connectWallet,\n portfolioValue,\n onLeverageEdit,\n ...rest\n } = useAssetScript();\n return (\n <AssetsUI\n onConnectWallet={connectWallet}\n canTrade={canTrade}\n portfolioValue={portfolioValue}\n onLeverageEdit={onLeverageEdit}\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 } from \"react\";\nimport {\n useAssetsHistoryData,\n useAssetsHistoryDataReturn,\n} from \"../shared/useAssetHistory\";\n\nexport type OverviewContextState = {\n // period: PeriodType;\n} & useAssetsHistoryDataReturn;\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 children,\n}: {\n children: React.ReactNode;\n}) => {\n const state = useAssetsHistoryData(localKey, { isRealtime: true });\n\n return (\n <OverviewContext.Provider\n value={{\n ...state,\n }}\n >\n {children}\n </OverviewContext.Provider>\n );\n};\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 {\n Card,\n FeeTierIcon,\n ServerFillIcon,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { ArrowLeftRightIcon } from \"@orderly.network/ui\";\nimport { AssetHistoryWidget } from \"../assetHistory\";\nimport { TabName } from \"./useState.script\";\nimport { FundingHistoryWidget } from \"../funding\";\nimport { DistributionHistoryWidget } from \"../distribution\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nexport const HistoryDataGroupUI = (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 </Tabs>\n </Card>\n );\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 { differenceInDays, setHours } from \"date-fns\";\n\nexport const parseDateRangeForFilter = (dateRange: {\n from: Date;\n to?: Date;\n}) => {\n let { from, to } = dateRange;\n\n if (typeof to === \"undefined\") {\n to = new Date();\n }\n\n const diff = differenceInDays(from, to);\n\n // console.log(\"diff\", diff);\n\n if (diff === 0) {\n return [from, setHours(to, 23)];\n }\n\n return [from, to];\n};\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 { AssetHistory } from \"./dataTable.ui\";\nimport { useAssetHistoryHook } from \"./useDataSource.script\";\n\nexport const AssetHistoryWidget = () => {\n const state = useAssetHistoryHook();\n return <AssetHistory {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { DataFilter } from \"@orderly.network/ui\";\nimport { useFundingHistoryColumns } from \"./column\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { type UseFundingHistoryReturn } from \"./useDataSource.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\ntype FundingHistoryProps = {} & UseFundingHistoryReturn;\n\nexport const FundingHistoryUI: 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 { Flex, Text, type Column } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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(\"portfolio.overview.column.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(\"portfolio.overview.column.paymentType\"),\n dataIndex: \"payment_type\",\n width: 80,\n render: (value: any) => {\n switch (value) {\n case \"Pay\":\n case \"Paid\":\n return t(\"portfolio.overview.column.paymentType.paid\");\n case \"Receive\":\n case \"Received\":\n return t(\"portfolio.overview.column.paymentType.received\");\n default:\n return value;\n }\n },\n },\n {\n title: `${t(\"portfolio.overview.column.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 { 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 { FundingHistoryUI } from \"./fundingHistory.ui\";\nimport { useFundingHistoryHook } from \"./useDataSource.script\";\n\nexport const FundingHistoryWidget = () => {\n const state = useFundingHistoryHook();\n return <FundingHistoryUI {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { DataFilter } from \"@orderly.network/ui\";\nimport { useColumns } from \"./column\";\nimport { type useDistributionHistoryHookReturn } from \"./useDataSource.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\ntype FundingHistoryProps = {} & useDistributionHistoryHookReturn;\n\nexport const DistributionHistoryUI: 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 { Flex, type Column, TokenIcon } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\nimport { useTranslation, i18n } from \"@orderly.network/i18n\";\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(\"portfolio.assetHistory.status.processing\");\n case \"COMPLETED\":\n default:\n return t(\"portfolio.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 { 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 { DistributionHistoryUI } from \"./distribution.ui\";\nimport { useDistributionHistoryHook } from \"./useDataSource.script\";\n\nexport const DistributionHistoryWidget = () => {\n const state = useDistributionHistoryHook();\n return <DistributionHistoryUI {...state} />;\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\n return {\n active,\n onTabChange: (value: string) => setActive(value as TabName),\n };\n};\n\nexport type UseStateScript = ReturnType<typeof useStateScript>;\n","import { HistoryDataGroupUI } from \"./historyDataGroup.ui\";\nimport { useStateScript } from \"./useState.script\";\n\nexport const HistoryDataGroupWidget = () => {\n const state = useStateScript();\n return <HistoryDataGroupUI {...state} />;\n};\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 } from \"@orderly.network/ui\";\nimport { PerformanceWidget } from \"./performance\";\nimport { AssetsChartWidget } from \"./assetChart/assetsChart.widget\";\nimport { AssetWidget } from \"./assets\";\nimport { HistoryDataGroupWidget } from \"./historyDataGroup\";\nimport { OverviewContextProvider } from \"./providers/overviewCtx\";\n\nexport const OverviewPage = () => {\n return (\n <OverviewContextProvider>\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 </OverviewContextProvider>\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 {\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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 // @ts-ignore\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-leading-[24px] oui-mt-[2px]\"\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-border-b oui-border-line-4 oui-relative\"\n >\n {top && (\n <Box\n angle={90}\n gradient=\"brand\"\n className=\"oui-rounded-md oui-absolute oui-w-full\"\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 { useState } from \"react\";\nimport {\n LiquidationWidget,\n PositionHistoryWidget,\n PositionsProps,\n PositionsWidget,\n} from \"@orderly.network/ui-positions\";\nimport { Flex, Text, Divider, Box, Tabs, TabPanel } from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nenum TabsType {\n positions = \"Positions\",\n positionHistory = \"Position history\",\n liquidation = \"Liquidation\",\n}\n\nexport const PositionsPage = (props: PositionsProps) => {\n const [tab, setTab] = useState(TabsType.positions);\n const { t } = useTranslation();\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 <PositionsWidget {...props} />\n </TabPanel>\n <TabPanel\n value={TabsType.positionHistory}\n title={t(\"positions.positionHistory\")}\n >\n <PositionHistoryWidget {...props} />\n </TabPanel>\n <TabPanel\n value={TabsType.liquidation}\n title={t(\"positions.liquidation\")}\n >\n <LiquidationWidget />\n </TabPanel>\n </Tabs>\n </Box>\n </Flex>\n );\n};\n","import { FC, SVGProps, useRef } from \"react\";\nimport { 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 {\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 ApiManagerScriptReturns,\n capitalizeFirstChar,\n} from \"./apiManager.script\";\nimport { FC, useState } from \"react\";\nimport { CreateAPIKeyDialog } from \"./dialog/createApiKey\";\nimport { CreatedAPIKeyDialog } from \"./dialog/createdApiKey\";\nimport { DeleteAPIKeyDialog } from \"./dialog/deleteApiKey\";\nimport { EditAPIKeyDialog } from \"./dialog/editApiKey\";\nimport {\n AuthGuardEmpty,\n AuthGuardDataTable,\n AuthGuardTooltip,\n} from \"@orderly.network/ui-connector\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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.address !== \"--\"}\n copyIconSize={16}\n onCopy={props.onCopyAccountId}\n copyIconTestid=\"oui-testid-apiKey-accountInfo-accountId-copy-btn\"\n >\n {props.address}\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.uid}\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 {\n APIKeyItem,\n OrderlyContext,\n ScopeType,\n useAccount,\n useApiKeyManager,\n useQuery,\n} from \"@orderly.network/hooks\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { toast, usePagination } from \"@orderly.network/ui\";\nimport { useContext, useEffect, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 { configStore } = useContext(OrderlyContext);\n const brokerId = configStore.get(\"brokerId\");\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 { data } = useQuery<\n | undefined\n | {\n user_id: number;\n account_id: string;\n }\n >(\n `/v1/get_account?address=${account.address}&broker_id=${brokerId}&chain_type=${account.walletAdapter?.chainNamespace}`\n );\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 address = useDataTap(data?.account_id, {\n accountStatus,\n });\n const uid = useDataTap(data?.user_id, {\n accountStatus,\n });\n\n const { pagination } = usePagination();\n\n return {\n address: address ?? \"--\",\n uid: `${uid ?? \"--\"}`,\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 {\n Box,\n CopyIcon,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n} from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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.address}\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 { Card, Flex, Switch, Text } from \"@orderly.network/ui\";\nimport { SettingScriptReturns } from \"./setting.script\";\nimport { AuthGuardTooltip } from \"@orderly.network/ui-connector\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const Setting: 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 { 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};"]}
|