@orderly.network/portfolio 2.0.0 → 2.0.1-alpha.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.
@@ -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","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","d","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","tail","dataTailIndex","lastAccountValue","start","end","_","OverviewContext","useOverviewContext","OverviewContextProvider","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","setPageSize","parseMeta","meta","isLoading","onFilter","filter","Filter","Pagination","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","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","FeeTierWidget","page_exports","PositionsPage","PositionsWidget","OrdersPage","api_exports","APIManagerWidget","ApiManagerPage","CopyIcon","PlusIcon","Tooltip","OrderlyContext","useApiKeyManager","useApiManagerScript","showCreateDialog","setShowCreateDialog","showCreatedDialog","setShowCreatedDialog","generateKey","setGenerateKey","configStore","brokerId","account","canCreateApiKey","keys","generateOrderlyKey","setIPRestriction","removeOrderkyKey","resetOrderlyKeyIPRestriction","refresh","error","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","verifyIP","address","uid","totalCount","onPageChange","onPageSizeChange","newData","startIndex","endIndex","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","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.unrealPnL,\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;\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;\n }) => {\n // today daily pnl = totalValue - lastItem.account_value - deposit + withdraw\n let value = new Decimal(totalValue).sub(inputs.lastItem.account_value);\n\n // subtraction of deposit and withdraw\n if (\n Array.isArray(inputs.assetHistory) &&\n inputs.assetHistory.length > 0 &&\n typeof inputs.lastItem.snapshot_time !== \"undefined\"\n ) {\n // find a list with the timestamp greater than the last item timestamp and trans_status = success;\n const list = [];\n\n for (let i = 0; i < inputs.assetHistory.length; i++) {\n const item = inputs.assetHistory[i];\n if (item.created_time > inputs.lastItem.snapshot_time) {\n list.push(item);\n }\n }\n\n // 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) => {\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 ? totalValue : lastItem?.account_value ?? 0,\n pnl: calculateLastPnl({ lastItem, assetHistory, totalValue }),\n };\n };\n\n const mergeData = (data: API.DailyRow[], totalValue: number) => {\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(_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) 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 type Column,\n Box,\n Flex,\n TokenIcon,\n Tooltip,\n toast,\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<Column[]>(() => {\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 ];\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 { useRef, 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 {\n addDays,\n getDate,\n getMonth,\n getYear,\n isSameDay,\n set,\n setHours,\n setMinutes,\n} 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, setPageSize, parseMeta } = 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 return {\n dataSource: data,\n // page: meta?.currentPage,\n meta: parseMeta(meta),\n total: meta?.total,\n isLoading,\n // onDateRangeChange,\n queryParameter: {\n side,\n dateRange,\n },\n // pageSize: meta.,\n // onSearch,\n onFilter,\n setPage,\n setPageSize,\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 { DataTable, Filter, Pagination } 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 {\n dataSource,\n meta,\n setPage,\n setPageSize,\n queryParameter,\n onFilter,\n isLoading,\n } = props;\n const { side, dateRange } = queryParameter;\n const columns = useAssetHistoryColumns();\n\n return (\n <AuthGuardDataTable\n bordered\n loading={isLoading}\n classNames={{\n header: \"oui-text-base-contrast-36\",\n body: \"oui-text-base-contrast-80\",\n }}\n columns={columns}\n dataSource={dataSource}\n >\n <Filter\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 <Pagination\n {...meta}\n onPageChange={setPage}\n onPageSizeChange={setPageSize}\n />\n </AuthGuardDataTable>\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 { DataTable, Filter, Pagination } 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 {\n dataSource,\n queryParameter,\n onFilter,\n isLoading,\n meta,\n setPage,\n setPageSize,\n } = props;\n const columns = useFundingHistoryColumns();\n const symbols = useSymbolsInfo();\n\n const { symbol, dateRange } = queryParameter;\n\n return (\n <AuthGuardDataTable\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n generatedRowKey={(record) => `${record.updated_time}`}\n classNames={{\n header: \"oui-text-base-contrast-36\",\n body: \"oui-text-base-contrast-80\",\n }}\n >\n <Filter\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 <Pagination\n {...meta}\n onPageChange={setPage}\n onPageSizeChange={setPageSize}\n />\n </AuthGuardDataTable>\n );\n};\n","import { useMemo } from \"react\";\n\nimport { Flex, type Column, Text } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\n\nexport const useFundingHistoryColumns = () => {\n const columns = useMemo<\n Column<API.FundingFeeRow & { annual_rate: number }>[]\n >(() => {\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 { useState } from \"react\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport { addDays, getDate, getMonth, getYear, isSameDay, 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, setPageSize, parseMeta } = 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 return {\n dataSource: data,\n meta: parseMeta(meta),\n isLoading,\n isValidating,\n // onDateRangeChange,\n queryParameter: {\n symbol,\n dateRange,\n },\n onFilter,\n setPage,\n setPageSize,\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 { DataTable, Filter, Pagination } 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 {\n dataSource,\n queryParameter,\n onFilter,\n isLoading,\n isValidating,\n meta,\n setPage,\n setPageSize,\n } = props;\n const columns = useColumns();\n const { type, dateRange } = queryParameter;\n\n return (\n <AuthGuardDataTable\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n isValidating={isValidating}\n className=\"oui-font-semibold\"\n classNames={{\n header: \"oui-text-base-contrast-36\",\n body: \"oui-text-base-contrast-80\",\n }}\n >\n <Filter\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 <Pagination\n {...meta}\n onPageChange={setPage}\n onPageSizeChange={setPageSize}\n />\n </AuthGuardDataTable>\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 Column<API.FundingFeeRow & { annual_rate: number }>[]\n >(() => {\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 ];\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 { useRef, useState } from \"react\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport {\n addDays,\n getDate,\n getMonth,\n getYear,\n isSameDay,\n set,\n setHours,\n setMinutes,\n} 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, setPageSize, parseMeta } = 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 return {\n dataSource: data,\n meta: parseMeta(meta),\n isLoading,\n isValidating,\n // onDateRangeChange,\n queryParameter: {\n type,\n dateRange,\n },\n onFilter,\n setPage,\n setPageSize,\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: \"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: \"Setting\",\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};\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 };\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.024%\",\n taker_fee: \"0.054%\",\n volume_min: 500000,\n volume_max: 2500000,\n },\n {\n tier: 3,\n maker_fee: \"0.018%\",\n taker_fee: \"0.048%\",\n volume_min: 2500000,\n volume_max: 10000000,\n },\n {\n tier: 4,\n maker_fee: \"0.012%\",\n taker_fee: \"0.042%\",\n volume_min: 10000000,\n volume_max: 100000000,\n },\n {\n tier: 5,\n maker_fee: \"0.006%\",\n taker_fee: \"0.036%\",\n volume_min: 100000000,\n volume_max: 250000000,\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: 250000000,\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 { Text, type Column } from \"@orderly.network/ui\";\nimport { numberToHumanStyle } from \"@orderly.network/utils\";\n\nexport const useFeeTierColumns = () => {\n const columns = useMemo<Column[]>(() => {\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 } = row;\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 ];\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 Column,\n Divider,\n DataTable,\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 dataSource={dataSource} columns={columns} tier={tier} />\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=\"Take 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=\"Marker 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};\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) {\n const offsetTop = elementRect.top - parentRect.top;\n setTop(offsetTop);\n }\n }, [props.tier]);\n const onRow = useCallback(\n (record: any, index: number) => {\n if (index + 1 == props.tier) {\n return {\n id: \"oui-fee-tier-current\",\n className:\n \"oui-h-12 oui-text-[rgba(0,0,0,0.88)] oui-pointer-events-none\",\n };\n }\n\n return { className: \"oui-h-12\" };\n },\n [props.tier]\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-[6px] 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 header: \"oui-text-base-contrast-36\",\n body: \"oui-text-base-contrast-80\",\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 { Box, Divider } from \"@orderly.network/ui\";\nimport { PositionsWidget } from \"@orderly.network/ui-positions\";\n\nexport const PositionsPage = () => {\n return (\n <>\n <h3>Positions</h3>\n <Divider className=\"oui-my-4\" />\n <Box px={3}>\n <PositionsWidget />\n </Box>\n </>\n );\n};\n","export const OrdersPage = () => {\n return <div>OrderPage</div>;\n};\n","export { APIManagerWidget } from \"./apiManager.widget\";\nexport { ApiManagerPage } from \"./apiManager.page\";\n","import {\n ArrowLeftRightIcon,\n Box,\n Button,\n Card,\n CopyIcon,\n DataTable,\n Divider,\n EmptyDataState,\n Flex,\n Pagination,\n PlusIcon,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport {\n ApiManagerScriptReturns,\n capitalizeFirstChar,\n} from \"./apiManager.script\";\nimport { FC, useState } from \"react\";\nimport { Column } from \"@orderly.network/ui\";\nimport { CreateAPIKeyDialog } from \"./dialog/createApiKey\";\nimport { CreatedAPIKeyDialog } from \"./dialog/createdApiKey\";\nimport { DeleteAPIKeyDialog } from \"./dialog/deleteApiKey\";\nimport { EditAPIKeyDialog } from \"./dialog/editApiKey\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport {\n AuthGuard,\n AuthGuardDataTable,\n AuthGuardEmpty,\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 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 header: \"oui-bg-base-9 oui-text-xs oui-text-base-contrast-36\",\n body: \"oui-text-xs oui-text-base-contrast-80\",\n }}\n >\n <Pagination\n {...props.meta}\n onPageChange={props.onPageChange}\n onPageSizeChange={props.onPageSizeChange}\n />\n </AuthGuardDataTable>\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 useAccountInfo,\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, 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 = () => {\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 >(`/v1/get_account?address=${account.address}&broker_id=${brokerId}&chain_type=${account.walletAdapter?.chainNamespace}`);\n\n const [\n keys,\n {\n generateOrderlyKey,\n setIPRestriction,\n removeOrderkyKey,\n resetOrderlyKeyIPRestriction,\n refresh,\n isLoading,\n error,\n },\n ] = useApiKeyManager({\n keyInfo: { keyStatus: \"ACTIVE\" },\n });\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(generateKeyRes, res.data.ip_restriction_list?.join(\",\"));\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 removeOrderkyKey(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.destoryOrderlyKey();\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) => e.tag === \"manualCreated\" && e.key_status === \"ACTIVE\");\n }, [keys]);\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\n const { page, pageSize, setPage, setPageSize, parseMeta } = usePagination({page: 1});\n\n const totalCount = useMemo(() => keyList?.length, [keyList]);\n const onPageChange = (page: number) => {\n setPage(page);\n };\n\n const onPageSizeChange = (pageSize: number) => {\n setPageSize(pageSize);\n };\n\n \n\n const newData = useMemo(() => {\n const startIndex = (page - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n return keyList?.slice(startIndex, endIndex);\n }, [keyList, page, pageSize]);\n\n const meta = parseMeta({\n total: totalCount ?? 0,\n current_page: page,\n records_per_page: pageSize,\n });\n\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: newData,\n generateKey,\n onCopyAccountId,\n wrongNetwork,\n onCopyApiKey,\n onCopyApiSecretKey,\n onCopyIP,\n verifyIP,\n isLoading,\n\n // pagination\n meta: meta,\n onPageChange,\n onPageSizeChange,\n };\n};\n\nexport function capitalizeFirstChar(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport type ApiManagerScriptReturns = ReturnType<typeof useApiManagerScript>;","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 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 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 &nbsp;\n <Text color=\"primaryLight\">{formatKey(item?.orderly_key)}</Text>&nbsp;?\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 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 = () => {\n const state = useApiManagerScript();\n return <APIManager {...state} />;\n};\n","import { APIManagerWidget } from \"./apiManager.widget\";\n\nexport const ApiManagerPage = () => {\n return <APIManagerWidget />\n};","export { SettingWidget } from \"./setting.widget\";\nexport { SettingPage } from \"./setting.page\";\n","import {\n ArrowLeftRightIcon,\n Button,\n Card,\n DataTable,\n Divider,\n EmptyDataState,\n Flex,\n PlusIcon,\n Switch,\n Text,\n} from \"@orderly.network/ui\";\n\nimport { SettingScriptReturns } from \"./setting.script\";\nimport { FC, useState } from \"react\";\nimport { Column } from \"@orderly.network/ui\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { AuthGuard, AuthGuardEmpty, AuthGuardTooltip } from \"@orderly.network/ui-connector\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\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/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","d","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","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","setPageSize","parseMeta","meta","isLoading","onFilter","filter","pagination","DataFilter","AuthGuardTableView","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","useFeeTierScript","dataAdapter","tier","setTier","cols","volumeStatistics","getFuturesCurrentTier","feeList","futures_taker_fee_rate","futures_maker_fee_rate","takerRate","makerRate","useCallback","TableView","FeeTier","takerFeeRate","makerFeeRate","FeeTierHeader","FeeTierTable","FeeTierHeaderItem","top","setTop","parentRect","elementRect","offsetTop","onRow","FeeTierWidget","page_exports","PositionsPage","PositionsWidget","OrdersPage","OrdersWidget","api_exports","APIManagerPage","APIManagerWidget","CopyIcon","PlusIcon","Tooltip","OrderlyContext","useApiKeyManager","useApiManagerScript","showCreateDialog","setShowCreateDialog","showCreatedDialog","setShowCreatedDialog","generateKey","setGenerateKey","configStore","brokerId","account","canCreateApiKey","keys","generateOrderlyKey","setIPRestriction","removeOrderlyKey","resetOrderlyKeyIPRestriction","refresh","error","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","verifyIP","address","uid","totalCount","onPageChange","onPageSizeChange","newData","startIndex","endIndex","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(_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 TableColumn,\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 TableColumn[];\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, useRef, useState } from \"react\";\nimport { useAssetsHistory } from \"@orderly.network/hooks\";\nimport { PaginationMeta, usePagination } from \"@orderly.network/ui\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport {\n addDays,\n getDate,\n getMonth,\n getYear,\n isSameDay,\n set,\n setHours,\n setMinutes,\n} 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, setPageSize, parseMeta } = 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 return {\n ...parseMeta(meta),\n onPageChange: setPage,\n onPageSizeChange: setPageSize,\n } as PaginationMeta;\n }, [meta, setPage, setPageSize]);\n\n return {\n dataSource: data,\n // page: meta?.currentPage,\n meta: parseMeta(meta),\n total: meta?.total,\n isLoading,\n // onDateRangeChange,\n queryParameter: {\n side,\n dateRange,\n },\n // pageSize: meta.,\n // onSearch,\n onFilter,\n setPage,\n setPageSize,\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 { AuthGuardTableView } 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 {\n dataSource,\n meta,\n setPage,\n setPageSize,\n queryParameter,\n onFilter,\n isLoading,\n } = 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 <AuthGuardTableView\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 // return (\n // <AuthGuardDataTable\n // bordered\n // loading={isLoading}\n // classNames={{\n // header: \"oui-text-base-contrast-36\",\n // body: \"oui-text-base-contrast-80\",\n // }}\n // columns={columns}\n // dataSource={dataSource}\n // >\n // <Filter\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 // <Pagination\n // {...meta}\n // onPageChange={setPage}\n // onPageSizeChange={setPageSize}\n // />\n // </AuthGuardDataTable>\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 { AuthGuardTableView } from \"@orderly.network/ui-connector\";\n\ntype FundingHistoryProps = {} & UseFundingHistoryReturn;\n\nexport const FundingHistoryUI: FC<FundingHistoryProps> = (props) => {\n const {\n dataSource,\n queryParameter,\n onFilter,\n isLoading,\n meta,\n setPage,\n setPageSize,\n } = 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 <AuthGuardTableView\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 // return (\n // <AuthGuardDataTable\n // bordered\n // columns={columns}\n // dataSource={dataSource}\n // loading={isLoading}\n // generatedRowKey={(record) => `${record.updated_time}`}\n // classNames={{\n // header: \"oui-text-base-contrast-36\",\n // body: \"oui-text-base-contrast-80\",\n // }}\n // >\n // <Filter\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 // <Pagination\n // {...meta}\n // onPageChange={setPage}\n // onPageSizeChange={setPageSize}\n // />\n // </AuthGuardDataTable>\n // );\n};\n","import { useMemo } from \"react\";\nimport { Flex, Text, type TableColumn } 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 TableColumn<API.FundingFeeRow & { annual_rate: number }>[];\n }, []);\n\n return columns;\n};\n","import { useFundingFeeHistory } from \"@orderly.network/hooks\";\nimport { PaginationMeta, usePagination } from \"@orderly.network/ui\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { useMemo, useState } from \"react\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport { addDays, getDate, getMonth, getYear, isSameDay, 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, setPageSize, parseMeta } = 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 return {\n ...parseMeta(meta),\n onPageChange: setPage,\n onPageSizeChange: setPageSize,\n } as PaginationMeta;\n }, [meta, setPage, setPageSize]);\n\n return {\n dataSource: data,\n meta: parseMeta(meta),\n isLoading,\n isValidating,\n // onDateRangeChange,\n queryParameter: {\n symbol,\n dateRange,\n },\n onFilter,\n setPage,\n setPageSize,\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 { AuthGuardTableView } from \"@orderly.network/ui-connector\";\n\ntype FundingHistoryProps = {} & useDistributionHistoryHookReturn;\n\nexport const DistributionHistoryUI: FC<FundingHistoryProps> = (props) => {\n const {\n dataSource,\n queryParameter,\n onFilter,\n isLoading,\n isValidating,\n meta,\n setPage,\n setPageSize,\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 <AuthGuardTableView\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 // return (\n // <AuthGuardDataTable\n // bordered\n // columns={columns}\n // dataSource={dataSource}\n // loading={isLoading}\n // isValidating={isValidating}\n // className=\"oui-font-semibold\"\n // classNames={{\n // header: \"oui-text-base-contrast-36\",\n // body: \"oui-text-base-contrast-80\",\n // }}\n // >\n // <Filter\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 // <Pagination\n // {...meta}\n // onPageChange={setPage}\n // onPageSizeChange={setPageSize}\n // />\n // </AuthGuardDataTable>\n // );\n};\n","import { useMemo } from \"react\";\n\nimport { Flex, type TableColumn, 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 TableColumn<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, useRef, useState } from \"react\";\nimport { PaginationMeta, usePagination } from \"@orderly.network/ui\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport {\n addDays,\n getDate,\n getMonth,\n getYear,\n isSameDay,\n set,\n setHours,\n setMinutes,\n} 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, setPageSize, parseMeta } = 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 return {\n ...parseMeta(meta),\n onPageChange: setPage,\n onPageSizeChange: setPageSize,\n } as PaginationMeta;\n }, [meta, setPage, setPageSize]);\n\n return {\n dataSource: data,\n meta: parseMeta(meta),\n isLoading,\n isValidating,\n // onDateRangeChange,\n queryParameter: {\n type,\n dateRange,\n },\n onFilter,\n setPage,\n setPageSize,\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 { TableColumn } from \"@orderly.network/ui\";\nimport { useFeeTierColumns } from \"./column\";\n\nexport type useFeeTierScriptReturn = ReturnType<typeof useFeeTierScript>;\n\nexport type UseFeeTierScriptOptions = {\n dataAdapter?: (\n columns: TableColumn[],\n dataSource: any[]\n ) => { columns: TableColumn[]; dataSource: any[] };\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 };\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 TableColumn, 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 } = row;\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 TableColumn[];\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 TableView,\n TableColumn,\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 dataSource={dataSource} columns={columns} tier={tier} />\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=\"Take 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=\"Marker 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: TableColumn[];\n dataSource?: any[];\n page?: number;\n pageSize?: number;\n dataCount?: number;\n tier?: number | null;\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) {\n const offsetTop = elementRect.top - parentRect.top;\n setTop(offsetTop);\n }\n }, [props.tier]);\n const onRow = useCallback(\n (record: any, index: number) => {\n if (index + 1 == props.tier) {\n return {\n id: \"oui-fee-tier-current\",\n className:\n \"oui-h-12 oui-text-[rgba(0,0,0,0.88)] oui-pointer-events-none\",\n };\n }\n\n return { className: \"oui-h-12\" };\n },\n [props.tier]\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-[6px] oui-absolute oui-w-full\"\n style={{\n top: `${top}px`,\n height: \"48px\",\n }}\n />\n )}\n <TableView\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 { PositionsProps, PositionsWidget } from \"@orderly.network/ui-positions\";\nimport { Flex, Text, Divider, Box } from \"@orderly.network/ui\";\n\nexport const PositionsPage = (props: PositionsProps) => {\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 <PositionsWidget {...props} />\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 TableColumn,\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 AuthGuardTableView,\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: TableColumn<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 <AuthGuardTableView\n bordered\n columns={columns}\n loading={props.isLoading}\n dataSource={props.keys}\n emptyView={<AuthGuardEmpty />}\n classNames={{}}\n pagination={props.pagination}\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 // header: \"oui-bg-base-9 oui-text-xs oui-text-base-contrast-36\",\n // body: \"oui-text-xs oui-text-base-contrast-80\",\n // }}\n // >\n // <Pagination\n // {...props.meta}\n // onPageChange={props.onPageChange}\n // onPageSizeChange={props.onPageSizeChange}\n // />\n // </AuthGuardDataTable>\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 useAccountInfo,\n useApiKeyManager,\n useQuery,\n} from \"@orderly.network/hooks\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { PaginationMeta, toast, usePagination } from \"@orderly.network/ui\";\nimport { useContext, 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 = () => {\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: \"ACTIVE\" },\n });\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(\n (e) => e.tag === \"manualCreated\" && e.key_status === \"ACTIVE\"\n );\n }, [keys]);\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 { page, pageSize, setPage, setPageSize, parseMeta } = usePagination({\n page: 1,\n });\n\n const totalCount = useMemo(() => keyList?.length, [keyList]);\n const onPageChange = (page: number) => {\n setPage(page);\n };\n\n const onPageSizeChange = (pageSize: number) => {\n setPageSize(pageSize);\n };\n\n const newData = useMemo(() => {\n const startIndex = (page - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n return keyList?.slice(startIndex, endIndex);\n }, [keyList, page, pageSize]);\n\n const meta = parseMeta({\n total: totalCount ?? 0,\n current_page: page,\n records_per_page: pageSize,\n });\n\n const pagination = useMemo(() => {\n return {\n ...meta,\n onPageChange: setPage,\n onPageSizeChange: setPageSize,\n } as PaginationMeta;\n }, [meta, setPage, setPageSize]);\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: newData,\n generateKey,\n onCopyAccountId,\n wrongNetwork,\n onCopyApiKey,\n onCopyApiSecretKey,\n onCopyIP,\n verifyIP,\n isLoading,\n\n meta: meta,\n onPageChange,\n onPageSizeChange,\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 &nbsp;\n <Text color=\"primaryLight\">{formatKey(item?.orderly_key)}</Text>&nbsp;?\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 = () => {\n const state = useApiManagerScript();\n return <APIManager {...state} />;\n};\n","import { APIManagerWidget } from \"./apiManager.widget\";\n\nexport const APIManagerPage = () => {\n return <APIManagerWidget />\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};"]}