@orderly.network/portfolio 2.0.1-preview.3 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +31 -6
- package/dist/index.d.ts +31 -6
- package/dist/index.js +13 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7 -7
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +14 -13
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../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/layout/layout.ui.tsx","../src/layout/useLayoutBuilder.script.tsx","../src/layout/layout.widget.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":["overview_exports","__export","AssetHistory","AssetHistoryWidget","AssetWidget","AssetsChartWidget","AssetsUI","DistributionHistoryUI","DistributionHistoryWidget","FundingHistoryWidget","HistoryDataGroupWidget","OverviewContextProvider","OverviewPage","PerformanceUI","PerformanceWidget","useAssetHistoryColumns","useAssetHistoryHook","useAssetsLineChartScript","useFundingHistoryColumns","useFundingHistoryHook","usePerformanceScript","useMemo","useAccount","useCollateral","useLeverage","useLocalStorage","usePositionStream","useWalletConnector","AccountStatusEnum","modal","LeverageWidgetId","DepositAndWithdrawWithDialogId","useAppContext","useAssetScript","connect","state","totalValue","freeCollateral","wrongNetwork","data","currentLeverage","visible","setVisible","connected","onLeverageEdit","onDeposit","onWithdraw","Card","Divider","Flex","Grid","Either","Statistic","Text","EyeIcon","gradientTextVariants","EditIcon","EyeCloseIcon","ArrowDownSquareFillIcon","ArrowUpSquareFillIcon","Button","CardTitle","jsx","jsxs","AssetsHeader","props","AuthGuard","Fragment","NoValue","AssetStatistic","connectWallet","portfolioValue","rest","useDataTap","createContext","useContext","useState","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","item","calculate","lastItem","todayFormattedStr","mergeData","calculateData","realtime","_data","calculatedData","aggregateValue","vol","pnl","roi","d","tail","dataTailIndex","lastAccountValue","start","end","_","OverviewContext","useOverviewContext","children","filteredData","Select","PeriodTitle","AssetLineChart","AssetsChartUI","FeeTierIcon","ServerFillIcon","TabPanel","Tabs","ArrowLeftRightIcon","capitalizeFirstLetter","TokenIcon","toast","useQuery","chains","record","href","e","SIDES","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","index","useSymbolsInfo","FundingHistoryUI","symbols","symbol","useFundingFeeHistory","setSymbol","isValidating","useColumns","TYPES","type","useDistributionHistory","useDistributionHistoryHook","setType","HistoryDataGroupUI","active","onTabChange","useStateScript","setActive","Box","PnLBarChart","PnlLineChart","invisible","volumeUpdateDate","PerformancePnL","CumulativePnlChart","ctx","Scaffold","SideBar","useScaffoldContext","PortfolioLayout","LeftSidebar","expanded","setExpand","open","useEffect","useMediaQuery","useLayoutBuilder","routerAdapter","current","setCurrent","items","hideSideBar","PortfolioLayoutWidget","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","OrdersWidget","api_exports","APIManagerPage","APIManagerWidget","CopyIcon","PlusIcon","Tooltip","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","address","uid","str","cn","SimpleDialog","CreateAPIKeyDialog","ipText","setIpText","read","setRead","trade","setTrade","hint","setHint","scopes","Checkbox","CreatedAPIKeyDialog","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"],"mappings":"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","sourcesContent":["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 } = useAppContext();\n const [data] = usePositionStream();\n const [currentLeverage] = useLeverage();\n const [visible, setVisible] = useLocalStorage(\"orderly_assets_visible\", true);\n\n const connected = useMemo(() => {\n return state.status === AccountStatusEnum.EnableTrading;\n }, [state]);\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 connected,\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 Box,\n Button,\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\";\n\ntype Props = {\n connected?: 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 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.connected || props.wrongNetwork}\n onDeposit={props.onDeposit}\n onWithdraw={props.onWithdraw}\n />\n }\n >\n <>\n <Statistic\n label={\n <Flex gap={1}>\n <Text intensity={54}>Total value</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\n value={(props.connected ?? false) && !props.wrongNetwork}\n left={<NoValue />}\n >\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 return (\n <Grid cols={3} className=\"oui-h-12\">\n <Statistic label=\"Unrealized PnL\">\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=\"Max account leverage\">\n <Flex itemAlign={\"center\"}>\n <span data-testid=\"oui-testid-portfolio-assets-maxAccountLeverage-value\" className=\"oui-text-lg\">{props.currentLeverage}</span>\n <span>x</span>\n <button className=\"oui-ml-1\" onClick={() => props.onLeverageEdit?.()} data-testid=\"oui-testid-portfolio-assets-maxAccountLeverage-edit-btn\">\n <EditIcon color={\"white\"} size={18} />\n </button>\n </Flex>\n </Statistic>\n <Statistic\n label=\"Available to withdraw\"\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 {\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n Button,\n CardTitle,\n Flex,\n Text,\n} from \"@orderly.network/ui\";\nimport { FC } from \"react\";\n\ntype Props = {\n disabled: boolean;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n};\n\nexport const AssetsHeader: FC<Props> = (props) => {\n return (\n <Flex justify={\"between\"}>\n <CardTitle>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 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 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 connected,\n connect: connectWallet,\n portfolioValue,\n onLeverageEdit,\n ...rest\n } = useAssetScript();\n return (\n <AssetsUI\n onConnectWallet={connectWallet}\n connected={connected}\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\";\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 } = useAppContext();\n\n const filteredData = useDataTap(assetHistory.data, {\n accountStatus: 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 return {\n ...assetHistory,\n wrongNetwork,\n data: _data,\n invisible: wrongNetwork || !assetHistory.data.length,\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 });\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: 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]);\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\";\n\nexport type AssetsLineChartProps = {} & useAssetsLineChartScriptReturn;\n\nexport const AssetsChartUI = (props: AssetsLineChartProps) => {\n const { onPeriodChange, periodTypes, period, data } = props;\n\n return (\n <Card\n title={\n <PeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title=\"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 { CardTitle, Flex, Select, Text } from \"@orderly.network/ui\";\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 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: item,\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 { AssetHistory, AssetHistoryWidget } from \"../assetHistory\";\nimport { TabName } from \"./useState.script\";\nimport { FundingHistoryWidget } from \"../funding\";\nimport { DistributionHistoryWidget } from \"../distribution\";\n\nexport const HistoryDataGroupUI = (props: {\n active?: TabName;\n onTabChange: (tab: string) => void;\n}) => {\n const { active = \"deposit\", onTabChange } = props;\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={\"Deposits & Withdrawals\"}\n icon={<ArrowLeftRightIcon />}\n value={\"deposit\"}\n >\n <AssetHistoryWidget />\n </TabPanel>\n <TabPanel title={\"Funding\"} icon={<FeeTierIcon />} value={\"funding\"}>\n <FundingHistoryWidget />\n </TabPanel>\n <TabPanel\n title={\"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\";\n\nexport const useAssetHistoryColumns = () => {\n const { data: chains } = useQuery(\"/v1/public/chain_info\");\n\n const columns = useMemo(() => {\n return [\n {\n title: \"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: \"Time\",\n dataIndex: \"created_time\",\n width: 80,\n rule: \"date\",\n },\n {\n title: \"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(\"Copy success\");\n }}\n >\n {value}\n </Text.formatted>\n {/* </Tooltip> */}\n </a>\n );\n },\n },\n {\n title: \"Status\",\n dataIndex: \"trans_status\",\n width: 100,\n formatter: (value) => capitalizeFirstLetter(value.toLowerCase()),\n },\n {\n title: \"Type\",\n dataIndex: \"side\",\n width: 80,\n formatter: (value) => capitalizeFirstLetter(value.toLowerCase()),\n render: (value) => {\n return <Text color={value.toLowerCase()}>{value}</Text>;\n },\n },\n {\n title: \"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]);\n\n return columns;\n};\n\nexport const SIDES = [\n { label: \"All\", value: \"All\" },\n { label: \"Deposit\", value: \"DEPOSIT\" },\n { label: \"Withdrawal\", value: \"WITHDRAW\" },\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 } from \"react\";\nimport { DataFilter } from \"@orderly.network/ui\";\nimport { SIDES, useAssetHistoryColumns } from \"./column\";\nimport { type UseAssetHistoryReturn } from \"./useDataSource.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\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\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\";\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\n const { symbol, dateRange } = queryParameter;\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\";\n\nexport const useFundingHistoryColumns = () => {\n const columns = useMemo(() => {\n return [\n {\n title: \"Instrument\",\n dataIndex: \"symbol\",\n width: 80,\n rule: \"symbol\",\n textProps: {\n showIcon: true,\n },\n },\n {\n title: \"Time\",\n dataIndex: \"created_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: \"Funding rate / Annual rate\",\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: \"Payment type\",\n dataIndex: \"payment_type\",\n width: 80,\n render: (value: any) => {\n switch (value) {\n case \"Pay\":\n return \"Paid\";\n case \"Receive\":\n return \"Received\";\n default:\n return value;\n }\n },\n },\n {\n title: \"Funding fee (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 }, []);\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 { DataFilter } from \"@orderly.network/ui\";\nimport { TYPES, useColumns } from \"./column\";\nimport { FC } from \"react\";\nimport { type useDistributionHistoryHookReturn } from \"./useDataSource.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\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\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\";\n\nimport { Flex, type Column, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\n\nexport const useColumns = () => {\n const columns = useMemo(() => {\n return [\n {\n title: \"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: \"Time\",\n dataIndex: \"updated_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: \"Status\",\n dataIndex: \"status\",\n width: 120,\n formatter(value, record, index) {\n switch (value) {\n case \"CREATED\":\n case \"SPLIT\":\n return \"Processing\";\n case \"COMPLETED\":\n default:\n return \"Completed\";\n }\n },\n },\n\n {\n title: \"Type\",\n dataIndex: \"type\",\n width: 80,\n formatter: (value: any) => {\n switch (value) {\n case \"REFERRER_REBATE\":\n return \"Referral commission\";\n case \"REFEREE_REBATE\":\n return \"Referee rebate\";\n case \"BROKER_FEE\":\n return \"Broker fee\";\n default:\n return \"-\";\n }\n },\n },\n {\n title: \"Amount\",\n dataIndex: \"amount\",\n width: 80,\n // rule: \"price\",\n },\n ] as Column<API.FundingFeeRow & { annual_rate: number }>[];\n }, []);\n\n return columns;\n};\n\nexport const TYPES = [\n { label: \"All\", value: \"All\" },\n { label: \"Referral commission\", value: \"REFERRER_REBATE\" },\n { label: \"Referee rebate\", value: \"REFEREE_REBATE\" },\n { label: \"Broker fee\", value: \"BROKER_FEE\" },\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 { Card, Grid, Box, Statistic, Text, Flex } from \"@orderly.network/ui\";\n\nimport { UsePerformanceScriptReturn } from \"./performance.script\";\nimport { PnLBarChart, PnlLineChart } from \"@orderly.network/chart\";\nimport { PeriodTitle } from \"../shared/periodHeader\";\nimport { useMemo } from \"react\";\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\n return (\n <Card\n // @ts-ignore\n title={\n <PeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title=\"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={`${period} ROI`}\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={`${period} PnL`}\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>{`${period} Volume (USDC)`}</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\n return (\n <Box mt={4} height={\"188px\"}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n Daily PnL\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 return (\n <Box mt={4}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n Cumulative PnL\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 } = useAppContext();\n const { state } = useAccount();\n const filteredData = useDataTap(ctx.data, {\n accountStatus: 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 return {\n ...ctx,\n data: _data,\n invisible: wrongNetwork || state.status < AccountStatusEnum.EnableTrading,\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","import { Box } from \"@orderly.network/ui\";\nimport {\n LayoutProps,\n Scaffold,\n SideBar,\n SideBarProps,\n useScaffoldContext,\n} from \"@orderly.network/ui-scaffold\";\nimport { PropsWithChildren } from \"react\";\n\nexport type PortfolioLayoutProps = {\n hideSideBar?: boolean;\n} & SideBarProps &\n LayoutProps;\n\nexport const PortfolioLayout = (\n props: PropsWithChildren<PortfolioLayoutProps>\n) => {\n const { children, ...rest } = props;\n\n return (\n <Scaffold\n leftSidebar={props.hideSideBar ? null : <LeftSidebar {...rest} />}\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\nconst LeftSidebar = (props: SideBarProps & LayoutProps) => {\n const { expanded, setExpand } = useScaffoldContext();\n\n return (\n <SideBar\n title=\"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 type { SideBarProps } from \"@orderly.network/ui-scaffold\";\nimport { useEffect, useMemo, useState } from \"react\";\n\nimport { useScaffoldContext } from \"@orderly.network/ui-scaffold\";\nimport { useMediaQuery } from \"@orderly.network/hooks\";\n\nexport const useLayoutBuilder = (props: {\n current?: string;\n}): SideBarProps & {\n hideSideBar: boolean;\n} => {\n const { routerAdapter } = useScaffoldContext();\n const [current, setCurrent] = useState(\n props.current ?? routerAdapter?.currentPath ?? \"/portfolio\"\n );\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: \"Overview\",\n href: \"/portfolio\",\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: \"Positions\",\n href: \"/portfolio/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: \"Orders\",\n href: \"/portfolio/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: \"Fee tier\",\n href: \"/portfolio/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: \"API key\",\n href: \"/portfolio/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: \"Settings\",\n href: \"/portfolio/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 }, []);\n\n const hideSideBar = useMediaQuery(\"(max-width: 768px)\");\n\n return {\n items,\n current,\n hideSideBar,\n onItemSelect: (item) => {\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 { PropsWithChildren } from \"react\";\nimport { PortfolioLayout } from \"./layout.ui\";\nimport { useLayoutBuilder } from \"./useLayoutBuilder.script\";\nimport type { LayoutProps } from \"@orderly.network/ui-scaffold\";\n\nexport const PortfolioLayoutWidget = (\n props: PropsWithChildren<LayoutProps>\n) => {\n const state = useLayoutBuilder({\n current: props.leftSideProps?.current\n });\n return <PortfolioLayout {...state} {...props} children={props.children} />;\n};\n","export { FeeTierPage } from \"./page\";\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useAccountInfo, usePrivateQuery } 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\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: 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\";\n\nexport const useFeeTierColumns = () => {\n const columns = useMemo(() => {\n return [\n {\n title: \"Tier\",\n dataIndex: \"tier\",\n align: \"left\",\n width: 100,\n },\n {\n title: \"30 day volume (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 {\"Above \"}\n {numberToHumanStyle(volume_min, volume_min === 2500000 ? 1 : 0)}\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: \"Maker\",\n dataIndex: \"maker_fee\",\n align: \"right\",\n width: 100,\n render: (value) => {\n return <Text>{value}</Text>;\n },\n },\n {\n title: \"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 }, []);\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\";\n\nexport type FeeTierProps = useFeeTierScriptReturn;\n\nexport const FeeTier: React.FC<FeeTierProps> = (props) => {\n const { columns, dataSource, tier, vol, takerFeeRate, makerFeeRate } = props;\n return (\n <Card\n // @ts-ignore\n title={\n <Flex justify={\"between\"}>\n <Text size=\"lg\">Fee tier</Text>\n <Flex gap={1}>\n <Text size=\"xs\" intensity={54}>\n Updated daily by\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 return (\n <Flex direction=\"row\" gapX={4} my={4} itemAlign={\"stretch\"}>\n <FeeTierHeaderItem\n label=\"Your tier\"\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.tier || \"--\"}\n </Text.gradient>\n }\n />\n <FeeTierHeaderItem\n label=\"30D trading volume (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=\"Taker fee rate\"\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.takerFeeRate || \"--\"}\n </Text.gradient>\n }\n />\n <FeeTierHeaderItem\n label=\"Maker fee rate\"\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 { LiquidationWidget, PositionHistoryWidget, PositionsProps, PositionsWidget } from \"@orderly.network/ui-positions\";\nimport { Flex, Text, Divider, Box, Tabs, TabPanel } from \"@orderly.network/ui\";\nimport { useState } from \"react\";\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 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\">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 value={tab} onValueChange={(e) => setTab(e as any)} classNames={{\n tabsList: \"!oui-border-none oui-pb-1\"\n }}>\n <TabPanel value={TabsType.positions} title={TabsType.positions}>\n <PositionsWidget {...props} />\n </TabPanel>\n <TabPanel value={TabsType.positionHistory} title={TabsType.positionHistory}>\n <PositionHistoryWidget {...props} />\n </TabPanel>\n <TabPanel value={TabsType.liquidation} title={TabsType.liquidation}>\n <LiquidationWidget />\n </TabPanel>\n </Tabs>\n </Box>\n </Flex>\n );\n};\n","import { Box, Divider, Flex, Text } from \"@orderly.network/ui\";\nimport { OrdersWidget } from \"@orderly.network/ui-orders\";\n\nexport const OrdersPage = () => {\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\">Orders</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 <OrdersWidget />\n </Box>\n </Flex>\n );\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\";\n\nexport const APIManager: FC<ApiManagerScriptReturns> = (props) => {\n return (\n <Card\n title={\"API keys\"}\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 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 Account ID\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 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 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}>\n Create API keys to suit your trading needs. For your security, don't\n share your API keys with anyone.{\" \"}\n </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>Read API guide</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: \"Please connect wallet before create API key\",\n signIn: \"Please sign in before create API key\",\n enableTrading: \"Please enable trading before create API key\",\n wrongNetwork:\n \"Please switch to a supported network to create API key\",\n }}\n >\n <Button\n size=\"md\"\n icon={<PlusIcon />}\n variant=\"contained\"\n color=\"primary\"\n onClick={props.onCreateApiKey}\n disabled={!props.canCreateApiKey || props.wrongNetwork}\n // className=\"disabled:oui-cursor-default\"\n data-testid=\"oui-testid-apiKey-createApiKey-btn\"\n >\n Create API key\n </Button>\n </AuthGuardTooltip>\n </Flex>\n );\n};\n\nconst KeyList: FC<ApiManagerScriptReturns> = (props) => {\n const columns: Column<APIKeyItem>[] = [\n {\n title: \"API key\",\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: \"Permission type\",\n dataIndex: \"scope\",\n render: (value) =>\n value\n ?.split(\",\")\n .map((e: any) => capitalizeFirstChar(`${e}`))\n .join(\", \"),\n },\n {\n title: \"Restricted IP\",\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: \"Expiration date\",\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 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 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 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 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 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\";\n\nexport type GenerateKeyInfo = {\n key: string;\n screctKey: string;\n ip?: string;\n permissions?: string;\n};\n\nexport const useApiManagerScript = (props?: {\n filterTags?: [string];\n keyStatus?: string;\n}) => {\n const { filterTags, keyStatus } = props ?? {};\n const [showCreateDialog, setShowCreateDialog] = useState(false);\n const [showCreatedDialog, setShowCreatedDialog] = useState(false);\n const [generateKey, setGenerateKey] = useState<GenerateKeyInfo | undefined>();\n const { configStore } = useContext(OrderlyContext);\n const brokerId = configStore.get(\"brokerId\");\n const { wrongNetwork } = useAppContext();\n\n const { state, account } = useAccount();\n const canCreateApiKey = state.status === AccountStatusEnum.EnableTrading;\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: { keyStatus: 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(\"API key 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(\"API info 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(\"API key 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(\"API key updated\");\n refresh();\n return Promise.resolve();\n } else {\n toast.error(data.message);\n }\n return Promise.reject();\n };\n\n const onCopyAccountId = () => toast.success(\"Account id copied\");\n const onCopyApiKey = (key?: string) => {\n if (typeof key !== \"undefined\") {\n navigator.clipboard.writeText(key.replace(\"ed25519:\", \"\"));\n }\n toast.success(\"API key copied\");\n };\n const onCopyApiSecretKey = () => toast.success(\"Secret key copied\");\n const onCopyIP = () => toast.success(\"Restricted IP copied\");\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) ? \"\" : \"IP restriction format is incorrect.\";\n };\n\n const address = useDataTap(data?.account_id, {\n accountStatus: AccountStatusEnum.EnableTrading,\n });\n const uid = useDataTap(data?.user_id, {\n accountStatus: AccountStatusEnum.EnableTrading,\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 React, { FC, useEffect, useState } from \"react\";\nimport {\n Box,\n cn,\n CopyIcon,\n // Checkbox,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n TextField,\n} from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\nimport { ScopeType } from \"@orderly.network/hooks\";\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 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=\"Create API key\"\n actions={{\n primary: {\n label: \"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 IP restriction (optional)\n </Text>\n <textarea\n data-testid=\"oui-testid-apiKey-createApiKey-dialog-textarea\"\n placeholder=\"Add IP addresses, separated by commas.\"\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}>\n <div className=\"oui-h-1 oui-w-1 oui-rounded-full oui-bg-danger\"></div>\n <Text color=\"danger\" size=\"xs\">\n {hint}\n </Text>\n </Flex>\n )}\n </Flex>\n <Statistic\n label={\n <Text size=\"xs\" intensity={54}>\n 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=\"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=\"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 <Text intensity={54} size=\"sm\">\n {props.label}\n </Text>\n </button>\n );\n};\n","import React, { FC, useEffect, useState } from \"react\";\nimport {\n Box,\n Checkbox,\n CopyIcon,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n TextField,\n} from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\n\nexport const CreatedAPIKeyDialog: FC<ApiManagerScriptReturns> = (props) => {\n\n const ip = props.generateKey?.ip ?? \"--\";\n \n return (\n <SimpleDialog\n size=\"sm\"\n open={props.showCreatedDialog}\n onOpenChange={(open) => {\n props.hideCreatedDialog?.();\n }}\n title=\"API key created\"\n actions={{\n primary: {\n label: \"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: \"Copy API info\",\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=\"API key\">\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=\"Secret key\">\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=\"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=\"Permissions\">\n <Text size=\"sm\" intensity={80} data-testid=\"oui-testid-apiKey-createdApiKey-dialog-permissions-span\">\n {props.generateKey?.permissions}\n </Text>\n </Statistic>\n <div></div>\n <Text color=\"warning\" size=\"xs\" className=\"oui-text-center\">\n Please copy the API secret. Once you close this pop-up, the API secret\n will be encrypted.\n </Text>\n </Flex>\n </SimpleDialog>\n );\n};\n","import React, { FC, useEffect, useState } from \"react\";\nimport {\n Checkbox,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n TextField,\n} from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\nimport { formatKey } from \"../apiManager.ui\";\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\n return (\n <SimpleDialog\n size=\"sm\"\n open={open}\n onOpenChange={setOpen}\n title=\"Delete API key\"\n actions={{\n primary: {\n label: \"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: \"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 Delete your API key \n <Text color=\"primary\">{formatKey(item?.orderly_key)}</Text> ?\n </Flex>\n </SimpleDialog>\n );\n};\n","import React, { FC, useEffect, useState } from \"react\";\nimport {\n cn,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n TextField,\n} from \"@orderly.network/ui\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\nimport { Checkbox } from \"./createApiKey\";\n\nexport const EditAPIKeyDialog: FC<{\n item: APIKeyItem;\n open: boolean;\n setOpen?: any;\n onUpdate?: (item: APIKeyItem, ip?: string) => Promise<void>;\n verifyIP: (ip: string) => string;\n}> = (props) => {\n const { item, open, setOpen, onUpdate } = props;\n console.log(\"edit dialog\", item.ip_restriction_list.join(\",\"));\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\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=\"Edit API key\"\n actions={{\n primary: {\n label: \"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 IP restriction (optional)\n </Text>\n <textarea\n data-testid=\"oui-testid-apiKey-editApiKey-dialog-textarea\"\n placeholder=\"Add IP addresses, separated by commas.\"\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}>\n <div className=\"oui-h-1 oui-w-1 oui-rounded-full oui-bg-danger\"></div>\n <Text color=\"danger\" size=\"xs\">\n {hint}\n </Text>\n </Flex>\n )}\n </Flex>\n <Statistic\n label={\n <Text size=\"xs\" intensity={54}>\n 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=\"Read\"\n />\n <Checkbox\n disabled\n size={18}\n checked={trade}\n onCheckedChange={(e) => setTrade(e as boolean)}\n label=\"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\";\n\nexport const Setting: FC<SettingScriptReturns> = (props) => {\n return (\n <Card\n title={\"System upgrade\"}\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 Cancel open orders during system upgrade\n </Text>\n <Text intensity={54} size=\"sm\">\n During the upgrade period, all open orders will be cancelled to\n manage your risk in case of high market volatility.\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 {\n APIKeyItem,\n OrderlyContext,\n ScopeType,\n useAccount,\n useAccountInfo,\n useApiKeyManager,\n useDebouncedCallback,\n useMutation,\n useQuery,\n} from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useContext, useEffect, useState } from \"react\";\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 } = 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 return {\n maintenance_cancel_orders: checked, //data?.maintenance_cancel_orders,\n setMaintainConfig,\n isSetting: false,\n canTouch: state.status === AccountStatusEnum.EnableTrading && !wrongNetwork,\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","jsx","PortfolioLayout","props","children","leftSideProps","LeftSidebar","expanded","setExpand","open","e","useEffect","useMemo","useState","useMediaQuery","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","data","currentLeverage","visible","setVisible","connected","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","Select","PeriodTitle","AssetLineChart","AssetsChartUI","FeeTierIcon","ServerFillIcon","TabPanel","Tabs","ArrowLeftRightIcon","capitalizeFirstLetter","TokenIcon","toast","useQuery","chains","record","href","SIDES","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","index","useSymbolsInfo","FundingHistoryUI","symbols","symbol","useFundingFeeHistory","setSymbol","isValidating","useColumns","TYPES","type","useDistributionHistory","useDistributionHistoryHook","setType","HistoryDataGroupUI","active","onTabChange","useStateScript","setActive","PnLBarChart","PnlLineChart","invisible","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","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","address","uid","str","cn","SimpleDialog","CreateAPIKeyDialog","ipText","setIpText","read","setRead","trade","setTrade","hint","setHint","scopes","Checkbox","CreatedAPIKeyDialog","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"],"mappings":"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","sourcesContent":["import { FC, PropsWithChildren } from \"react\";\nimport { Box } from \"@orderly.network/ui\";\nimport {\n LayoutProps,\n RouterAdapter,\n Scaffold,\n SideBar,\n SideBarProps,\n useScaffoldContext,\n} from \"@orderly.network/ui-scaffold\";\n\nexport type PortfolioLayoutProps = LayoutProps & {\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 {...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\n return (\n <SideBar\n title=\"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\";\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\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: \"Overview\",\n href: \"/portfolio\",\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: \"Positions\",\n href: \"/portfolio/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: \"Orders\",\n href: \"/portfolio/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: \"Fee tier\",\n href: \"/portfolio/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: \"API key\",\n href: \"/portfolio/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: \"Settings\",\n href: \"/portfolio/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 }, []);\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 } = useAppContext();\n const [data] = usePositionStream();\n const [currentLeverage] = useLeverage();\n const [visible, setVisible] = useLocalStorage(\"orderly_assets_visible\", true);\n\n const connected = useMemo(() => {\n return state.status === AccountStatusEnum.EnableTrading;\n }, [state]);\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 connected,\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 Box,\n Button,\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\";\n\ntype Props = {\n connected?: 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 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.connected || props.wrongNetwork}\n onDeposit={props.onDeposit}\n onWithdraw={props.onWithdraw}\n />\n }\n >\n <>\n <Statistic\n label={\n <Flex gap={1}>\n <Text intensity={54}>Total value</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\n value={(props.connected ?? false) && !props.wrongNetwork}\n left={<NoValue />}\n >\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 return (\n <Grid cols={3} className=\"oui-h-12\">\n <Statistic label=\"Unrealized PnL\">\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=\"Max account leverage\">\n <Flex itemAlign={\"center\"}>\n <span data-testid=\"oui-testid-portfolio-assets-maxAccountLeverage-value\" className=\"oui-text-lg\">{props.currentLeverage}</span>\n <span>x</span>\n <button className=\"oui-ml-1\" onClick={() => props.onLeverageEdit?.()} data-testid=\"oui-testid-portfolio-assets-maxAccountLeverage-edit-btn\">\n <EditIcon color={\"white\"} size={18} />\n </button>\n </Flex>\n </Statistic>\n <Statistic\n label=\"Available to withdraw\"\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 {\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n Button,\n CardTitle,\n Flex,\n Text,\n} from \"@orderly.network/ui\";\nimport { FC } from \"react\";\n\ntype Props = {\n disabled: boolean;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n};\n\nexport const AssetsHeader: FC<Props> = (props) => {\n return (\n <Flex justify={\"between\"}>\n <CardTitle>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 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 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 connected,\n connect: connectWallet,\n portfolioValue,\n onLeverageEdit,\n ...rest\n } = useAssetScript();\n return (\n <AssetsUI\n onConnectWallet={connectWallet}\n connected={connected}\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\";\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 } = useAppContext();\n\n const filteredData = useDataTap(assetHistory.data, {\n accountStatus: 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 return {\n ...assetHistory,\n wrongNetwork,\n data: _data,\n invisible: wrongNetwork || !assetHistory.data.length,\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\";\n\nexport type AssetsLineChartProps = {} & useAssetsLineChartScriptReturn;\n\nexport const AssetsChartUI = (props: AssetsLineChartProps) => {\n const { onPeriodChange, periodTypes, period, data } = props;\n\n return (\n <Card\n title={\n <PeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title=\"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 { CardTitle, Flex, Select, Text } from \"@orderly.network/ui\";\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 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: item,\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 { AssetHistory, AssetHistoryWidget } from \"../assetHistory\";\nimport { TabName } from \"./useState.script\";\nimport { FundingHistoryWidget } from \"../funding\";\nimport { DistributionHistoryWidget } from \"../distribution\";\n\nexport const HistoryDataGroupUI = (props: {\n active?: TabName;\n onTabChange: (tab: string) => void;\n}) => {\n const { active = \"deposit\", onTabChange } = props;\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={\"Deposits & Withdrawals\"}\n icon={<ArrowLeftRightIcon />}\n value={\"deposit\"}\n >\n <AssetHistoryWidget />\n </TabPanel>\n <TabPanel title={\"Funding\"} icon={<FeeTierIcon />} value={\"funding\"}>\n <FundingHistoryWidget />\n </TabPanel>\n <TabPanel\n title={\"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\";\n\nexport const useAssetHistoryColumns = () => {\n const { data: chains } = useQuery(\"/v1/public/chain_info\");\n\n const columns = useMemo(() => {\n return [\n {\n title: \"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: \"Time\",\n dataIndex: \"created_time\",\n width: 80,\n rule: \"date\",\n },\n {\n title: \"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(\"Copy success\");\n }}\n >\n {value}\n </Text.formatted>\n {/* </Tooltip> */}\n </a>\n );\n },\n },\n {\n title: \"Status\",\n dataIndex: \"trans_status\",\n width: 100,\n formatter: (value) => capitalizeFirstLetter(value.toLowerCase()),\n },\n {\n title: \"Type\",\n dataIndex: \"side\",\n width: 80,\n formatter: (value) => capitalizeFirstLetter(value.toLowerCase()),\n render: (value) => {\n return <Text color={value.toLowerCase()}>{value}</Text>;\n },\n },\n {\n title: \"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]);\n\n return columns;\n};\n\nexport const SIDES = [\n { label: \"All\", value: \"All\" },\n { label: \"Deposit\", value: \"DEPOSIT\" },\n { label: \"Withdrawal\", value: \"WITHDRAW\" },\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 } from \"react\";\nimport { DataFilter } from \"@orderly.network/ui\";\nimport { SIDES, useAssetHistoryColumns } from \"./column\";\nimport { type UseAssetHistoryReturn } from \"./useDataSource.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\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\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\";\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\n const { symbol, dateRange } = queryParameter;\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\";\n\nexport const useFundingHistoryColumns = () => {\n const columns = useMemo(() => {\n return [\n {\n title: \"Symbol\",\n dataIndex: \"symbol\",\n width: 80,\n rule: \"symbol\",\n textProps: {\n showIcon: true,\n },\n },\n {\n title: \"Time\",\n dataIndex: \"created_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: \"Funding rate / Annual rate\",\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: \"Payment type\",\n dataIndex: \"payment_type\",\n width: 80,\n render: (value: any) => {\n switch (value) {\n case \"Pay\":\n return \"Paid\";\n case \"Receive\":\n return \"Received\";\n default:\n return value;\n }\n },\n },\n {\n title: \"Funding fee (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 }, []);\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 { DataFilter } from \"@orderly.network/ui\";\nimport { TYPES, useColumns } from \"./column\";\nimport { FC } from \"react\";\nimport { type useDistributionHistoryHookReturn } from \"./useDataSource.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\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\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\";\n\nimport { Flex, type Column, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\n\nexport const useColumns = () => {\n const columns = useMemo(() => {\n return [\n {\n title: \"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: \"Time\",\n dataIndex: \"updated_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: \"Status\",\n dataIndex: \"status\",\n width: 120,\n formatter(value, record, index) {\n switch (value) {\n case \"CREATED\":\n case \"SPLIT\":\n return \"Processing\";\n case \"COMPLETED\":\n default:\n return \"Completed\";\n }\n },\n },\n\n {\n title: \"Type\",\n dataIndex: \"type\",\n width: 80,\n formatter: (value: any) => {\n switch (value) {\n case \"REFERRER_REBATE\":\n return \"Referral commission\";\n case \"REFEREE_REBATE\":\n return \"Referee rebate\";\n case \"BROKER_FEE\":\n return \"Broker fee\";\n default:\n return \"-\";\n }\n },\n },\n {\n title: \"Amount\",\n dataIndex: \"amount\",\n width: 80,\n // rule: \"price\",\n },\n ] as Column<API.FundingFeeRow & { annual_rate: number }>[];\n }, []);\n\n return columns;\n};\n\nexport const TYPES = [\n { label: \"All\", value: \"All\" },\n { label: \"Referral commission\", value: \"REFERRER_REBATE\" },\n { label: \"Referee rebate\", value: \"REFEREE_REBATE\" },\n { label: \"Broker fee\", value: \"BROKER_FEE\" },\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 { Card, Grid, Box, Statistic, Text, Flex } from \"@orderly.network/ui\";\n\nimport { UsePerformanceScriptReturn } from \"./performance.script\";\nimport { PnLBarChart, PnlLineChart } from \"@orderly.network/chart\";\nimport { PeriodTitle } from \"../shared/periodHeader\";\nimport { useMemo } from \"react\";\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\n return (\n <Card\n // @ts-ignore\n title={\n <PeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title=\"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={`${period} ROI`}\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={`${period} PnL`}\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>{`${period} Volume (USDC)`}</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\n return (\n <Box mt={4} height={\"188px\"}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n Daily PnL\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 return (\n <Box mt={4}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n Cumulative PnL\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 } = useAppContext();\n const { state } = useAccount();\n const filteredData = useDataTap(ctx.data, {\n accountStatus: 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 return {\n ...ctx,\n data: _data,\n invisible: wrongNetwork || state.status < AccountStatusEnum.EnableTrading,\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 { useAccountInfo, usePrivateQuery } 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\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: 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\";\n\nexport const useFeeTierColumns = () => {\n const columns = useMemo(() => {\n return [\n {\n title: \"Tier\",\n dataIndex: \"tier\",\n align: \"left\",\n width: 100,\n },\n {\n title: \"30 day volume (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 {\"Above \"}\n {numberToHumanStyle(volume_min, volume_min === 2500000 ? 1 : 0)}\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: \"Maker\",\n dataIndex: \"maker_fee\",\n align: \"right\",\n width: 100,\n render: (value) => {\n return <Text>{value}</Text>;\n },\n },\n {\n title: \"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 }, []);\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\";\n\nexport type FeeTierProps = useFeeTierScriptReturn;\n\nexport const FeeTier: React.FC<FeeTierProps> = (props) => {\n const { columns, dataSource, tier, vol, takerFeeRate, makerFeeRate } = props;\n return (\n <Card\n // @ts-ignore\n title={\n <Flex justify={\"between\"}>\n <Text size=\"lg\">Fee tier</Text>\n <Flex gap={1}>\n <Text size=\"xs\" intensity={54}>\n Updated daily by\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 return (\n <Flex direction=\"row\" gapX={4} my={4} itemAlign={\"stretch\"}>\n <FeeTierHeaderItem\n label=\"Your tier\"\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.tier || \"--\"}\n </Text.gradient>\n }\n />\n <FeeTierHeaderItem\n label=\"30D trading volume (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=\"Taker fee rate\"\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.takerFeeRate || \"--\"}\n </Text.gradient>\n }\n />\n <FeeTierHeaderItem\n label=\"Maker fee rate\"\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 { LiquidationWidget, PositionHistoryWidget, PositionsProps, PositionsWidget } from \"@orderly.network/ui-positions\";\nimport { Flex, Text, Divider, Box, Tabs, TabPanel } from \"@orderly.network/ui\";\nimport { useState } from \"react\";\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 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\">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 value={tab} onValueChange={(e) => setTab(e as any)} classNames={{\n tabsList: \"!oui-border-none oui-pb-1\",\n tabsContent: \"oui-h-[calc(100%_-_28px)]\",\n }} className=\"oui-h-full\">\n <TabPanel value={TabsType.positions} title={TabsType.positions}>\n <PositionsWidget {...props} />\n </TabPanel>\n <TabPanel value={TabsType.positionHistory} title={TabsType.positionHistory}>\n <PositionHistoryWidget {...props} />\n </TabPanel>\n <TabPanel value={TabsType.liquidation} title={TabsType.liquidation}>\n <LiquidationWidget />\n </TabPanel>\n </Tabs>\n </Box>\n </Flex>\n );\n};\n","import { FC, SVGProps, useRef } from \"react\";\nimport { SharePnLConfig, SharePnLParams } from \"@orderly.network/ui-share\";\nimport { Box, Button, Divider, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { OrderListInstance, OrdersWidget } from \"@orderly.network/ui-orders\";\n\nexport const OrdersPage = (props: {\n sharePnLConfig?: SharePnLConfig &\n Partial<Omit<SharePnLParams, \"position\" | \"refCode\" | \"leverage\">>;\n}) => {\n const { sharePnLConfig } = props;\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\">Orders</Text>\n <Tooltip content=\"The downloaded data will reflect only the applied filters (e.g., status, time, side, and pagination) and may not include all records.\">\n <Button\n color=\"gray\"\n size=\"sm\"\n className=\"oui-bg-base-4\"\n onClick={onDownload}\n >\n 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\";\n\nexport const APIManager: FC<ApiManagerScriptReturns> = (props) => {\n return (\n <Card\n title={\"API keys\"}\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 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 Account ID\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 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 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}>\n Create API keys to suit your trading needs. For your security, don't\n share your API keys with anyone.{\" \"}\n </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>Read API guide</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: \"Please connect wallet before create API key\",\n signIn: \"Please sign in before create API key\",\n enableTrading: \"Please enable trading before create API key\",\n wrongNetwork:\n \"Please switch to a supported network to create API key\",\n }}\n >\n <Button\n size=\"md\"\n icon={<PlusIcon />}\n variant=\"contained\"\n color=\"primary\"\n onClick={props.onCreateApiKey}\n disabled={!props.canCreateApiKey || props.wrongNetwork}\n // className=\"disabled:oui-cursor-default\"\n data-testid=\"oui-testid-apiKey-createApiKey-btn\"\n >\n Create API key\n </Button>\n </AuthGuardTooltip>\n </Flex>\n );\n};\n\nconst KeyList: FC<ApiManagerScriptReturns> = (props) => {\n const columns: Column<APIKeyItem>[] = [\n {\n title: \"API key\",\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: \"Permission type\",\n dataIndex: \"scope\",\n render: (value) =>\n value\n ?.split(\",\")\n .map((e: any) => capitalizeFirstChar(`${e}`))\n .join(\", \"),\n },\n {\n title: \"Restricted IP\",\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: \"Expiration date\",\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 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 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 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 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\";\n\nexport type GenerateKeyInfo = {\n key: string;\n screctKey: string;\n ip?: string;\n permissions?: string;\n};\n\nexport const useApiManagerScript = (props?: {\n filterTags?: [string];\n keyStatus?: string;\n}) => {\n const { filterTags, keyStatus } = props ?? {};\n const [showCreateDialog, setShowCreateDialog] = useState(false);\n const [showCreatedDialog, setShowCreatedDialog] = useState(false);\n const [generateKey, setGenerateKey] = useState<GenerateKeyInfo | undefined>();\n const { configStore } = useContext(OrderlyContext);\n const brokerId = configStore.get(\"brokerId\");\n const { wrongNetwork } = useAppContext();\n\n const { state, account } = useAccount();\n const canCreateApiKey = state.status === AccountStatusEnum.EnableTrading;\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(\"API key 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(\"API info 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(\"API key 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(\"API key updated\");\n refresh();\n return Promise.resolve();\n } else {\n toast.error(data.message);\n }\n return Promise.reject();\n };\n\n const onCopyAccountId = () => toast.success(\"Account id copied\");\n const onCopyApiKey = (key?: string) => {\n if (typeof key !== \"undefined\") {\n navigator.clipboard.writeText(key.replace(\"ed25519:\", \"\"));\n }\n toast.success(\"API key copied\");\n };\n const onCopyApiSecretKey = () => toast.success(\"Secret key copied\");\n const onCopyIP = () => toast.success(\"Restricted IP copied\");\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 address = useDataTap(data?.account_id, {\n accountStatus: AccountStatusEnum.EnableTrading,\n });\n const uid = useDataTap(data?.user_id, {\n accountStatus: AccountStatusEnum.EnableTrading,\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 React, { FC, useEffect, useState } from \"react\";\nimport {\n Box,\n cn,\n CopyIcon,\n // Checkbox,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n TextField,\n} from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\nimport { ScopeType } from \"@orderly.network/hooks\";\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 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=\"Create API key\"\n actions={{\n primary: {\n label: \"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 IP restriction (optional)\n </Text>\n <textarea\n data-testid=\"oui-testid-apiKey-createApiKey-dialog-textarea\"\n placeholder=\"Add IP addresses, separated by commas.\"\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 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=\"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=\"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 <Text intensity={54} size=\"sm\">\n {props.label}\n </Text>\n </button>\n );\n};\n","import React, { FC, useEffect, useState } from \"react\";\nimport {\n Box,\n Checkbox,\n CopyIcon,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n TextField,\n} from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\n\nexport const CreatedAPIKeyDialog: FC<ApiManagerScriptReturns> = (props) => {\n const ip = props.generateKey?.ip ?? \"--\";\n\n return (\n <SimpleDialog\n size=\"sm\"\n open={props.showCreatedDialog}\n onOpenChange={(open) => {\n props.hideCreatedDialog?.();\n }}\n title=\"API key created\"\n actions={{\n primary: {\n label: \"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: \"Copy API info\",\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=\"Account ID\">\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=\"API key\">\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=\"Secret key\">\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=\"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=\"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 Please copy the API secret. Once you close this pop-up, the API secret\n will be encrypted.\n </Text>\n </Flex>\n </SimpleDialog>\n );\n};\n","import React, { FC, useEffect, useState } from \"react\";\nimport {\n Checkbox,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n TextField,\n} from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\nimport { formatKey } from \"../apiManager.ui\";\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\n return (\n <SimpleDialog\n size=\"sm\"\n open={open}\n onOpenChange={setOpen}\n title=\"Delete API key\"\n actions={{\n primary: {\n label: \"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: \"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 Delete your API key \n <Text color=\"primary\">{formatKey(item?.orderly_key)}</Text> ?\n </Flex>\n </SimpleDialog>\n );\n};\n","import React, { FC, useEffect, useState } from \"react\";\nimport {\n cn,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n TextField,\n} from \"@orderly.network/ui\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\nimport { Checkbox } from \"./createApiKey\";\n\nexport const EditAPIKeyDialog: FC<{\n item: APIKeyItem;\n open: boolean;\n setOpen?: any;\n onUpdate?: (item: APIKeyItem, ip?: string) => Promise<void>;\n verifyIP: (ip: string) => string;\n}> = (props) => {\n const { item, open, setOpen, onUpdate } = props;\n const [ipText, setIpText] = useState(item.ip_restriction_list?.join(\",\"));\n const [read, setRead] = useState(true);\n const [trade, setTrade] = useState(true);\n const [hint, setHint] = useState(\"\");\n\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=\"Edit API key\"\n actions={{\n primary: {\n label: \"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 IP restriction (optional)\n </Text>\n <textarea\n data-testid=\"oui-testid-apiKey-editApiKey-dialog-textarea\"\n placeholder=\"Add IP addresses, separated by commas.\"\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 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=\"Read\"\n />\n <Checkbox\n disabled\n size={18}\n checked={trade}\n onCheckedChange={(e) => setTrade(e as boolean)}\n label=\"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\";\n\nexport const Setting: FC<SettingScriptReturns> = (props) => {\n return (\n <Card\n title={\"System upgrade\"}\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 Cancel open orders during system upgrade\n </Text>\n <Text intensity={54} size=\"sm\">\n During the upgrade period, all open orders will be cancelled to\n manage your risk in case of high market volatility.\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 {\n APIKeyItem,\n OrderlyContext,\n ScopeType,\n useAccount,\n useAccountInfo,\n useApiKeyManager,\n useDebouncedCallback,\n useMutation,\n useQuery,\n} from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useContext, useEffect, useState } from \"react\";\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 } = 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 return {\n maintenance_cancel_orders: checked, //data?.maintenance_cancel_orders,\n setMaintainConfig,\n isSetting: false,\n canTouch: state.status === AccountStatusEnum.EnableTrading && !wrongNetwork,\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};"]}
|