@orderly.network/ui-positions 2.5.3-alpha.0 → 2.5.3-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/index.ts","../src/components/positions/desktop/closeButton.tsx","../src/providers/symbolProvider.tsx","../src/components/positions/desktop/positionRowContext.tsx","../src/components/fundingFeeHistory/fundingFeeHistory.ui.tsx","../src/components/fundingFeeHistory/endReachedBox.tsx","../src/components/fundingFeeHistory/useEndReached.ts","../src/components/fundingFeeHistory/fundingFeeButton.tsx","../src/components/positions/combinePositions.script.ts","../src/components/positions/hooks/useSubAccountQuery.ts","../src/components/positions/positions.script.ts","../src/components/positions/positions.ui.tsx","../src/components/positions/desktop/useColumn.tsx","../src/components/positions/desktop/components.tsx","../src/components/positions/desktop/listElement.tsx","../src/components/positions/desktop/priceInput.tsx","../src/components/positions/desktop/quantityInput.tsx","../src/components/positions/desktop/numeralWithCtx.tsx","../src/components/positions/desktop/shareButton/shareButton.ui.tsx","../src/components/positions/desktop/shareButton/shareButton.script.tsx","../src/components/positions/desktop/shareButton/shareButton.widget.tsx","../src/components/positions/desktop/triggerPrice.tsx","../src/components/positions/desktop/unrealPnLHover.tsx","../src/components/positions/mobile/positionCell/positionCell.ui.tsx","../src/components/positions/mobile/limitCloseBtn/limitCloseBtn.ui.tsx","../src/components/positions/mobile/limitCloseBtn/limitCloseBtn.script.tsx","../src/components/positions/mobile/limitCloseBtn/limitCloseBtn.widget.tsx","../src/components/positions/mobile/marketCloseBtn/marketCloseBtn.ui.tsx","../src/components/positions/mobile/marketCloseBtn/marketCloseBtn.script.tsx","../src/components/positions/mobile/marketCloseBtn/marketCloseBtn.widget.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.ui.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.script.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.widget.tsx","../src/components/positions/mobile/positionCell/items.tsx","../src/components/positions/mobile/positionCell/positionCell.script.tsx","../src/components/positions/mobile/positionCell/positionCell.widget.tsx","../src/components/positions/positions.widget.tsx","../src/components/positionHistory/positionHistory.ui.tsx","../src/components/positionHistory/desktop/usePositionHistoryColumn.tsx","../src/components/positionHistory/mobile/positionHistoryCell.ui.tsx","../src/components/positionHistory/mobile/items.tsx","../src/components/positionHistory/positionHistory.script.tsx","../src/utils/utils.ts","../src/components/positionHistory/mobile/positionHistoryCell.script.tsx","../src/components/positionHistory/mobile/positionHistoryCell.widget.tsx","../src/components/positionHistory/positionHistory.widget.tsx","../src/components/liquidation/liquidation.ui.tsx","../src/components/liquidation/desktop/useLiquidationColumn.tsx","../src/components/liquidation/mobile/liquidationCell.ui.tsx","../src/components/liquidation/mobile/items.tsx","../src/components/liquidation/mobile/liquidationCell.script.tsx","../src/components/liquidation/mobile/liquidationCell.widget.tsx","../src/components/liquidation/liquidation.script.tsx","../src/components/liquidation/liquidation.widget.tsx"],"names":["registerSimpleDialog","useMemo","useState","useLocalStorage","useTranslation","useOrderEntryFormErrorMsg","OrderSide","OrderType","Button","toast","Text","CloseIcon","Flex","Divider","Badge","SimpleDialog","ThrottledButton","Box","commify","commifyOptional","Decimal","createContext","useContext","useSymbolsInfo","jsx","SymbolContext","useSymbolContext","SymbolProvider","props","symbolInfo","useCallback","useEffect","usePositionClose","jsxs","PositionsRowContext","usePositionsRowContext","PositionsRowProvider","position","t","quantity","setQuantity","price","setPrice","type","setType","symbol","symbolsInfo","quoteDp","baseDp","baseTick","side","closeOrderData","submit","submitting","errors","calculate","updateQuantity","value","newValues","updatePriceChange","updateOrderType","onSubmit","transSymbolformString","res","err","formatString","arr","base","quote","Fragment","CloseButton","open","setOpen","orderConfirm","parseErrorMsg","onConfirm","onClose","disabled","e","quantityMsg","priceMsg","msg","MarketCloseConfirm","LimitConfirmDialog","ConfirmHeader","hideCloseIcon","ConfirmFooter","onCancel","OrderDetail","total","order","usePrivateInfiniteQuery","Grid","Statistic","DataTable","ListView","useScreen","cn","useRef","useEndReached","sentinelRef","onEndReached","observer","cb","options","handleObserver","entries","entry","EndReachedBox","FundingFeeHistoryUI","start_t","end_t","isMobile","isLoading","data","setSize","pageIndex","previousPageData","loadMore","prev","flattenData","item","listView","HistoryDataListViewSimple","HistoryDataListView","columns","renderItem","FundingFeeItem","useBoolean","SimpleSheet","FundingFeeButton","fee","isOpen","setTrue","setFalse","produce","useAccount","usePositionStream","usePrivateQuery","i18n","positions","_account","useDataTap","formatAddress","usePagination","useSWR","fetcher","useConfig","AccountStatusEnum","getTimestamp","signatureMiddleware","account","accountId","apiBaseUrl","useSWRNext","key","config","args","url","fullUrl","signer","payload","signature","ids","id","useSubAccountQuery","query","formatter","swrOptions","state","middleware","shouldFetch","init","useCombinePositionsScript","calcMode","includedPendingOrder","pnlNotionalDecimalPrecision","sharePnLConfig","onSymbolChange","selectedAccount","pagination","setPage","oldPositions","newPositions","isPositionLoading","mutatePositions","accountInfo","isAccountInfoLoading","processPositions","acc","draft","info","notional","MMR","mm","unrealPnl","imr","unrealPnlROI","unrealPnl_index","unrealPnlROI_index","dataSource","filtered","groupDataSource","groupDataByAccount","mergedLoading","mainAccountId","subAccounts","map","findSubAccount","React","usePositionsScript","AuthGuardDataTable","HoverCard","Tooltip","SharePnLDialogId","EditIcon","PositionTPSLPopover","TPSLButton","tpslOrder","TPSLEditIcon","CaretDownIcon","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuRoot","DropdownMenuTrigger","Input","inputFormatter","PriceInput","setHasFocus","vent","utils","PopoverRoot","PopoverContent","PopoverTrigger","Slider","QuantityInput","sliderValue","setSliderValue","handleClick","event","resetQuantity","percent","onBlur","formatQty","values","Buttons","list","index","renderQuantity","renderQuantityInput","record","renderPriceInput","NumeralWithCtx","tick","children","rest","modal","ShareIcon","ShareButton","showModal","entity","useReferralInfo","useSymbolLeverage","useShareButtonScript","modalId","iconSize","isPositionHistory","getFirstRefCode","refCode","leverage","ShareButtonWidget","AlgoOrderType","TriggerPrice","stopLossPrice","takeProfitPrice","TPSLTriggerPrice","TriggerPriceItem","qty","entryPrice","orderSide","orderType","pnl","direction","msgs","child","Label","content","showIcon","UnrealizedPnLPopoverCard","unPnlPriceBasis","setUnPnlPriceBasic","UnPnlPriceBasisCheckBox","onValueChange","RadioButton","sel","label","onCheckChange","SelIcon","UnselIcon","useColumn","fundingFeeEndTime","r1","r2","a","b","_","LimitCloseBtn","sheetOpen","setSheetOpen","dialogOpen","setDialogOpen","quote_dp","onCloseDialog","isBuy","orderQuantityErrorMsg","orderPriceErrorMsg","slider","useMarkPricesStream","useLimitCloseBtnScript","prices","curMarkPrice","base_dp","LimitCloseBtnWidget","MarketCloseBtn","useMarketCloseBtnScript","MarketCloseBtnWidget","TpSLBtn","PositionTPSLSheet","useTpSLBtnScript","TpSLBtnWidget","SharePnLBottomSheetId","SymbolToken","UnrealPnL","Qty","Margin","Notional","AvgOpen","MarkPrice","LiqPrice","liqPrice","TPSLPrice","FundingFee","PositionCell","className","Header","Body","usePositionCellScript","PositionCellWidget","Positions","MobilePositions","CombinePositions","tableData","row","column","PositionsWidget","MobilePositionsWidget","CombinePositionsWidget","DataFilter","capitalizeFirstLetter","usePositionHistoryColumn","SymbolInfo","Quantity","NetPnL","avgOpen","avgClose","tags","status","renderStatus","netPnl","text","differenceInDays","subDays","setHours","offsetStartOfDay","date","newDate","offsetEndOfDay","formatDatePickerRange","option","areDatesEqual","date1","date2","usePositionHistoryScript","netPnL","dateRange","filterDays","updateFilterDays","filterItems","onFilter","useFilter","filterData","sideFilter","statusFilter","time","dateFilter","symbolFilter","setStatus","setSide","defaultRange","setFilterDays","setDateRange","days","filter","newDateRange","diffDays","dateRangeFilter","PositionHistoryType","showAlert","ClosedQty","closedQty","MaxClosedQty","maxClosedQty","AvgClosed","OpenTime","ClosedTime","PositionHistoryCell","usePositionHistoryCellScript","PositionHistoryCellWidget","PositionHistory","dayLabel","MobilePositionHistory","PositionHistoryWidget","MobilePositionHistoryWidget","classNames","useLiquidationColumn","FormattedText","abs_liquidation_fee","Price","LiquidationFee","LiquidationCell","Cell","useLiquidationCellScript","LiquidationCellWidget","Liquidation","MobileLiquidation","useLiquidationScript","enableLoadMore","page","pageSize","parsePagination","meta","useLiquidation","ordersResponse","generateKeyFun","size","search","LiquidationWidget","MobileLiquidationWidget","MarketCloseConfirmID"],"mappings":"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","sourcesContent":["import { registerSimpleDialog } from \"@orderly.network/ui\";\nimport { MarketCloseConfirm } from \"./components/positions/desktop/closeButton\";\n\nexport { FundingFeeHistoryUI } from \"./components/fundingFeeHistory/fundingFeeHistory.ui\";\nexport { FundingFeeButton } from \"./components/fundingFeeHistory/fundingFeeButton\";\n\nexport {\n PositionsWidget,\n MobilePositionsWidget,\n CombinePositionsWidget,\n} from \"./components/positions/positions.widget\";\n\nexport type { PositionsProps } from \"./types/types\";\n\nexport const MarketCloseConfirmID = \"MarketCloseConfirmID\";\n\nregisterSimpleDialog(MarketCloseConfirmID, MarketCloseConfirm, {\n size: \"md\",\n closable: false,\n});\n\nexport * from \"./components/positionHistory\";\nexport * from \"./components/liquidation\";\n","import React, { FC, useMemo, useState } from \"react\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@orderly.network/react-app\";\nimport { OrderEntity, OrderSide, OrderType } from \"@orderly.network/types\";\nimport {\n Button,\n toast,\n Text,\n CloseIcon,\n Flex,\n Divider,\n Badge,\n SimpleDialog,\n ThrottledButton,\n Box,\n} from \"@orderly.network/ui\";\nimport { commify, commifyOptional, Decimal } from \"@orderly.network/utils\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\n\nexport const CloseButton: React.FC = () => {\n const [open, setOpen] = useState(false);\n const {\n onSubmit,\n price,\n quantity,\n closeOrderData,\n type,\n submitting,\n quoteDp,\n errors,\n } = usePositionsRowContext();\n const { base } = useSymbolContext();\n const [orderConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n\n const { t } = useTranslation();\n const { parseErrorMsg } = useOrderEntryFormErrorMsg(errors);\n\n const onConfirm = () => {\n return onSubmit().then(() => {\n setOpen(false);\n });\n };\n\n const onClose = () => {\n setOpen(false);\n };\n\n const disabled = useMemo(() => {\n if (type === OrderType.MARKET) {\n if (!quantity) {\n return true;\n }\n return false;\n }\n\n return !price || !quantity;\n }, [price, quantity, type]);\n\n return (\n <>\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"secondary\"\n disabled={disabled || submitting}\n loading={submitting}\n onClick={(e) => {\n e.stopPropagation();\n const quantityMsg = parseErrorMsg(\"order_quantity\");\n const priceMsg = parseErrorMsg(\"order_price\");\n const msg = quantityMsg || priceMsg;\n if (msg) {\n toast.error(msg);\n return;\n }\n if (!orderConfirm) {\n onSubmit();\n return;\n }\n setOpen(true);\n }}\n >\n {t(\"positions.column.close\")}\n </Button>\n <SimpleDialog open={open} onOpenChange={setOpen} size=\"sm\">\n {type === OrderType.MARKET ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n onClose={onClose}\n onConfirm={onConfirm}\n submitting={submitting}\n classNames={{\n root: \"oui-items-start\",\n }}\n hideCloseIcon\n />\n ) : (\n <LimitConfirmDialog\n base={base}\n quantity={quantity}\n price={price}\n onClose={onClose}\n onConfirm={onConfirm}\n submitting={submitting}\n quoteDp={quoteDp}\n order={closeOrderData}\n hideCloseIcon\n />\n )}\n </SimpleDialog>\n </>\n );\n};\n\nexport const ConfirmHeader: FC<{\n onClose?: () => void;\n title: string;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { hideCloseIcon = false } = props;\n return (\n <div className=\"oui-pb-3 oui-border-b oui-border-line-4 oui-relative oui-w-full\">\n <Text size={\"base\"}>{props.title}</Text>\n {!hideCloseIcon && (\n <button\n onClick={props.onClose}\n className=\"oui-absolute oui-right-0 oui-top-0 oui-text-base-contrast-54 hover:oui-text-base-contrast-80 oui-p-2\"\n >\n <CloseIcon size={18} color=\"white\" />\n </button>\n )}\n </div>\n );\n};\n\nexport const ConfirmFooter: FC<{\n onConfirm?: () => Promise<any>;\n onCancel?: () => void;\n submitting?: boolean;\n}> = ({ onCancel, onConfirm, submitting }) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n id=\"oui-positions-confirm-footer\"\n gap={2}\n width={\"100%\"}\n className=\"oui-mt-3 oui-pb-1\"\n >\n <Button\n id=\"oui-positions-confirm-footer-cancel-button\"\n color={\"secondary\"}\n fullWidth\n onClick={onCancel}\n size=\"md\"\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton\n id=\"oui-positions-confirm-footer-confirm-button\"\n onClick={onConfirm}\n fullWidth\n loading={submitting}\n size=\"md\"\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n );\n};\n\nexport const OrderDetail = (props: {\n quantity: any;\n price: any;\n side: OrderSide;\n quoteDp: number;\n className?: string;\n}) => {\n const { quantity, price, quoteDp, side } = props;\n const { t } = useTranslation();\n\n const total = useMemo(() => {\n if (price && quantity) {\n return new Decimal(price)\n .mul(quantity)\n .toFixed(quoteDp, Decimal.ROUND_DOWN);\n }\n return \"--\";\n }, [price, quantity]);\n\n return (\n <Flex\n direction={\"column\"}\n gap={1}\n width={\"100%\"}\n className=\"oui-text-sm oui-text-base-contrast-54\"\n py={5}\n >\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.qty\")}</Text>\n <Text color={side === OrderSide.BUY ? \"success\" : \"danger\"}>\n {quantity}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.price\")}</Text>\n <Text.formatted\n intensity={98}\n suffix={<Text intensity={54}>USDC</Text>}\n >\n {price}\n </Text.formatted>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.notional\")}</Text>\n <Text.formatted\n intensity={98}\n suffix={<Text intensity={54}>USDC</Text>}\n >\n {total}\n </Text.formatted>\n </Flex>\n </Flex>\n );\n};\n\nexport const MarketCloseConfirm: FC<{\n base?: string;\n quantity?: string;\n onClose?: () => void;\n close?: () => void;\n onConfirm?: () => Promise<any>;\n submitting?: boolean;\n hideCloseIcon?: boolean;\n classNames?: {\n root?: string;\n };\n}> = (props) => {\n const { t } = useTranslation();\n\n const onCancel = () => {\n const func = props?.onClose ?? props.close;\n func?.();\n };\n return (\n <Flex direction={\"column\"} className={props.classNames?.root}>\n <ConfirmHeader\n onClose={onCancel}\n title={t(\"positions.marketClose\")}\n hideCloseIcon={props.hideCloseIcon}\n />\n <Text intensity={54} size=\"sm\" className=\"oui-my-5\">\n {t(\"positions.marketClose.description\", {\n quantity: commifyOptional(props.quantity),\n base: props.base,\n })}\n </Text>\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={async () => {\n await props.onConfirm?.();\n onCancel();\n }}\n submitting={props.submitting}\n />\n </Flex>\n );\n};\n\nexport const LimitConfirmDialog: FC<{\n base: string;\n quantity: string;\n price: string;\n onClose?: () => void;\n onConfirm: () => Promise<any>;\n order: OrderEntity;\n submitting: boolean;\n quoteDp?: number;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { order, quoteDp, quantity, price, submitting } = props;\n const { side } = order;\n const { t } = useTranslation();\n\n const onCancel = () => {\n props.onClose?.();\n };\n\n return (\n <>\n <ConfirmHeader\n onClose={onCancel}\n title={t(\"positions.limitClose\")}\n hideCloseIcon={props.hideCloseIcon}\n />\n <Box mt={5}>\n <Text intensity={54} size=\"sm\">\n {t(\"positions.limitClose.description\", {\n quantity: commify(props.quantity),\n base: props.base,\n })}\n </Text>\n </Box>\n\n <Flex gap={2} mb={4} mt={5} justify={\"between\"}>\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"base\"\n showIcon\n >\n {order.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n {t(\"orderEntry.orderType.limit\")}\n </Badge>\n <Badge\n color={side === OrderSide.BUY ? \"success\" : \"danger\"}\n size=\"xs\"\n >\n {side === OrderSide.BUY ? t(\"common.buy\") : t(\"common.sell\")}\n </Badge>\n </Flex>\n </Flex>\n\n <Divider className=\"oui-w-full\" />\n\n <OrderDetail\n className=\"oui-text-sm\"\n price={price}\n quantity={quantity}\n side={order.side}\n quoteDp={quoteDp ?? 2}\n />\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={props.onConfirm}\n submitting={props.submitting}\n />\n </>\n );\n};\n","import { FC, PropsWithChildren, createContext, useContext } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\n\nexport interface SymbolContextState {\n base_dp: number;\n quote_dp: number;\n base_tick: number;\n quote_tick: number;\n base: string;\n quote: string;\n symbol: string;\n origin: API.SymbolExt;\n quote_min: number;\n quote_max: number;\n}\n\nexport const SymbolContext = createContext({} as SymbolContextState);\n\nexport const useSymbolContext = () => {\n return useContext(SymbolContext);\n};\n\ninterface FormatterProviderProps {\n symbol: string;\n}\n\nexport const SymbolProvider: FC<PropsWithChildren<FormatterProviderProps>> = (\n props,\n) => {\n const symbolInfo = useSymbolsInfo()[props.symbol];\n return (\n <SymbolContext.Provider\n value={{\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n base_tick: symbolInfo(\"base_tick\"),\n quote_tick: symbolInfo(\"quote_tick\"),\n base: symbolInfo(\"base\"),\n quote: symbolInfo(\"quote\"),\n symbol: props.symbol,\n origin: symbolInfo(),\n quote_max: symbolInfo(\"quote_max\"),\n quote_min: symbolInfo(\"quote_min\"),\n }}\n >\n {props.children}\n </SymbolContext.Provider>\n );\n};\n","import {\n FC,\n PropsWithChildren,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport {\n KeyedMutator,\n usePositionClose,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, OrderEntity, OrderSide, OrderType } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\n\nexport interface PositionsRowContextState {\n quantity: string;\n price: string;\n type: OrderType;\n side: OrderSide;\n position: API.PositionExt | API.PositionTPSLExt;\n updateQuantity: (value: string) => void;\n updatePriceChange: (value: string) => void;\n\n updateOrderType: (value: OrderType, price?: string) => void;\n\n closeOrderData: any;\n\n onSubmit: () => Promise<any>;\n submitting: boolean;\n tpslOrder?: API.AlgoOrder;\n quoteDp?: number;\n baseDp?: number;\n baseTick?: number;\n errors: any | undefined;\n}\n\nexport const PositionsRowContext = createContext(\n {} as PositionsRowContextState,\n);\n\nexport const usePositionsRowContext = () => {\n return useContext(PositionsRowContext);\n};\n\ntype PositionsRowProviderProps = PropsWithChildren<{\n position: API.PositionExt | API.PositionTPSLExt;\n mutatePositions?: KeyedMutator<API.PositionExt[]>;\n}>;\n\nexport const PositionsRowProvider: FC<PositionsRowProviderProps> = (props) => {\n const { position } = props;\n const { t } = useTranslation();\n const [quantity, setQuantity] = useState<string>(\n Math.abs(position.position_qty).toString(),\n );\n const [price, setPrice] = useState<string>(\"\");\n const [type, setType] = useState<OrderType>(OrderType.MARKET);\n\n useEffect(() => {\n setQuantity(Math.abs(position.position_qty).toString());\n }, [position.position_qty]);\n\n const symbol = position.symbol;\n const symbolsInfo = useSymbolsInfo();\n const symbolInfo = symbolsInfo?.[symbol];\n const quoteDp = symbolInfo(\"quote_dp\");\n const baseDp = symbolInfo(\"base_dp\");\n const baseTick = symbolInfo(\"base_tick\");\n\n const {\n side,\n closeOrderData,\n submit,\n isMutating: submitting,\n errors,\n calculate,\n } = usePositionClose({\n position,\n order: {\n type,\n quantity,\n price,\n },\n });\n\n const updateQuantity = useCallback(\n (value: string) => {\n const newValues = calculate(\n {},\n \"order_quantity\",\n value,\n position.mark_price,\n symbolInfo(),\n ) as OrderEntity;\n setQuantity(newValues[\"order_quantity\"] as string);\n },\n [calculate, symbolsInfo, position.mark_price],\n );\n\n const updatePriceChange = useCallback(\n (value: string) => {\n const newValues = calculate(\n {},\n \"order_price\",\n value,\n position.mark_price,\n symbolInfo(),\n ) as OrderEntity;\n setPrice(newValues[\"order_price\"] as string);\n },\n [calculate, symbolsInfo, position.mark_price],\n );\n\n const updateOrderType = useCallback((type: OrderType, price?: string) => {\n setType(type);\n if (type === OrderType.LIMIT) {\n if (!price) {\n throw new Error(t(\"orderEntry.orderPrice.error.required\"));\n }\n setPrice(price);\n } else {\n setPrice(\"\");\n }\n }, []);\n\n const onSubmit = useCallback(async () => {\n if (Number(quantity) > symbolInfo(\"base_max\")) {\n toast.error(\n <div>\n {t(\"positions.limitClose.errors.exceed.title\")}\n <br />\n <div className=\"oui-break-normal\">\n {t(\"positions.limitClose.errors.exceed.description\", {\n quantity: quantity,\n symbol: transSymbolformString(symbol, \"base\"),\n maxQuantity: symbolInfo(\"base_max\"),\n })}\n </div>\n </div>,\n );\n return;\n }\n\n return submit()\n .then((res) => {\n if (res.success) {\n props.mutatePositions?.();\n return res;\n }\n\n if (res.message) {\n toast.error(res.message);\n }\n\n throw true;\n })\n .catch((err) => {\n if (err.message) {\n toast.error(err.message);\n }\n return false;\n });\n }, [submit]);\n\n return (\n <PositionsRowContext.Provider\n value={{\n quantity,\n price,\n type,\n side,\n position,\n updatePriceChange,\n updateQuantity,\n updateOrderType,\n tpslOrder: (position as API.PositionTPSLExt).algo_order,\n onSubmit,\n submitting,\n closeOrderData,\n quoteDp,\n baseDp,\n baseTick,\n errors,\n }}\n >\n {props.children}\n </PositionsRowContext.Provider>\n );\n};\n\nfunction transSymbolformString(symbol: string, formatString = \"base\") {\n const arr = symbol.split(\"_\");\n const type = arr[0];\n const base = arr[1];\n const quote = arr[2];\n\n return (formatString ?? \"base-quote\")\n .replace(\"type\", type)\n .replace(\"base\", base)\n .replace(\"quote\", quote);\n}\n","import { FC, useCallback, useMemo } from \"react\";\nimport { usePrivateInfiniteQuery } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Grid,\n Statistic,\n DataTable,\n Text,\n ListView,\n Flex,\n useScreen,\n cn,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { EndReachedBox } from \"./endReachedBox\";\n\ntype FundingFeeHistory = {\n created_time: number;\n funding_fee: number;\n funding_rate: number;\n mark_price: number;\n payment_type: \"Pay\" | \"Receive\";\n status: \"Accrued\" | \"Settled\";\n symbol: string;\n updated_time: number;\n};\n\nexport const FundingFeeHistoryUI: FC<{\n total: number;\n symbol: string;\n start_t: string;\n end_t: string;\n}> = ({ total, symbol, start_t, end_t }) => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n const { isLoading, data, setSize } =\n usePrivateInfiniteQuery<FundingFeeHistory>(\n (pageIndex, previousPageData) => {\n if (previousPageData && !previousPageData.length) return null;\n return `/v1/funding_fee/history?page=${pageIndex}&symbol=${symbol}&start_t=${start_t}&end_t=${end_t}`;\n },\n {\n revalidateFirstPage: false,\n },\n );\n\n const loadMore = useCallback(() => {\n setSize((prev) => {\n // console.log(\">>>>>>>>loadMore\", prev);\n return prev + 1;\n });\n }, [setSize]);\n\n const flattenData = useMemo(() => {\n if (!Array.isArray(data)) return [];\n return data.flat().map((item) => {\n return {\n ...item,\n funding_fee: -item.funding_fee,\n };\n });\n }, [data]);\n\n const listView = useMemo(() => {\n if (isMobile) {\n return (\n <HistoryDataListViewSimple\n data={flattenData ?? []}\n isLoading={isLoading}\n loadMore={loadMore}\n />\n );\n }\n return (\n <HistoryDataListView\n data={flattenData ?? []}\n isLoading={isLoading}\n loadMore={loadMore}\n />\n );\n }, [isMobile, flattenData, isLoading]);\n\n return (\n <div>\n <Grid\n cols={2}\n gapX={3}\n className=\"oui-sticky oui-top-0 oui-z-10 oui-bg-base-8 oui-py-4\"\n >\n <div className=\"oui-rounded-lg oui-border oui-border-line-6 oui-bg-base-9 oui-p-3\">\n {/* <Statistic label={\"Instrument\"} /> */}\n <Flex direction={\"column\"} gap={1} itemAlign={\"start\"}>\n <span className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"common.symbol\")}\n </span>\n <Text.formatted\n rule=\"symbol\"\n className=\"oui-font-semibold\"\n intensity={98}\n >\n {symbol}\n </Text.formatted>\n </Flex>\n </div>\n <div className=\"oui-rounded-lg oui-border oui-border-line-6 oui-bg-base-9 oui-p-3\">\n <Statistic\n label={`${t(\"funding.fundingFee\")} (USDC)`}\n valueProps={{\n ignoreDP: true,\n coloring: true,\n showIdentifier: true,\n }}\n >\n {total}\n </Statistic>\n </div>\n </Grid>\n {listView}\n </div>\n );\n};\n\ntype ListProps = {\n isLoading: boolean;\n data: any[];\n loadMore: () => void;\n};\n\nconst HistoryDataListView: FC<ListProps> = ({ isLoading, data, loadMore }) => {\n const { t } = useTranslation();\n const columns = useMemo(() => {\n return [\n {\n title: t(\"common.time\"),\n dataIndex: \"created_time\",\n width: 120,\n render: (value: string) => {\n return <Text.formatted rule=\"date\">{value}</Text.formatted>;\n },\n },\n {\n title: t(\"funding.fundingRate\"),\n dataIndex: \"funding_rate\",\n formatter: (value: string) => new Decimal(value).mul(100).toString(),\n render: (value: string) => {\n return <span>{`${value}%`}</span>;\n },\n },\n {\n title: t(\"funding.paymentType\"),\n dataIndex: \"payment_type\",\n formatter: (value: string) => {\n return value === \"Pay\"\n ? t(\"funding.paymentType.paid\")\n : t(\"funding.paymentType.received\");\n },\n render: (value) => <span>{value}</span>,\n },\n {\n title: `${t(\"funding.fundingFee\")} (USDC)`,\n dataIndex: \"funding_fee\",\n render: (value: string) => {\n return (\n <Text.numeral rule=\"price\" coloring showIdentifier ignoreDP>\n {value}\n </Text.numeral>\n );\n },\n },\n ];\n }, [t]);\n\n return (\n <div className=\"oui-h-[calc(80vh_-_132px_-_8px)] oui-overflow-y-auto\">\n <EndReachedBox onEndReached={loadMore}>\n <DataTable\n classNames={{\n root: cn(\"oui-h-auto oui-bg-base-8 oui-text-sm\"),\n }}\n columns={columns}\n dataSource={data ?? []}\n loading={isLoading}\n />\n </EndReachedBox>\n </div>\n );\n};\n\nconst HistoryDataListViewSimple: FC<ListProps> = ({\n data,\n isLoading,\n loadMore,\n}) => {\n const renderItem = useCallback((item: FundingFeeHistory) => {\n return <FundingFeeItem item={item} />;\n }, []);\n return (\n <div className=\"oui-h-[calc(80vh_-_104px)] oui-overflow-y-auto\">\n <ListView\n dataSource={data}\n renderItem={renderItem}\n isLoading={isLoading}\n contentClassName=\"oui-space-y-0\"\n loadMore={loadMore}\n />\n </div>\n );\n};\n\nconst FundingFeeItem: FC<{\n item: any;\n}> = ({ item }) => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-flex-col oui-space-y-2 oui-border-t oui-border-line-6 oui-py-2\">\n <Flex justify={\"between\"}>\n <Statistic\n label={t(\"funding.fundingRate\")}\n classNames={{\n label: \"oui-text-2xs\",\n }}\n valueProps={{\n ignoreDP: true,\n rule: \"percentages\",\n className: \"oui-text-xs\",\n }}\n >\n {item.funding_rate}\n </Statistic>\n <Statistic\n label={t(\"common.amount\")}\n className=\"oui-items-end\"\n classNames={{\n label: \"oui-text-2xs\",\n }}\n valueProps={{\n ignoreDP: true,\n coloring: true,\n as: \"div\",\n className: \"oui-text-xs\",\n showIdentifier: true,\n }}\n >\n {item.funding_fee}\n </Statistic>\n </Flex>\n <Flex justify={\"between\"}>\n <Text.formatted\n rule=\"date\"\n className=\"oui-text-base-contrast-36\"\n size=\"2xs\"\n >\n {item.created_time}\n </Text.formatted>\n <Text size=\"sm\" intensity={80}>\n {item.payment_type === \"Pay\"\n ? t(\"funding.paymentType.paid\")\n : t(\"funding.paymentType.received\")}\n </Text>\n </Flex>\n </div>\n );\n};\n","import { FC, useRef, type PropsWithChildren } from \"react\";\nimport { useEndReached } from \"./useEndReached\";\n\nexport interface EndReachedBoxProps {\n onEndReached?: () => void;\n // className?: string;\n}\n\nexport const EndReachedBox: FC<PropsWithChildren<EndReachedBoxProps>> = (\n props,\n) => {\n const sentinelRef = useRef<HTMLDivElement | null>(null);\n const { onEndReached } = props;\n\n useEndReached(sentinelRef, () => {\n onEndReached?.();\n });\n\n return (\n <>\n {props.children}\n <div\n ref={sentinelRef}\n className=\"oui-relative oui-invisible oui-h-[25px] oui-bg-red-400 oui-top-[-300px]\"\n />\n </>\n );\n};\n","import { useEffect, useRef, MutableRefObject } from \"react\";\n\n/**\n * Listen for the specified element to scroll to the bottom\n */\nexport function useEndReached(\n sentinelRef: MutableRefObject<HTMLDivElement | null>,\n onEndReached?: () => void,\n) {\n const observer = useRef<IntersectionObserver>();\n const cb = useRef(onEndReached);\n\n cb.current = onEndReached;\n\n useEffect(() => {\n const options: IntersectionObserverInit = {\n root: null,\n rootMargin: \"0px\",\n threshold: 0,\n };\n\n const handleObserver = (entries: IntersectionObserverEntry[]) => {\n console.log(\">>>>>>>>handleObserver\", entries);\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n cb.current?.();\n }\n });\n };\n\n observer.current = new IntersectionObserver(handleObserver, options);\n\n return () => {\n // console.log(\"------->disconnect\");\n observer.current?.disconnect();\n };\n }, []);\n\n useEffect(() => {\n observer.current?.observe(sentinelRef.current!);\n }, []);\n}\n","import { FC } from \"react\";\nimport { useBoolean } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n SimpleDialog,\n SimpleSheet,\n Text,\n useScreen,\n} from \"@orderly.network/ui\";\nimport { FundingFeeHistoryUI } from \"./fundingFeeHistory.ui\";\n\nexport const FundingFeeButton: FC<{\n fee: number;\n symbol: string;\n start_t: string;\n end_t: string;\n}> = ({ fee, symbol, start_t, end_t }) => {\n const { t } = useTranslation();\n const [isOpen, { setTrue, setFalse }] = useBoolean(false);\n const { isMobile } = useScreen();\n\n return (\n <>\n <button onClick={setTrue}>\n <Text.numeral\n rule=\"price\"\n coloring\n showIdentifier\n ignoreDP\n className=\"oui-border-b oui-border-line-16 oui-border-dashed oui-py-0.5\"\n >\n {fee}\n </Text.numeral>\n </button>\n {isMobile ? (\n <SimpleSheet\n open={isOpen}\n onOpenChange={setFalse}\n title={t(\"funding.fundingFee\")}\n classNames={{\n body: \"oui-max-h-[80vh] oui-py-0\",\n }}\n >\n <FundingFeeHistoryUI\n total={fee}\n symbol={symbol}\n start_t={start_t}\n end_t={end_t}\n />\n </SimpleSheet>\n ) : (\n <SimpleDialog\n open={isOpen}\n onOpenChange={setFalse}\n title={t(\"funding.fundingFee\")}\n classNames={{\n content: \"lg:oui-max-w-[640px]\",\n body: \"oui-max-h-[80vh] oui-bg-base-8 lg:oui-py-0\",\n }}\n >\n <FundingFeeHistoryUI\n total={fee}\n symbol={symbol}\n start_t={start_t}\n end_t={end_t}\n />\n </SimpleDialog>\n )}\n </>\n );\n};\n","import { useEffect, useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport {\n SubAccount,\n useAccount,\n usePositionStream,\n usePrivateQuery,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { i18n } from \"@orderly.network/i18n\";\nimport { positions, account as _account } from \"@orderly.network/perp\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport type { API } from \"@orderly.network/types\";\nimport { formatAddress, usePagination } from \"@orderly.network/ui\";\nimport type { PositionsProps } from \"../../types/types\";\nimport { useSubAccountQuery } from \"./hooks/useSubAccountQuery\";\n\nexport enum AccountType {\n ALL = \"All accounts\",\n MAIN = \"Main accounts\",\n}\n\nexport const useCombinePositionsScript = (props: PositionsProps) => {\n const {\n symbol,\n calcMode,\n includedPendingOrder,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange,\n selectedAccount,\n } = props;\n\n const { pagination, setPage } = usePagination({ pageSize: 50 });\n\n useEffect(() => {\n setPage(1);\n }, [symbol]);\n\n const symbolsInfo = useSymbolsInfo();\n\n const { state } = useAccount();\n\n const [oldPositions, , { isLoading }] = usePositionStream(symbol, {\n calcMode,\n includedPendingOrder,\n });\n\n // need to get sub account Positions info to calculate portfolio and positions\n const {\n data: newPositions = [],\n isLoading: isPositionLoading,\n mutate: mutatePositions,\n } = usePrivateQuery<API.PositionExt[]>(\"/v1/client/aggregate/positions\", {\n // formatter: (data) => data,\n errorRetryCount: 3,\n });\n\n // need to get sub account info to calculate portfolio and positions\n const { data: accountInfo = [], isLoading: isAccountInfoLoading } =\n useSubAccountQuery<API.AccountInfo[]>(\"/v1/client/info\", {\n accountId: newPositions.map((item) => item.account_id!),\n revalidateOnFocus: false,\n });\n\n const processPositions = produce<API.PositionTPSLExt[]>(\n newPositions.filter((acc) => acc.account_id !== state.mainAccountId),\n (draft) => {\n for (const item of draft) {\n const info = symbolsInfo[item.symbol];\n const notional = positions.notional(item.position_qty, item.mark_price);\n const account = accountInfo.find(\n (acc) => acc.account_id === item.account_id,\n );\n const MMR = positions.MMR({\n baseMMR: info?.(\"base_mmr\"),\n baseIMR: info?.(\"base_imr\"),\n IMRFactor: account?.imr_factor[item.symbol] ?? 0,\n positionNotional: notional,\n IMR_factor_power: 4 / 5,\n });\n const mm = positions.maintenanceMargin({\n positionQty: item.position_qty,\n markPrice: item.mark_price,\n MMR: MMR,\n });\n const unrealPnl = positions.unrealizedPnL({\n qty: item.position_qty,\n openPrice: item?.average_open_price,\n // markPrice: unRealizedPrice,\n markPrice: item.mark_price,\n });\n const imr = _account.IMR({\n maxLeverage: account?.max_leverage ?? 1,\n baseIMR: info?.(\"base_imr\"),\n IMR_Factor: account?.imr_factor[item.symbol] ?? 0,\n positionNotional: notional,\n ordersNotional: 0,\n IMR_factor_power: 4 / 5,\n });\n const unrealPnlROI = positions.unrealizedPnLROI({\n positionQty: item.position_qty,\n openPrice: item.average_open_price,\n IMR: imr,\n unrealizedPnL: unrealPnl,\n });\n let unrealPnl_index = 0;\n let unrealPnlROI_index = 0;\n if (item.index_price) {\n unrealPnl_index = positions.unrealizedPnL({\n qty: item.position_qty,\n openPrice: item?.average_open_price,\n // markPrice: unRealizedPrice,\n markPrice: item.index_price,\n });\n unrealPnlROI_index = positions.unrealizedPnLROI({\n positionQty: item.position_qty,\n openPrice: item.average_open_price,\n IMR: imr,\n unrealizedPnL: unrealPnl_index,\n });\n }\n item.mmr = MMR;\n item.mm = mm;\n item.notional = notional;\n item.unrealized_pnl = unrealPnl;\n item.unrealized_pnl_ROI = unrealPnlROI;\n item.unrealized_pnl_ROI_index = unrealPnlROI_index;\n }\n },\n );\n\n const dataSource =\n useDataTap(\n [...oldPositions?.rows, ...processPositions].filter(\n (acc) => acc.position_qty !== 0,\n ),\n ) ?? [];\n\n const filtered = useMemo(() => {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return dataSource;\n }\n return dataSource.filter((item) => {\n if (selectedAccount === AccountType.MAIN) {\n return item.account_id === state.mainAccountId || !item.account_id;\n } else {\n return item.account_id === selectedAccount;\n }\n });\n }, [dataSource, selectedAccount, state.mainAccountId]);\n\n const groupDataSource = useMemo(() => {\n return groupDataByAccount(filtered, {\n mainAccountId: state.mainAccountId,\n subAccounts: state.subAccounts,\n });\n }, [filtered, state.mainAccountId, state.subAccounts]);\n\n const mergedLoading = useMemo<boolean>(() => {\n return isLoading || isPositionLoading || isAccountInfoLoading;\n }, [isLoading, isPositionLoading, isAccountInfoLoading]);\n\n return {\n tableData: groupDataSource,\n isLoading: mergedLoading,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n symbol,\n onSymbolChange,\n pagination,\n mutatePositions,\n };\n};\n\nexport type CombinePositionsState = ReturnType<\n typeof useCombinePositionsScript\n>;\n\nexport const groupDataByAccount = (\n data: API.PositionExt[],\n options: {\n mainAccountId?: string;\n subAccounts?: SubAccount[];\n },\n) => {\n const { mainAccountId = \"\", subAccounts = [] } = options;\n\n const map = new Map<\n PropertyKey,\n {\n id: string;\n description: string;\n children: API.PositionExt[];\n }\n >();\n\n for (const item of data) {\n // if account_id is not set, as a main account\n const accountId = item.account_id || mainAccountId;\n const findSubAccount = subAccounts.find((acc) => acc.id === accountId);\n if (map.has(accountId)) {\n map.get(accountId)?.children?.push(item);\n } else {\n map.set(accountId, {\n id: accountId,\n description:\n accountId === mainAccountId\n ? i18n.t(\"common.mainAccount\")\n : findSubAccount?.description ||\n formatAddress(findSubAccount?.id || \"\"),\n children: [item],\n });\n }\n }\n return {\n expanded: Array.from(map.keys()),\n dataSource: Array.from(map.values()),\n };\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n type SWRConfiguration,\n type SWRHook,\n type SWRResponse,\n type Middleware,\n useAccount,\n useSWR,\n fetcher,\n useConfig,\n useAccountInstance,\n} from \"@orderly.network/hooks\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { getTimestamp } from \"@orderly.network/utils\";\n\nexport type QueryOptions<T> = SWRConfiguration & {\n formatter?: (data: any) => T;\n accountId?: string | string[];\n};\n\nconst signatureMiddleware = (\n account: ReturnType<typeof useAccountInstance>,\n accountId?: string | string[],\n): Middleware => {\n const apiBaseUrl = useConfig(\"apiBaseUrl\");\n // @ts-ignore\n return (useSWRNext: SWRHook) => {\n return (key, fetcher, config) => {\n try {\n const extendedFetcher = async (args: any) => {\n const url = Array.isArray(args) ? args[0] : args;\n const fullUrl = `${apiBaseUrl}${url}`;\n const signer = account.signer;\n const payload: MessageFactor = { method: \"GET\", url };\n const signature = await signer.sign(payload, getTimestamp());\n const ids = Array.isArray(accountId) ? accountId : [accountId];\n return Promise.all(\n ids.map((id) => {\n // @ts-ignore\n return fetcher(fullUrl, {\n headers: {\n ...signature,\n \"orderly-account-id\": id,\n },\n });\n }),\n );\n };\n // @ts-ignore\n return useSWRNext(key, extendedFetcher, config);\n } catch (e) {\n throw e;\n }\n };\n };\n};\n\nexport const useSubAccountQuery = <T>(\n query: Parameters<SWRHook>[0],\n options?: QueryOptions<T>,\n): SWRResponse<T> => {\n const { formatter, accountId, ...swrOptions } = options || {};\n const { state, account } = useAccount();\n const middleware = Array.isArray(options?.use) ? (options?.use ?? []) : [];\n\n const ids = Array.isArray(accountId) ? accountId : [accountId];\n\n const shouldFetch =\n ids.filter(Boolean).length &&\n (state.status >= AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected);\n\n return useSWR<T>(\n () => (shouldFetch ? [query, ids] : null),\n (url: string, init: RequestInit) => {\n return fetcher(url, init, { formatter });\n },\n {\n ...swrOptions,\n use: [...middleware, signatureMiddleware(account, ids as string[])],\n onError: () => {},\n },\n );\n};\n\nexport type MessageFactor = {\n url: string;\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\n data?: any;\n};\n","import React from \"react\";\nimport { usePositionStream } from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport type { PositionsProps } from \"../../types/types\";\n\nexport const usePositionsScript = (props: PositionsProps) => {\n const {\n symbol,\n calcMode,\n includedPendingOrder,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange,\n } = props;\n // const [showAllSymbol] = useLocalStorage(\n // \"showAllSymbol\",\n // true\n // );\n const { pagination, setPage } = usePagination({ pageSize: 50 });\n\n React.useEffect(() => {\n setPage(1);\n }, [symbol]);\n\n const [data, , { isLoading }] = usePositionStream(symbol, {\n calcMode,\n includedPendingOrder,\n });\n\n const dataSource = useDataTap(data?.rows, { fallbackData: [] }) ?? undefined;\n\n return {\n dataSource,\n isLoading, // will be use isLoading when usePositionStream support\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n symbol,\n onSymbolChange,\n pagination,\n };\n};\n\nexport type PositionsState = ReturnType<typeof usePositionsScript>;\n","import React from \"react\";\nimport type { API } from \"@orderly.network/types\";\nimport { Badge, formatAddress, ListView } from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { SymbolProvider } from \"../../providers/symbolProvider\";\nimport type { PositionsProps } from \"../../types/types\";\nimport type { CombinePositionsState } from \"./combinePositions.script\";\nimport { PositionsRowProvider } from \"./desktop/positionRowContext\";\nimport { useColumn } from \"./desktop/useColumn\";\nimport { PositionCellWidget } from \"./mobile/positionCell\";\nimport type { PositionsState } from \"./positions.script\";\n\nexport const Positions: React.FC<Readonly<PositionsState>> = (props) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n pagination,\n isLoading,\n dataSource,\n onSymbolChange,\n } = props;\n\n const columns = useColumn({\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange: onSymbolChange,\n });\n\n return (\n <AuthGuardDataTable<API.PositionTPSLExt>\n loading={isLoading}\n id=\"oui-desktop-positions-content\"\n columns={columns}\n bordered\n dataSource={dataSource}\n generatedRowKey={(record: any) => record.symbol}\n renderRowContainer={(record: any, index: number, children: any) => {\n return (\n <SymbolProvider symbol={record.symbol}>\n <PositionsRowProvider position={record}>\n {children}\n </PositionsRowProvider>\n </SymbolProvider>\n );\n }}\n manualPagination={false}\n pagination={pagination}\n testIds={{\n body: \"oui-testid-dataList-position-tab-body\",\n }}\n />\n );\n};\n\nexport const MobilePositions: React.FC<\n Readonly<PositionsState & PositionsProps>\n> = (props) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n dataSource,\n onSymbolChange,\n } = props;\n return (\n <ListView\n className=\"oui-hide-scrollbar oui-w-full oui-space-y-0 oui-overflow-y-hidden\"\n contentClassName=\"!oui-space-y-1\"\n dataSource={dataSource}\n renderItem={(item, index) => (\n <SymbolProvider symbol={item.symbol}>\n <PositionsRowProvider position={item}>\n <PositionCellWidget\n item={item}\n index={index}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n sharePnLConfig={sharePnLConfig}\n onSymbolChange={onSymbolChange}\n />\n </PositionsRowProvider>\n </SymbolProvider>\n )}\n />\n );\n};\n\nexport const CombinePositions: React.FC<Readonly<CombinePositionsState>> = (\n props,\n) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n pagination,\n isLoading,\n tableData,\n onSymbolChange,\n mutatePositions,\n } = props;\n\n const columns = useColumn({\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange: onSymbolChange,\n });\n\n const { dataSource = [] } = tableData;\n\n return (\n <AuthGuardDataTable<any>\n bordered\n loading={isLoading}\n id=\"oui-desktop-positions-content\"\n columns={columns}\n dataSource={dataSource}\n expanded\n getSubRows={(row) => row.children}\n generatedRowKey={(record) => record.id}\n onCell={(column, record) => {\n const isGroup = (record.children ?? []).length > 0;\n if (isGroup) {\n return {\n children:\n column.id === \"symbol\" ? (\n <Badge color=\"neutral\" size=\"xs\">\n {record?.description || formatAddress(record?.id)}\n </Badge>\n ) : null,\n };\n }\n }}\n renderRowContainer={(record: any, index: number, children: any) => {\n if (record.symbol) {\n return (\n <SymbolProvider symbol={record.symbol}>\n <PositionsRowProvider\n position={record}\n mutatePositions={mutatePositions}\n >\n {children}\n </PositionsRowProvider>\n </SymbolProvider>\n );\n }\n return children;\n }}\n manualPagination={false}\n pagination={pagination}\n testIds={{\n body: \"oui-testid-dataList-position-tab-body\",\n }}\n />\n );\n};\n","import { useMemo, useRef } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Box,\n cn,\n Divider,\n Flex,\n HoverCard,\n Column,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { SharePnLOptions, SharePnLDialogId } from \"@orderly.network/ui-share\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FundingFeeButton } from \"../../fundingFeeHistory/fundingFeeButton\";\nimport { CloseButton } from \"./closeButton\";\nimport { TPSLButton } from \"./components\";\nimport {\n renderPriceInput,\n renderQuantity,\n renderQuantityInput,\n} from \"./listElement\";\nimport { NumeralWithCtx } from \"./numeralWithCtx\";\nimport { ShareButtonWidget } from \"./shareButton\";\nimport { TriggerPrice } from \"./triggerPrice\";\nimport { UnrealizedPnLPopoverCard } from \"./unrealPnLHover\";\n\ninterface ColumnConfig {\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLOptions;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}\n\nexport const useColumn = (config: ColumnConfig) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig, onSymbolChange } =\n config;\n const { t } = useTranslation();\n const fundingFeeEndTime = useRef(Date.now().toString());\n const column = useMemo<Column<API.PositionTPSLExt>[]>(\n () => [\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 140,\n onSort: (r1, r2) => {\n return r1.symbol.localeCompare(r2.symbol);\n // if (sortOrder === \"asc\") {\n // return r1.symbol.localeCompare(r2.symbol);\n // }\n // return r2.symbol.localeCompare(r1.symbol);\n },\n render: (value: string, record) => (\n <Flex gap={2}>\n <Box\n width={4}\n height={20}\n className={cn(\n \"oui-rounded-[1px]\",\n record.position_qty > 0\n ? \"oui-bg-trade-profit\"\n : \"oui-bg-trade-loss\",\n )}\n />\n <Text.formatted\n // rule={\"symbol\"}\n formatString=\"base-type\"\n className=\"oui-cursor-pointer\"\n onClick={(e) => {\n onSymbolChange?.({ symbol: value } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${value.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n </Flex>\n ),\n },\n {\n title: t(\"common.quantity\"),\n dataIndex: \"position_qty\",\n // onSort: true,\n onSort: (a, b) => {\n return a.position_qty - b.position_qty;\n },\n width: 120,\n className: \"oui-pl-6\",\n // rule: \"price\",\n // numeralProps: {\n // coloring: true,\n // // tick: \"base_dp\",\n // },\n render: renderQuantity,\n // render: (value: string) => (\n // <NumeralWithCtx\n // coloring\n // className=\"oui-font-semibold\"\n // tick=\"base_dp\"\n // >\n // {value}\n // </NumeralWithCtx>\n // ),\n },\n {\n title: t(\"common.avgOpen\"),\n className: \"oui-h-[48px]\",\n width: 120,\n onSort: true,\n dataIndex: \"average_open_price\",\n render: (value: string) => {\n // const ctx = usePositionsRowContext();\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: t(\"common.markPrice\"),\n dataIndex: \"mark_price\",\n width: 120,\n onSort: true,\n className: \"oui-h-[48px]\",\n render: (value: string) => {\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast-54\"\n content={t(\"positions.column.liqPrice.tooltip\")}\n >\n <Text>{t(\"positions.column.liqPrice\")}</Text>\n </Tooltip>\n ),\n width: 100,\n onSort: true,\n dataIndex: \"est_liq_price\",\n render: (value: string) => {\n return Number(value) === 0 ? (\n \"--\"\n ) : (\n <NumeralWithCtx\n rm={Decimal.ROUND_DOWN}\n className={Number(value) > 0 ? \"oui-text-warning-light\" : \"\"}\n >\n {value ?? \"--\"}\n </NumeralWithCtx>\n );\n },\n },\n {\n title: (\n <HoverCard\n content={<UnrealizedPnLPopoverCard />}\n side=\"top\"\n align=\"center\"\n className=\"oui-max-w-[280px] oui-text-2xs\"\n >\n <Text>{t(\"common.unrealizedPnl\")}</Text>\n </HoverCard>\n ),\n dataIndex: \"unrealized_pnl\",\n width: 180,\n onSort: true,\n rule: \"price\",\n numeralProps: {\n coloring: true,\n // tick: \"base_dp\",\n },\n // hint: <UnrealizedPnLPopoverCard />,\n render: (value: string, record) => {\n return (\n <Flex gap={2}>\n <Flex>\n <Text.numeral\n dp={pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"oui-font-semibold\"\n >\n {value}\n </Text.numeral>\n <Text.numeral\n rule=\"percentages\"\n dp={pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"oui-font-semibold\"\n prefix=\"(\"\n suffix=\")\"\n >\n {record.unrealized_pnl_ROI}\n </Text.numeral>\n </Flex>\n <ShareButtonWidget\n position={record}\n sharePnLConfig={sharePnLConfig}\n modalId={SharePnLDialogId}\n />\n </Flex>\n );\n },\n },\n {\n title: t(\"common.tpsl\"),\n dataIndex: \"__\",\n width: 150,\n render: (_: string, record) => (\n <TriggerPrice\n stopLossPrice={record.sl_trigger_price}\n takeProfitPrice={record.tp_trigger_price}\n />\n ),\n },\n\n {\n title: t(\"common.notional\"),\n dataIndex: \"notional\",\n className: \"oui-h-[48px]\",\n width: 100,\n onSort: true,\n render: (value: string) => (\n <Text.numeral dp={pnlNotionalDecimalPrecision}>{value}</Text.numeral>\n ),\n },\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast-54\"\n content={\n <Flex\n direction={\"column\"}\n gap={3}\n className=\"oui-rounded-sm oui-bg-base-8 oui-text-base-contrast-54\"\n >\n <span>{t(\"positions.column.margin.tooltip\")}</span>\n <Divider className=\"oui-w-full\" />\n <span>{t(\"positions.column.margin.formula\")}</span>\n </Flex>\n }\n >\n <Text>{t(\"positions.column.margin\")}</Text>\n </Tooltip>\n ),\n dataIndex: \"mm\",\n onSort: true,\n width: 100,\n rule: \"price\",\n render: (value: string) => <Text.numeral>{value}</Text.numeral>,\n },\n {\n title: t(\"funding.fundingFee\"),\n dataIndex: \"fundingFee\",\n width: 100,\n render: (value, record) => (\n <FundingFeeButton\n fee={value}\n symbol={record.symbol}\n start_t={record.timestamp.toString()}\n end_t={fundingFeeEndTime.current}\n />\n ),\n },\n {\n title: t(\"common.qty\"),\n dataIndex: \"close_qty\",\n width: 100,\n fixed: \"right\",\n render: renderQuantityInput,\n },\n {\n title: t(\"common.price\"),\n dataIndex: \"close_price\",\n width: 100,\n fixed: \"right\",\n render: renderPriceInput,\n // render: (value: string) => <PriceInput />,\n },\n {\n title: null,\n dataIndex: \"close_position\",\n align: \"right\",\n width: 160,\n fixed: \"right\",\n render() {\n return (\n <Flex gapX={2} justify={\"end\"}>\n <CloseButton />\n <TPSLButton />\n </Flex>\n );\n },\n },\n ],\n [pnlNotionalDecimalPrecision, sharePnLConfig, t],\n );\n return column;\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { EditIcon } from \"@orderly.network/ui\";\nimport { PositionTPSLPopover } from \"@orderly.network/ui-tpsl\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\n\n// ------------ TP/SL Price input end------------\nexport const TPSLButton = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n const { t } = useTranslation();\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n label={t(\"common.tpsl\")}\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing={false}\n />\n );\n};\n\nexport const TPSLEditIcon = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing\n >\n <EditIcon\n opacity={1}\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={16}\n />\n </PositionTPSLPopover>\n );\n};\n","import { Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { PriceInput } from \"./priceInput\";\nimport { QuantityInput } from \"./quantityInput\";\n\nexport const renderQuantity = (value: number) => {\n const symbolInfo = useSymbolContext();\n return (\n <Text.numeral\n dp={symbolInfo.base_dp}\n rm={Decimal.ROUND_DOWN}\n padding={false}\n coloring\n >\n {value}\n </Text.numeral>\n );\n};\n\nexport const renderQuantityInput = (value: number, record: any) => {\n return <QuantityInput value={record[\"position_qty\"]} />;\n};\n\nexport const renderPriceInput = (value: number) => {\n return <PriceInput />;\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { OrderType } from \"@orderly.network/types\";\nimport {\n CaretDownIcon,\n cn,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Input,\n inputFormatter,\n} from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\n\nexport const PriceInput = () => {\n const { type, quoteDp, price, updatePriceChange, updateOrderType, position } =\n usePositionsRowContext();\n const [, setHasFocus] = useState(false);\n const { t } = useTranslation();\n return (\n <DropdownMenuRoot>\n <Input\n size=\"sm\"\n value={\n type === OrderType.LIMIT ? price : t(\"orderEntry.orderType.market\")\n }\n onValueChange={(e) => updatePriceChange(e)}\n formatters={[\n inputFormatter.numberFormatter,\n ...(quoteDp ? [inputFormatter.dpFormatter(quoteDp)] : []),\n ]}\n onFocus={(e) => {\n if (type === OrderType.MARKET) {\n updateOrderType(OrderType.LIMIT, `${position.mark_price}`);\n }\n setHasFocus(true);\n }}\n onBlur={(e) => {\n setTimeout(() => {\n setHasFocus(false);\n }, 100);\n }}\n suffix={\n <DropdownMenuTrigger asChild>\n <button className=\"oui-h-full oui-px-1\">\n <CaretDownIcon size={12} color=\"white\" />\n </button>\n </DropdownMenuTrigger>\n }\n classNames={{\n root: cn(\n \"oui-outline-line-12 focus-within:oui-outline-primary-light\",\n ),\n }}\n />\n <DropdownMenuContent\n align=\"end\"\n className=\"oui-w-[96px] oui-min-w-[96px]\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DropdownMenuGroup>\n <DropdownMenuItem\n size=\"xs\"\n onSelect={(vent) => {\n updateOrderType(OrderType.MARKET);\n }}\n >\n <span>{t(\"common.marketPrice\")}</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenuRoot>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { utils } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n PopoverRoot,\n PopoverContent,\n PopoverTrigger,\n Flex,\n Text,\n Slider,\n Button,\n inputFormatter,\n} from \"@orderly.network/ui\";\nimport { Input } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\n\nexport const QuantityInput = (props: { value: number }) => {\n // const [quantity, setQuantity] = useState(`${props.value}`);\n const [open, setOpen] = useState(false);\n const [sliderValue, setSliderValue] = useState<number>(100);\n const {\n baseDp,\n updateQuantity: setQuantity,\n quantity,\n baseTick,\n } = usePositionsRowContext();\n\n useEffect(() => {\n // when click the outside of the popover, close the popover\n const handleClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n if (!target.closest(\"[data-popover-root]\")) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"click\", handleClick);\n\n return () => {\n document.removeEventListener(\"click\", handleClick);\n };\n }, []);\n\n const resetQuantity = (percent: number) => {\n onBlur(`${props.value * (percent / 100)}`);\n };\n\n const onBlur = (value: string) => {\n if (baseTick && baseTick > 0) {\n const formatQty = utils.formatNumber(value, baseTick) ?? value;\n setQuantity(formatQty);\n }\n };\n\n return (\n <PopoverRoot>\n <PopoverTrigger>\n <Input\n size=\"sm\"\n onFocus={() => {\n setOpen(true);\n }}\n classNames={{\n root: \"oui-outline-line-12 \",\n }}\n formatters={[\n inputFormatter.numberFormatter,\n ...(baseDp ? [inputFormatter.dpFormatter(baseDp)] : []),\n ]}\n // tooltip={errors?.order_quantity?.message}\n // color={errors?.order_quantity?.message ? \"danger\" : undefined}\n value={quantity}\n onBlur={(event) => onBlur(event.target.value)}\n onValueChange={(e) => {\n setQuantity(e);\n // if (type === OrderType.LIMIT) {\n if (e == \"0\" || e == \"\") {\n setSliderValue(0);\n return;\n }\n const value = new Decimal(e)\n .div(props.value)\n .mul(100)\n .abs()\n .toFixed(0, Decimal.ROUND_DOWN);\n // console.log(\"xxxxxx value\", value);\n\n setSliderValue(Math.min(100, Number(value)));\n // }\n }}\n />\n </PopoverTrigger>\n <PopoverContent\n className=\"oui-w-[360px] oui-rounded-xl\"\n align=\"start\"\n side=\"bottom\"\n onOpenAutoFocus={(event) => {\n event.preventDefault();\n }}\n >\n <Flex p={1} gap={2} width={\"100%\"} itemAlign={\"start\"}>\n <Text size=\"xs\" intensity={98} className=\"oui-min-w-[30px]\">\n {`${sliderValue}%`}\n </Text>\n <Flex direction={\"column\"} width={\"100%\"} gap={2}>\n <Slider\n markCount={4}\n value={[sliderValue]}\n onValueChange={(e) => {\n const values = Array.from(e.values());\n setSliderValue(values[0]);\n resetQuantity(values[0]);\n }}\n />\n <Buttons\n onClick={(value) => {\n setSliderValue(value * 100);\n resetQuantity(value * 100);\n }}\n />\n </Flex>\n </Flex>\n </PopoverContent>\n </PopoverRoot>\n );\n};\n\nconst Buttons = (props: { onClick: (value: number) => void }) => {\n const { t } = useTranslation();\n const list = [\n {\n label: \"0%\",\n value: 0,\n },\n {\n label: \"25%\",\n value: 0.25,\n },\n {\n label: \"50%\",\n value: 0.5,\n },\n {\n label: \"75%\",\n value: 0.75,\n },\n {\n label: t(\"common.max\"),\n value: 1,\n },\n ];\n\n return (\n <Flex gap={2} width={\"100%\"}>\n {list.map((item, index) => {\n return (\n <Button\n key={index}\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n onClick={(e) => {\n e.stopPropagation();\n props.onClick(item.value);\n }}\n className=\"oui-w-1/5\"\n >\n {item.label}\n </Button>\n );\n })}\n </Flex>\n );\n};\n","import React from \"react\";\nimport { NumeralProps, Text } from \"@orderly.network/ui\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\n\nexport type TickName = \"quote_dp\" | \"base_dp\";\n\nexport const NumeralWithCtx: React.FC<\n React.PropsWithChildren<\n Omit<NumeralProps, \"precision\" | \"tick\"> & { tick?: TickName }\n >\n> = (props) => {\n const { tick = \"quote_dp\", children, ...rest } = props;\n const symbolInfo = useSymbolContext();\n\n if (!symbolInfo) {\n // TODO i18n\n throw new Error(\"NumeralWithCtx must be used inside SymbolProvider\");\n }\n\n return (\n <Text.numeral as={\"span\" as any} dp={symbolInfo[tick]} {...rest}>\n {children}\n </Text.numeral>\n );\n};\n","import { FC } from \"react\";\nimport { modal, ShareIcon } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { ShareButtonState } from \"./shareButton.script\";\n\nexport const ShareButton: FC<ShareButtonState> = (props) => {\n if (props.sharePnLConfig == null) return <></>;\n\n const { position } = props;\n\n const showModal = () => {\n const entity = props.isPositionHistory\n ? {\n side: position.side,\n pnl: position.netPnL,\n openPrice: Math.abs(position.avg_open_price),\n closePrice: Math.abs(position.avg_close_price),\n openTime: position.open_timestamp,\n closeTime: position.close_timestamp,\n quantity: position.closed_position_qty,\n }\n : {\n side: position.position_qty > 0 ? \"LONG\" : \"SHORT\",\n pnl: position.unrealized_pnl,\n roi: new Decimal(position.unrealized_pnl_ROI * 100).toFixed(\n 2,\n Decimal.ROUND_DOWN,\n ),\n openPrice: Math.abs(position.average_open_price),\n markPrice: position.mark_price,\n openTime: position.timestamp,\n quantity: position.position_qty,\n };\n\n modal.show(props.modalId, {\n pnl: {\n entity: {\n symbol: position.symbol,\n ...entity,\n },\n refCode: props.refCode,\n ...props.sharePnLConfig,\n leverage: props.isPositionHistory ? undefined : props.leverage,\n },\n });\n };\n return (\n <button\n type=\"button\"\n onClick={(e: any) => {\n e.stopPropagation();\n showModal();\n }}\n >\n <ShareIcon color=\"white\" opacity={0.54} size={props.iconSize ?? 16} />\n </button>\n );\n};\n","import { useMemo } from \"react\";\nimport { useReferralInfo, useSymbolLeverage } from \"@orderly.network/hooks\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport type UseShareButtonScriptOptions = {\n position: any;\n sharePnLConfig?: SharePnLConfig;\n modalId: string;\n iconSize?: number;\n isPositionHistory?: boolean;\n};\n\nexport const useShareButtonScript = (props: UseShareButtonScriptOptions) => {\n const { sharePnLConfig, position, modalId, iconSize, isPositionHistory } =\n props;\n const { getFirstRefCode } = useReferralInfo();\n const refCode = useMemo(() => {\n return getFirstRefCode()?.code;\n }, [getFirstRefCode]);\n const leverage = useSymbolLeverage(props.position.symbol);\n return {\n iconSize,\n position,\n refCode,\n leverage,\n sharePnLConfig,\n modalId,\n isPositionHistory,\n };\n};\n\nexport type ShareButtonState = ReturnType<typeof useShareButtonScript>;\n","import {\n useShareButtonScript,\n UseShareButtonScriptOptions,\n} from \"./shareButton.script\";\nimport { ShareButton } from \"./shareButton.ui\";\n\nexport type ShareButtonWidgetProps = UseShareButtonScriptOptions;\n\nexport const ShareButtonWidget = (props: ShareButtonWidgetProps) => {\n const state = useShareButtonScript(props);\n return <ShareButton {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { AlgoOrderType, API, OrderSide } from \"@orderly.network/types\";\nimport { useSymbolsInfo, utils } from \"@orderly.network/hooks\";\nimport { cn, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { TPSLEditIcon } from \"./components\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const TriggerPrice: FC<{\n stopLossPrice?: number;\n takeProfitPrice?: number;\n}> = (props) => {\n const { stopLossPrice, takeProfitPrice } = props;\n const { tpslOrder, position } = usePositionsRowContext();\n\n return (\n <TPSLTriggerPrice\n stopLossPrice={stopLossPrice}\n takeProfitPrice={takeProfitPrice}\n direction={\"column\"}\n order={tpslOrder}\n position={position}\n tooltip\n />\n );\n};\n\nexport const TriggerPriceItem: FC<{\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n symbolInfo: API.SymbolExt;\n}> = (props) => {\n const { qty, price, entryPrice, orderSide, orderType, symbolInfo } = props;\n const pnl = utils.priceToPnl(\n {\n qty,\n price,\n entryPrice,\n orderSide,\n orderType,\n },\n {\n symbol: symbolInfo,\n }\n );\n\n const type = orderType === AlgoOrderType.TAKE_PROFIT ? \"TP\" : \"SL\";\n\n return (\n <Flex>\n <Text intensity={54} className=\"oui-mr-1\">{`${type} PnL:`}</Text>\n <Text.formatted\n rule=\"price\"\n className={\n pnl === 0\n ? \"oui-text-base-contrast-36\"\n : pnl > 0\n ? \"oui-text-trade-profit oui-gap-0\"\n : \"oui-text-trade-loss oui-gap-0\"\n }\n prefix={<Text>{pnl === 0 ? \"\" : pnl > 0 ? \"+\" : \"-\"}</Text>}\n suffix={\n <Text intensity={36} className=\"oui-ml-1\">\n USDC\n </Text>\n }\n >{`${Math.abs(pnl)}`}</Text.formatted>\n </Flex>\n );\n};\n\nexport const TPSLTriggerPrice: FC<{\n takeProfitPrice: number | undefined;\n stopLossPrice: number | undefined;\n className?: string;\n direction?: \"row\" | \"column\";\n tooltip?: boolean;\n order?: API.AlgoOrder;\n position?: API.PositionTPSLExt;\n}> = (props) => {\n const { direction = \"row\", order, position } = props;\n // const symbolInfo = useSymbolsInfo()[position?.symbol ?? \"\"]();\n const symbolInfo = useSymbolsInfo();\n const { t } = useTranslation();\n const pnl = useMemo(() => {\n const msgs = [];\n\n if (!props.tooltip || !order || !position) return;\n\n let quantity = order.quantity;\n\n if (quantity === 0) {\n if (order.child_orders[0].type === \"CLOSE_POSITION\") {\n quantity = position.position_qty;\n }\n }\n\n if (!!props.takeProfitPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"tp\"}\n qty={quantity}\n price={props.takeProfitPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.TAKE_PROFIT}\n symbolInfo={symbolInfo[order.symbol]()}\n />\n );\n }\n\n if (!!props.stopLossPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"sl\"}\n qty={quantity}\n price={props.stopLossPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.STOP_LOSS}\n symbolInfo={symbolInfo[order.symbol]()}\n />\n );\n }\n\n return <div>{msgs}</div>;\n }, [\n props.takeProfitPrice,\n props.stopLossPrice,\n position?.average_open_price,\n order?.side,\n order?.quantity,\n order?.algo_type,\n ]);\n\n const child = useMemo(() => {\n const children = [];\n\n if (!order?.symbol) return <span>-</span>;\n\n const Label = ({ children }: { children?: string }) => {\n return !props.stopLossPrice || direction === \"column\" ? (\n <Text intensity={54}>{children}</Text>\n ) : (\n \"\"\n );\n };\n\n if (props.takeProfitPrice) {\n children.push(\n <Text.formatted\n className={cn(\n \"oui-text-trade-profit oui-gap-0 oui-decoration-white/20\"\n )}\n key={\"tp\"}\n rule=\"price\"\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={props.takeProfitPrice}\n prefix={\n !props.stopLossPrice || direction === \"column\" ? (\n <Text intensity={54}>{`${t(\"tpsl.tp\")} - `}</Text>\n ) : (\n \"\"\n )\n }\n />\n );\n }\n if (props.stopLossPrice) {\n children.push(\n <Text.formatted\n key={\"sl\"}\n className={cn(\n \"oui-text-trade-loss oui-gap-0 oui-decoration-white/20 \"\n )}\n rule={\"price\"}\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={props.stopLossPrice}\n prefix={\n !props.takeProfitPrice || direction === \"column\" ? (\n <Text intensity={54}>{`${t(\"tpsl.sl\")} - `}</Text>\n ) : (\n \"\"\n )\n }\n />\n );\n }\n\n if (children.length === 0) return <Text>-</Text>;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <Text key={\"split\"}>/</Text>);\n }\n\n return children;\n }, [props.takeProfitPrice, props.stopLossPrice, order?.symbol, t]);\n\n const content = (\n <div\n className={cn(\n \"oui-inline-flex oui-text-base-contrast-36\",\n props.direction === \"column\"\n ? \"oui-flex-col\"\n : \"oui-flex-row oui-gap-1\",\n props.className\n )}\n >\n {child}\n </div>\n );\n\n const showIcon = Array.isArray(child) ? !!child.length : !child;\n\n if (props.tooltip) {\n return (\n <Flex gapX={2}>\n <Tooltip content={pnl}>{content}</Tooltip>\n {showIcon && <TPSLEditIcon />}\n </Flex>\n );\n }\n\n return content;\n};\n","import { FC } from \"react\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { Divider, Flex, Text } from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const UnrealizedPnLPopoverCard: FC<{}> = (props) => {\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\"\n );\n const { t } = useTranslation();\n return (\n <Flex\n direction={\"column\"}\n gap={3}\n className=\"oui-text-base-contrast-54 oui-items-start\"\n >\n <Text>{t(\"positions.column.unrealPnl.tooltip\")}</Text>\n <Divider className=\"oui-w-full\" />\n <div className=\"oui-mb-0\">\n {t(\"positions.column.unrealPnl.priceBasis\")}\n </div>\n <UnPnlPriceBasisCheckBox\n value={unPnlPriceBasis}\n onValueChange={setUnPnlPriceBasic}\n />\n </Flex>\n );\n};\n\nconst UnPnlPriceBasisCheckBox = (props: {\n value: string;\n onValueChange: (value: string) => void;\n}) => {\n const { value, onValueChange } = props;\n const { t } = useTranslation();\n\n // \"markPrice\" | \"lastPrice\"\n return (\n <Flex gap={2}>\n <RadioButton\n sel={value === \"markPrice\"}\n label={t(\"common.markPrice\")}\n value={\"markPrice\"}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === \"lastPrice\"}\n label={t(\"common.lastPrice\")}\n value={\"lastPrice\"}\n onCheckChange={onValueChange}\n />\n </Flex>\n );\n};\n\nconst RadioButton = (props: {\n sel: boolean;\n label: any;\n value: any;\n onCheckChange: (value: any) => void;\n}) => {\n const { sel, label, value, onCheckChange } = props;\n return (\n <Flex\n onClick={(e) => {\n onCheckChange(value);\n e.stopPropagation();\n }}\n gap={1}\n className=\"oui-cursor-pointer\"\n >\n {sel ? <SelIcon /> : <UnselIcon />}\n <Text size=\"xs\" intensity={sel ? 98 : 54}>\n {label}\n </Text>\n </Flex>\n );\n};\n\nconst SelIcon = () => {\n return (\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 className=\"oui-fill-white\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".36\"\n />\n <circle cx=\"8\" cy=\"8\" r=\"3.333\" />\n </svg>\n );\n};\n\nconst UnselIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".54\"\n />\n </svg>\n );\n};\n","import { FC } from \"react\";\nimport { cn, Divider, Flex, Grid } from \"@orderly.network/ui\";\nimport { LimitCloseBtnWidget } from \"../limitCloseBtn\";\nimport { MarketCloseBtnWidget } from \"../marketCloseBtn\";\nimport { TpSLBtnWidget } from \"../tpSLBtn\";\nimport {\n UnrealPnL,\n SymbolToken,\n Qty,\n Margin,\n Notional,\n AvgOpen,\n MarkPrice,\n LiqPrice,\n TPSLPrice,\n FundingFee,\n} from \"./items\";\nimport { PositionCellState } from \"./positionCell.script\";\n\nexport const PositionCell: FC<\n PositionCellState & {\n className?: string;\n }\n> = (props) => {\n const { className, ...rest } = props;\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n p={2}\n r=\"xl\"\n itemAlign={\"start\"}\n className={cn(className, \"oui-bg-base-9\")}\n >\n <Header {...rest} />\n <Divider intensity={6} className=\"oui-w-full\" />\n <Body {...rest} />\n <TPSLPrice {...rest} />\n <FundingFee {...rest} />\n <Buttons {...rest} />\n </Flex>\n );\n};\n\nconst Header: FC<PositionCellState> = (props) => {\n return (\n <Flex justify={\"between\"} width={\"100%\"}>\n <SymbolToken {...props} />\n <UnrealPnL {...props} />\n </Flex>\n );\n};\n\nconst Body: FC<PositionCellState> = (props) => {\n return (\n <Grid cols={3} rows={2} gap={2} width={\"100%\"}>\n <Qty {...props} />\n <Margin {...props} />\n <Notional {...props} />\n <AvgOpen {...props} />\n <MarkPrice {...props} />\n <LiqPrice {...props} />\n </Grid>\n );\n};\n\nconst Buttons: FC<PositionCellState> = (props) => {\n return (\n <Grid width={\"100%\"} gap={2} cols={3} rows={1}>\n <TpSLBtnWidget state={props} />\n <LimitCloseBtnWidget state={props} />\n <MarketCloseBtnWidget state={props} />\n </Grid>\n );\n};\n","import { FC } from \"react\";\nimport { utils } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@orderly.network/react-app\";\nimport {\n Badge,\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n SimpleDialog,\n SimpleSheet,\n Slider,\n Text,\n ThrottledButton,\n toast,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { LimitConfirmDialog } from \"../../desktop/closeButton\";\nimport { LimitCloseBtnState } from \"./limitCloseBtn.script\";\n\nexport const LimitCloseBtn: FC<LimitCloseBtnState> = (props) => {\n const {\n item,\n sheetOpen,\n setSheetOpen,\n dialogOpen,\n setDialogOpen,\n updatePriceChange,\n base,\n quantity,\n price,\n onClose,\n onConfirm,\n submitting,\n quote_dp,\n closeOrderData,\n onCloseDialog,\n } = props;\n const isBuy = item.position_qty > 0;\n const { t } = useTranslation();\n const { parseErrorMsg } = useOrderEntryFormErrorMsg(props.errors);\n\n const orderQuantityErrorMsg = parseErrorMsg(\"order_quantity\");\n const orderPriceErrorMsg = parseErrorMsg(\"order_price\");\n\n const onBlur = (value: string) => {\n if (props.baseTick && props.baseTick > 0) {\n const formatQty = utils.formatNumber(value, props.baseTick) ?? value;\n props.updateQuantity(formatQty);\n }\n };\n\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={() => {\n updatePriceChange(\"limit\");\n setSheetOpen(true);\n }}\n >\n {t(\"positions.limitClose\")}\n </Button>\n\n {sheetOpen && (\n <SimpleSheet\n title={t(\"positions.limitClose\")}\n open={sheetOpen}\n onOpenChange={setSheetOpen}\n >\n <Flex\n direction={\"column\"}\n gap={3}\n width={\"100%\"}\n itemAlign={\"start\"}\n className=\"oui-text-sm\"\n >\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text.formatted rule={\"symbol\"} showIcon>\n {item.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n {t(\"orderEntry.orderType.limit\")}\n </Badge>\n {isBuy && (\n <Badge color=\"success\" size=\"xs\">\n {t(\"common.buy\")}\n </Badge>\n )}\n {!isBuy && (\n <Badge color=\"danger\" size=\"xs\">\n {t(\"common.sell\")}\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider className=\"oui-w-full\" />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text intensity={54}>{t(\"common.lastPrice\")}</Text>\n <Text.numeral\n dp={(props.item as any)?.symbolInfo?.quote_dp}\n suffix={<Text intensity={36}> USDC</Text>}\n >\n {props.curMarkPrice}\n </Text.numeral>\n </Flex>\n <Flex width={\"100%\"} direction={\"column\"} gap={2}>\n <Input.tooltip\n prefix={t(\"common.price\")}\n suffix={props.quote}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.quote_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={orderPriceErrorMsg}\n color={orderPriceErrorMsg ? \"danger\" : undefined}\n value={props.price}\n onValueChange={(e) => props.updatePriceChange(e)}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-outline-line-12 oui-w-full\",\n orderPriceErrorMsg ? \"oui-outline-danger\" : undefined,\n ),\n }}\n />\n <Input\n prefix={t(\"common.quantity\")}\n suffix={props.base}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.base_dp),\n ]}\n // triggerClassName=\"oui-w-full\"\n // tooltip={orderQuantityErrorMsg}\n // color={\n // orderQuantityErrorMsg ? \"danger\" : undefined\n // }\n value={props.quantity}\n onBlur={(event) => onBlur(event.target.value)}\n onValueChange={(e) => {\n props.updateQuantity(e);\n const slider = new Decimal(e)\n .div(props.item.position_qty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n props.setSliderValue(slider);\n }}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-outline-line-12 oui-w-full\",\n // orderQuantityErrorMsg\n // ? \"oui-outline-danger\"\n // : undefined\n ),\n }}\n />\n <Slider\n markCount={4}\n value={[props.sliderValue]}\n color=\"primary\"\n onValueChange={(e) => {\n props.setSliderValue(e[0]);\n const qty = new Decimal(e[0])\n .div(100)\n .mul(props.item.position_qty)\n .toFixed(props.base_dp, Decimal.ROUND_DOWN);\n // props.updateQuantity(qty);\n onBlur(qty);\n }}\n />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text\n color=\"primary\"\n size=\"2xs\"\n >{`${props.sliderValue}%`}</Text>\n <Flex gap={1}>\n <Text size=\"2xs\" color=\"primary\">\n {t(\"common.max\")}\n </Text>\n <Text.numeral intensity={54} size=\"2xs\">\n {Math.abs(props.item.position_qty)}\n </Text.numeral>\n </Flex>\n </Flex>\n </Flex>\n <Flex width={\"100%\"} gap={3} mt={2}>\n <Button\n fullWidth\n color=\"secondary\"\n onClick={(e) => {\n onClose();\n }}\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton\n fullWidth\n disabled={submitting}\n loading={submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n const msg = orderQuantityErrorMsg || orderPriceErrorMsg;\n if (msg) {\n toast.error(msg);\n return;\n }\n if (!props.orderConfirm) {\n onConfirm();\n return;\n }\n setDialogOpen(true);\n }}\n // disabled={Object.keys(props.errors ?? {}).length > 0}\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n </Flex>\n </SimpleSheet>\n )}\n\n {dialogOpen && (\n <SimpleDialog open={dialogOpen} onOpenChange={setDialogOpen} size=\"xs\">\n <LimitConfirmDialog\n base={base}\n quantity={quantity}\n price={price}\n onClose={onCloseDialog}\n onConfirm={onConfirm}\n submitting={submitting}\n quoteDp={quote_dp}\n order={closeOrderData}\n hideCloseIcon\n />\n </SimpleDialog>\n )}\n </>\n );\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useLocalStorage, useMarkPricesStream } from \"@orderly.network/hooks\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { useSymbolContext } from \"../../../../providers/symbolProvider\";\nimport { usePositionsRowContext } from \"../../desktop/positionRowContext\";\nimport { PositionCellState } from \"../positionCell/positionCell.script\";\n\nexport const useLimitCloseBtnScript = (props: { state: PositionCellState }) => {\n const { state } = props;\n const [sheetOpen, setSheetOpen] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const {\n onSubmit,\n price,\n quantity,\n closeOrderData,\n submitting,\n updatePriceChange,\n updateOrderType,\n updateQuantity,\n errors,\n baseTick,\n } = usePositionsRowContext();\n const setPrice = useRef(false);\n\n const [sliderValue, setSliderValue] = useState(100);\n\n const [orderConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n\n const onConfirm = () => {\n return onSubmit().then((res) => {\n setSheetOpen(false);\n setDialogOpen(false);\n });\n };\n\n const onClose = () => {\n setSheetOpen(false);\n };\n const onCloseDialog = () => {\n setDialogOpen(false);\n };\n const prices = useMarkPricesStream();\n const curMarkPrice = useMemo(() => {\n return prices?.[\"data\"]?.[state.item.symbol] ?? \"--\";\n }, [prices]);\n\n const { quote_dp, base_dp, base, quote } = useSymbolContext();\n useEffect(() => {\n if (!setPrice.current && curMarkPrice && sheetOpen) {\n setPrice.current = true;\n updateOrderType(OrderType.LIMIT, `${curMarkPrice}`);\n }\n }, [setPrice, curMarkPrice, sheetOpen]);\n\n // clear state\n useEffect(() => {\n if (!sheetOpen) {\n updateOrderType(OrderType.MARKET);\n setPrice.current = false;\n // setSliderValue(100);\n }\n }, [sheetOpen]);\n\n return {\n ...state,\n sheetOpen,\n setSheetOpen,\n curMarkPrice,\n quote_dp,\n base_dp,\n base,\n quote,\n baseTick,\n\n orderConfirm,\n\n onClose,\n onConfirm,\n price,\n quantity,\n closeOrderData,\n submitting,\n updatePriceChange,\n updateQuantity,\n errors,\n\n // slider\n sliderValue,\n setSliderValue,\n\n dialogOpen,\n setDialogOpen,\n onCloseDialog,\n };\n};\n\nexport type LimitCloseBtnState = ReturnType<typeof useLimitCloseBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useLimitCloseBtnScript } from \"./limitCloseBtn.script\";\nimport { LimitCloseBtn } from \"./limitCloseBtn.ui\";\n\nexport const LimitCloseBtnWidget = (props: {\n state: PositionCellState;\n}) => {\n const state = useLimitCloseBtnScript(props);\n return (<LimitCloseBtn {...state} />);\n};\n","import { FC } from \"react\";\nimport { Button, SimpleDialog } from \"@orderly.network/ui\";\nimport { MarketCloseBtnState } from \"./marketCloseBtn.script\";\nimport { MarketCloseConfirm } from \"../../desktop/closeButton\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const MarketCloseBtn: FC<MarketCloseBtnState> = (props) => {\n const { t } = useTranslation();\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n disabled={props.submitting}\n loading={props.submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n\n props.updateOrderType(OrderType.MARKET);\n\n if (!props.orderConfirm) {\n props.onConfirm();\n return;\n }\n props.setDialogOpen(true);\n }}\n >\n {t(\"positions.marketClose\")}\n </Button>\n <SimpleDialog\n open={props.dialogOpen}\n onOpenChange={props.setDialogOpen}\n size=\"xs\"\n >\n <MarketCloseConfirm\n base={props.base}\n quantity={props.quantity}\n onClose={props.onClose}\n onConfirm={props.onConfirm}\n submitting={props.submitting}\n hideCloseIcon\n />\n </SimpleDialog>\n </>\n );\n};\n","import { useState } from \"react\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { useSymbolContext } from \"../../../../providers/symbolProvider\";\nimport { usePositionsRowContext } from \"../../desktop/positionRowContext\";\nimport { PositionCellState } from \"../positionCell/positionCell.script\";\n\nexport const useMarketCloseBtnScript = (props: {\n state: PositionCellState;\n}) => {\n const symbolInfo = useSymbolContext();\n const [dialogOpen, setDialogOpen] = useState(false);\n const { onSubmit, quantity, submitting, updateOrderType, updateQuantity } =\n usePositionsRowContext();\n\n const [orderConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n\n const onConfirm = () => {\n return onSubmit().then((res) => {\n setDialogOpen(false);\n });\n };\n\n const onClose = () => {\n setDialogOpen(false);\n };\n\n return {\n ...props,\n ...symbolInfo,\n\n dialogOpen,\n setDialogOpen,\n\n orderConfirm,\n\n onSubmit,\n quantity,\n onClose,\n onConfirm,\n submitting,\n updateOrderType,\n updateQuantity,\n };\n};\n\nexport type MarketCloseBtnState = ReturnType<typeof useMarketCloseBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useMarketCloseBtnScript } from \"./marketCloseBtn.script\";\nimport { MarketCloseBtn } from \"./marketCloseBtn.ui\";\n\nexport const MarketCloseBtnWidget = (props: { state: PositionCellState }) => {\n const state = useMarketCloseBtnScript(props);\n return <MarketCloseBtn {...state} />;\n};\n","import { FC } from \"react\";\nimport { Button, Flex, Text, toast } from \"@orderly.network/ui\";\nimport { TpSLBtnState } from \"./tpSLBtn.script\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const TpSLBtn: FC<TpSLBtnState> = (props) => {\n // const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.openTP_SL();\n }}\n >\n {t(\"common.tpsl\")}\n </Button>\n );\n};\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { modal } from \"@orderly.network/ui\";\nimport { PositionTPSLSheet } from \"@orderly.network/ui-tpsl\";\nimport { API } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { usePositionsRowContext } from \"../../desktop/positionRowContext\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const useTpSLBtnScript = (props: { state: PositionCellState }) => {\n const symbolInfo: API.SymbolExt = useSymbolsInfo()[props.state.item.symbol]();\n const { tpslOrder } = usePositionsRowContext();\n const { t } = useTranslation();\n\n const openTP_SL = () => {\n modal.sheet({\n title: t(\"common.tpsl\"),\n content: (\n <PositionTPSLSheet\n position={props.state.item}\n symbolInfo={symbolInfo}\n order={tpslOrder}\n isEditing={false}\n />\n ),\n });\n };\n\n return {\n openTP_SL,\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type TpSLBtnState = ReturnType<typeof useTpSLBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useTpSLBtnScript } from \"./tpSLBtn.script\";\nimport { TpSLBtn } from \"./tpSLBtn.ui\";\n\nexport const TpSLBtnWidget = (props: { state: PositionCellState }) => {\n const state = useTpSLBtnScript(props);\n return (<TpSLBtn {...state} />);\n};\n","import { FC, useRef } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Badge, cn, Flex, Statistic, Text } from \"@orderly.network/ui\";\nimport { SharePnLBottomSheetId } from \"@orderly.network/ui-share\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FundingFeeButton } from \"../../../fundingFeeHistory/fundingFeeButton\";\nimport { ShareButtonWidget } from \"../../desktop/shareButton\";\nimport { PositionCellState } from \"./positionCell.script\";\n\nexport const SymbolToken: FC<PositionCellState> = (props) => {\n const { item } = props;\n const isBuy = item.position_qty > 0;\n const { t } = useTranslation();\n return (\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"2xs\"\n suffix={\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? t(\"common.long\") : t(\"common.short\")}\n </Badge>\n }\n showIcon\n onClick={() => {\n props.onSymbolChange?.({ symbol: item.symbol } as API.Symbol);\n }}\n >\n {item.symbol}\n </Text.formatted>\n );\n};\n\nexport const UnrealPnL: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n return (\n <Flex gap={3}>\n <Flex direction={\"column\"} className=\"oui-text-2xs\" itemAlign={\"end\"}>\n <div>\n <Text intensity={36}>{t(\"common.unrealizedPnl\")}</Text>\n <Text intensity={20}>(USDC)</Text>\n </div>\n\n <Text.numeral\n size=\"xs\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"orderly-font-semibold\"\n suffix={\n <Text.numeral\n rule=\"percentages\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n prefix=\"(\"\n suffix=\")\"\n className={cn(\n \"oui-ml-1\",\n item.unrealized_pnl_ROI > 0\n ? \"oui-text-success-darken\"\n : \"oui-text-danger-darken\",\n )}\n >\n {item.unrealized_pnl_ROI}\n </Text.numeral>\n }\n >\n {item.unrealized_pnl}\n </Text.numeral>\n </Flex>\n <ShareButtonWidget\n position={item}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLBottomSheetId}\n iconSize={12}\n />\n </Flex>\n );\n};\n\nexport const Qty: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.qty\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring>\n {item.position_qty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Margin: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={\n <span>\n {t(\"positions.column.margin\")}\n <Text intensity={20}>(USDC)</Text>\n </span>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} intensity={80}>\n {item.mm}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Notional: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n align=\"end\"\n label={\n <span>\n {t(\"common.notional\")}\n <Text intensity={20}>(USDC)</Text>\n </span>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} intensity={80}>\n {item.notional}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.avgOpen\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} intensity={80}>\n {item.average_open_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MarkPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n return (\n <Statistic\n label={t(\"common.markPrice\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} intensity={80}>\n {item.mark_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const LiqPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n const liqPrice =\n item.est_liq_price && item.est_liq_price > 0 ? item.est_liq_price : \"-\";\n\n return (\n <Statistic\n label={t(\"positions.column.liqPrice\")}\n align=\"end\"\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} color=\"warning\">\n {liqPrice}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const TPSLPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n if (item.tp_trigger_price == null && item.sl_trigger_price == null)\n return <></>;\n\n return (\n <Flex className=\"oui-text-2xs oui-text-base-contrast-36\">\n <Text>{`${t(\"common.tpsl\")}:`}&nbsp;</Text>\n <Flex className=\"oui-gap-[2px]\">\n {item.tp_trigger_price && (\n <Text.numeral color=\"buy\">{item.tp_trigger_price}</Text.numeral>\n )}\n {item.sl_trigger_price && \"/\"}\n {item.sl_trigger_price && (\n <Text.numeral color=\"sell\">{item.sl_trigger_price}</Text.numeral>\n )}\n </Flex>\n </Flex>\n );\n};\n\nexport const FundingFee: FC<PositionCellState> = (props) => {\n const { t } = useTranslation();\n const fundingFeeEndTime = useRef(Date.now().toString());\n return (\n <Flex justify={\"end\"} className=\"oui-text-2xs oui-w-full\">\n <Text intensity={36}>{t(\"funding.fundingFee\")}: </Text>\n <FundingFeeButton\n fee={props.item.fundingFee}\n symbol={props.item.symbol}\n start_t={props.item.timestamp.toString()}\n end_t={fundingFeeEndTime.current}\n />\n </Flex>\n );\n};\n","import { API } from \"@orderly.network/types\";\nimport { PositionsProps } from \"../../../../types/types\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useSymbolContext } from \"../../../../providers/symbolProvider\";\n\nexport const usePositionCellScript = (\n props: {\n item: API.PositionTPSLExt;\n index: number;\n } & PositionsProps\n) => {\n const symbolInfo = useSymbolContext();\n return {\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type PositionCellState = ReturnType<typeof usePositionCellScript>;\n","import { FC } from \"react\";\nimport { usePositionCellScript } from \"./positionCell.script\";\nimport { PositionCell } from \"./positionCell.ui\";\nimport { API } from \"@orderly.network/types\";\nimport { PositionsProps } from \"../../../../types/types\";\n\nexport const PositionCellWidget: FC<\n {\n item: API.PositionTPSLExt;\n index: number;\n className?: string;\n shareIconSize?: number;\n } & PositionsProps\n> = (props) => {\n const state = usePositionCellScript(props);\n return <PositionCell {...state} className={props.className} />;\n};\n","import React from \"react\";\nimport type { PositionsProps } from \"../../types/types\";\nimport { useCombinePositionsScript } from \"./combinePositions.script\";\nimport { usePositionsScript } from \"./positions.script\";\nimport { MobilePositions, Positions, CombinePositions } from \"./positions.ui\";\n\nexport const PositionsWidget: React.FC<PositionsProps> = (props) => {\n const state = usePositionsScript(props);\n return <Positions {...state} />;\n};\n\nexport const MobilePositionsWidget: React.FC<PositionsProps> = (props) => {\n const state = usePositionsScript(props);\n return <MobilePositions {...state} />;\n};\n\nexport const CombinePositionsWidget: React.FC<PositionsProps> = (props) => {\n const state = useCombinePositionsScript(props);\n return <CombinePositions {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n} from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { SymbolProvider } from \"../../providers/symbolProvider\";\nimport { usePositionHistoryColumn } from \"./desktop/usePositionHistoryColumn\";\nimport { PositionHistoryCellWidget } from \"./mobile\";\nimport {\n PositionHistoryExt,\n PositionHistoryState,\n} from \"./positionHistory.script\";\n\ntype PositionHistoryProps = PositionHistoryState & {\n sharePnLConfig?: SharePnLConfig;\n};\n\nexport const PositionHistory: FC<PositionHistoryProps> = (props) => {\n const { onSymbolChange, pagination, pnlNotionalDecimalPrecision } = props;\n const column = usePositionHistoryColumn({\n onSymbolChange,\n pnlNotionalDecimalPrecision,\n sharePnLConfig: props.sharePnLConfig,\n });\n\n const { t } = useTranslation();\n\n const dayLabel: Record<number, string> = useMemo(() => {\n return {\n 1: t(\"common.select.1d\"),\n 7: t(\"common.select.7d\"),\n 30: t(\"common.select.30d\"),\n 90: t(\"common.select.90d\"),\n };\n }, [t]);\n\n return (\n <Flex direction=\"column\" width=\"100%\" height=\"100%\" itemAlign=\"start\">\n {/* <Divider className=\"oui-w-full\" /> */}\n <Flex gap={3}>\n {props.filterItems.length > 0 && (\n <DataFilter\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n )}\n {[1, 7, 30, 90].map((value) => {\n return (\n <button\n key={`item-${value}`}\n className=\"oui-relative oui-px-2 oui-py-[2px] oui-text-sm\"\n >\n <div className=\"oui-z-10\">\n <Text.gradient\n color={props.filterDays === value ? \"brand\" : undefined}\n className={cn(\n \"oui-whitespace-nowrap oui-break-normal\",\n props.filterDays !== value\n ? \"oui-text-base-contrast-54\"\n : \"\",\n )}\n >\n {dayLabel[value] || `${value}D`}\n </Text.gradient>\n </div>\n <div\n className=\"oui-absolute oui-inset-0 oui-rounded oui-opacity-[.12] oui-gradient-primary\"\n onClick={() => {\n props.updateFilterDays(value as any);\n }}\n ></div>\n </button>\n );\n })}\n </Flex>\n\n <AuthGuardDataTable<PositionHistoryExt>\n loading={props.isLoading}\n id=\"oui-desktop-positions-content\"\n columns={column}\n bordered\n dataSource={props.dataSource}\n generatedRowKey={(record: PositionHistoryExt) =>\n `${record.symbol}_${record.position_id}`\n }\n renderRowContainer={(record: any, index: number, children: any) => (\n <SymbolProvider symbol={record.symbol}>{children}</SymbolProvider>\n )}\n manualPagination={false}\n pagination={pagination}\n testIds={{\n body: \"oui-testid-dataList-positionHistory-tab-body\",\n }}\n classNames={{\n root: \"!oui-h-[calc(100%_-_49px)]\",\n }}\n />\n </Flex>\n );\n};\n\nexport const MobilePositionHistory: FC<\n PositionHistoryState & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n }\n> = (props) => {\n return (\n <Grid\n cols={1}\n rows={2}\n className=\"oui-w-full oui-grid-rows-[auto,1fr]\"\n gap={1}\n >\n <Flex gap={2} p={2} className=\"oui-rounded-b-xl oui-bg-base-9\">\n <DataFilter\n className=\"oui-border-none oui-py-0\"\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n </Flex>\n <ListView\n className={cn(\n \"oui-hide-scrollbar oui-w-full oui-space-y-0 oui-overflow-y-hidden\",\n props.classNames?.root,\n )}\n contentClassName={cn(\"!oui-space-y-1\", props.classNames?.content)}\n dataSource={props.dataSource}\n renderItem={(item, index) => (\n <SymbolProvider symbol={item.symbol}>\n <PositionHistoryCellWidget\n item={item}\n index={index}\n onSymbolChange={props.onSymbolChange}\n classNames={{\n root: props.classNames?.cell,\n }}\n sharePnLConfig={props.sharePnLConfig}\n />\n </SymbolProvider>\n )}\n />\n </Grid>\n );\n};\n","import { ReactNode } from \"react\";\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Badge,\n Box,\n capitalizeFirstLetter,\n cn,\n Column,\n Flex,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { SharePnLConfig, SharePnLDialogId } from \"@orderly.network/ui-share\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { FundingFeeButton } from \"../../fundingFeeHistory/fundingFeeButton\";\nimport { ShareButtonWidget } from \"../../positions/desktop/shareButton\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\n\nexport const usePositionHistoryColumn = (props: {\n onSymbolChange?: (symbol: API.Symbol) => void;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const { onSymbolChange, pnlNotionalDecimalPrecision } = props;\n const { t } = useTranslation();\n\n const column = useMemo(\n () =>\n [\n // instrument\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 200,\n onSort: (r1: any, r2: any) => {\n return r1.symbol.localeCompare(r2.symbol);\n },\n render: (value: string, record) => (\n <SymbolInfo record={record} onSymbolChange={onSymbolChange} />\n ),\n },\n // quantity\n {\n title: t(\"positions.history.column.closed&maxClosed\"),\n dataIndex: \"close_maxClose\",\n width: 200,\n render: (value: string, record) => <Quantity record={record} />,\n },\n // net pnl\n {\n title: t(\"positions.history.column.netPnl\"),\n dataIndex: \"netPnL\",\n width: 140,\n onSort: (a, b) => {\n if (a.netPnL == null || b.netPnL == null) return -1;\n return (a.netPnL ?? 0) - (b.netPnL ?? 0);\n },\n render: (_: any, record) => (\n <Flex gapX={1}>\n <NetPnL\n record={record}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n />\n <ShareButtonWidget\n position={record}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLDialogId}\n isPositionHistory\n />\n </Flex>\n ),\n },\n // avg open\n {\n title: t(\"common.avgPrice\"),\n dataIndex: \"avg_open\",\n width: 140,\n render: (_: any, record) => {\n const avgOpen =\n record.avg_open_price != null\n ? Math.abs(record.avg_open_price)\n : \"--\";\n const { quote_dp } = useSymbolContext();\n return (\n <Text.numeral dp={quote_dp} padding={false}>\n {avgOpen}\n </Text.numeral>\n );\n },\n },\n // avg close\n {\n title: t(\"common.avgClose\"),\n dataIndex: \"avg_close\",\n width: 175,\n render: (_: any, record) => {\n const avgClose =\n record.avg_close_price != null\n ? Math.abs(record.avg_close_price)\n : \"--\";\n const { quote_dp } = useSymbolContext();\n return (\n <Text.numeral dp={quote_dp} padding={false}>\n {avgClose}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"funding.fundingFee\"),\n dataIndex: \"accumulated_funding_fee\",\n render: (value, record) => {\n return (\n <FundingFeeButton\n fee={-value}\n symbol={record.symbol}\n start_t={record.open_timestamp.toString()}\n end_t={record.close_timestamp?.toString()}\n />\n );\n },\n },\n // time opened\n {\n title: t(\"positions.history.column.timeOpened\"),\n dataIndex: \"open_timestamp\",\n width: 175,\n onSort: true,\n render: (_: any, record) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {record.open_timestamp}\n </Text.formatted>\n ),\n },\n // time close\n {\n title: t(\"positions.history.column.timeClosed\"),\n dataIndex: \"close_timestamp\",\n width: 175,\n onSort: true,\n render: (_: any, record) => {\n if (record.position_status == \"closed\" && record.close_timestamp) {\n return (\n <Text.formatted\n rule={\"date\"}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n >\n {record.close_timestamp ?? \"--\"}\n </Text.formatted>\n );\n }\n return \"--\";\n },\n },\n // updated time\n {\n title: t(\"positions.history.column.updatedTime\"),\n dataIndex: \"last_update_time\",\n width: 175,\n onSort: true,\n render: (_: any, record) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {record.last_update_time}\n </Text.formatted>\n ),\n },\n ] as Column<PositionHistoryExt>[],\n [pnlNotionalDecimalPrecision, t],\n );\n\n return column;\n};\n\nexport const SymbolInfo = (props: {\n record: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}) => {\n const { record, onSymbolChange } = props;\n const { t } = useTranslation();\n\n const tags = useMemo(() => {\n const list: ReactNode[] = [];\n\n const status = record.position_status;\n\n const renderStatus = () => {\n if (status === \"closed\") {\n return t(\"positions.history.status.closed\");\n } else if (status === \"partial_closed\") {\n return t(\"positions.history.status.partialClosed\");\n } else {\n return capitalizeFirstLetter(status.replace(\"_\", \" \"));\n }\n };\n\n list.push(\n <Badge\n color={status !== \"closed\" ? \"primaryLight\" : \"neutral\"}\n size=\"xs\"\n className=\"oui-break-normal oui-whitespace-nowrap\"\n >\n {renderStatus()}\n </Badge>,\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge color={\"danger\"} size=\"xs\">\n {/* {capitalizeFirstLetter(record.type)} */}\n {t(\"positions.history.type.adl\")}\n </Badge>,\n );\n } else if (record.type === \"liquidated\") {\n list.push(\n <Tooltip\n className=\"oui-min-w-[204px] oui-bg-base-5\"\n arrow={{\n className: \"oui-fill-base-5\",\n }}\n // @ts-ignore\n content={\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {record.liquidation_id != null && (\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.liquidationId\")}\n </Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.liquidatorFee\")}\n </Text>\n <Text color=\"lose\">\n {record.liquidator_fee > 0 && \"-\"}\n {commifyOptional(record.liquidator_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.insFundFee\")}\n </Text>\n <Text color=\"lose\">\n {record.insurance_fund_fee > 0 && \"-\"}\n {commifyOptional(record.insurance_fund_fee)}\n </Text>\n </Flex>\n </Flex>\n }\n >\n <div>\n <Badge size=\"xs\" color=\"danger\" className=\"oui-cursor-pointer\">\n <span className=\"oui-underline oui-decoration-dashed oui-decoration-[1px]\">\n {t(\"positions.history.type.liquidated\")}\n </span>\n </Badge>\n </div>\n </Tooltip>,\n );\n }\n\n return list;\n }, [record, t]);\n\n return (\n <Flex gap={2} height={48}>\n <Box\n width={4}\n height={38}\n className={cn(\n \"oui-rounded-[1px] oui-shrink-0\",\n record.side === \"LONG\" ? \"oui-bg-trade-profit\" : \"oui-bg-trade-loss\",\n )}\n />\n\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n <Text.formatted\n // rule={\"symbol\"}\n formatString=\"base-type\"\n className=\"oui-cursor-pointer\"\n onClick={(e) => {\n onSymbolChange?.({ symbol: record.symbol } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${record.symbol.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n <Flex gap={1}>{tags}</Flex>\n </Flex>\n </Flex>\n );\n};\n\nexport const Quantity = (props: { record: PositionHistoryExt }) => {\n const { record } = props;\n\n const { base_dp } = useSymbolContext();\n\n return (\n <Flex\n gap={1}\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-overflow-hidden oui-whitespace-nowrap oui-text-ellipsis\"\n >\n <Text.numeral dp={base_dp} padding={false}>\n {Math.abs(record.closed_position_qty)}\n </Text.numeral>\n <Text.numeral dp={base_dp} padding={false} className=\"oui-truncate\">\n {Math.abs(record.max_position_qty)}\n </Text.numeral>\n {/* <Text className=\"oui-truncate\">{`${record.symbol.split(\"_\")[1]}`}</Text> */}\n </Flex>\n );\n};\n\nexport const NetPnL = (props: {\n record: PositionHistoryExt;\n pnlNotionalDecimalPrecision?: number;\n}) => {\n const { record, pnlNotionalDecimalPrecision } = props;\n const { t } = useTranslation();\n const netPnl = record.netPnL != null ? record.netPnL : undefined;\n\n const text = () => (\n <Text.numeral\n dp={pnlNotionalDecimalPrecision}\n color={\n record.netPnL != null\n ? record.netPnL > 0\n ? \"profit\"\n : \"lose\"\n : undefined\n }\n className={\n netPnl == null\n ? \"\"\n : \"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n }\n >\n {netPnl ?? \"--\"}\n </Text.numeral>\n );\n\n if (record.netPnL == null) return text();\n\n return (\n <Tooltip\n // open={record.max_position_qty == 3.22}\n delayDuration={200}\n // @ts-ignore\n content={\n <Flex direction={\"column\"} itemAlign={\"start\"} className=\"oui-text-2xs\">\n <Text intensity={80}>{t(\"positions.history.column.netPnl\")}</Text>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"common.realizedPnl\")}</Text>\n <Text\n color={record.realized_pnl >= 0 ? \"profit\" : \"lose\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(record.realized_pnl)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"funding.fundingFee\")}</Text>\n <Text\n color={record.accumulated_funding_fee > 0 ? \"lose\" : \"profit\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(-record.accumulated_funding_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.netPnl.tradingFee\")}\n </Text>\n <Text\n color={record.trading_fee > 0 ? \"lose\" : \"profit\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(-record.trading_fee)}\n </Text>\n </Flex>\n </Flex>\n }\n className=\"oui-min-w-[204px] oui-bg-base-5\"\n arrow={{\n className: \"oui-fill-base-5\",\n }}\n >\n <div>{text()}</div>\n </Tooltip>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Divider, Flex, Grid, modal, Text } from \"@orderly.network/ui\";\nimport { SharePnLBottomSheetId } from \"@orderly.network/ui-share\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { ShareButtonWidget } from \"../../positions/desktop/shareButton\";\nimport {\n PositionHistoryType,\n ClosedQty,\n SymbolToken,\n OpenTime,\n AvgOpen,\n AvgClosed,\n ClosedTime,\n MaxClosedQty,\n FundingFee,\n} from \"./items\";\nimport { PositionHistoryCellState } from \"./positionHistoryCell.script\";\n\nexport const PositionHistoryCell: FC<PositionHistoryCellState> = (props) => {\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n itemAlign={\"start\"}\n className={props.classNames?.root}\n >\n <Header {...props} />\n <Divider intensity={6} className=\"oui-w-full\" />\n <Body {...props} />\n </Flex>\n );\n};\n\nexport const Header: FC<PositionHistoryCellState> = (props) => {\n const { t } = useTranslation();\n\n const showAlert = () => {\n const { item: record } = props;\n\n modal.alert({\n title: t(\"positions.history.column.netPnl\"),\n message: (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n >\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"common.realizedPnl\")}</Text>\n <Text color={record.realized_pnl >= 0 ? \"profit\" : \"lose\"}>\n {commifyOptional(record.realized_pnl)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"funding.fundingFee\")}</Text>\n <Text\n color={record.accumulated_funding_fee > 0 ? \"lose\" : \"profit\"}\n >\n {commifyOptional(-record.accumulated_funding_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.netPnl.tradingFee\")}\n </Text>\n <Text color={record.trading_fee > 0 ? \"lose\" : \"profit\"}>\n {commifyOptional(-record.trading_fee)}\n </Text>\n </Flex>\n </Flex>\n ),\n });\n };\n\n return (\n <Flex gap={1} width={\"100%\"}>\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1\"\n gap={1}\n >\n <SymbolToken {...props} />\n <PositionHistoryType {...props} />\n </Flex>\n <Flex direction={\"column\"} itemAlign={\"end\"} className=\"oui-flex-1\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"positions.history.column.netPnl\")}\n </Text>\n <Flex gapX={1}>\n <button onClick={showAlert}>\n <Text.numeral size=\"xs\" coloring>\n {props.item.netPnL ?? \"--\"}\n </Text.numeral>\n </button>\n\n <ShareButtonWidget\n position={props.item}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLBottomSheetId}\n iconSize={12}\n isPositionHistory\n />\n </Flex>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<PositionHistoryCellState> = (props) => {\n return (\n <div className=\"oui-w-full\">\n <Grid\n cols={3}\n rows={2}\n width={\"100%\"}\n gap={0}\n className=\"oui-grid-cols-[1fr,1fr,135px]\"\n >\n <ClosedQty {...props} />\n <MaxClosedQty {...props} />\n <OpenTime {...props} />\n <AvgOpen {...props} />\n <AvgClosed {...props} />\n <ClosedTime {...props} />\n </Grid>\n <FundingFee {...props} />\n </div>\n );\n};\n","import { FC, ReactNode, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Badge,\n capitalizeFirstLetter,\n Flex,\n modal,\n Statistic,\n Text,\n} from \"@orderly.network/ui\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { FundingFeeButton } from \"../../fundingFeeHistory/fundingFeeButton\";\nimport { PositionHistorySide } from \"../positionHistory.script\";\nimport { PositionHistoryCellState } from \"./positionHistoryCell.script\";\n\nexport const SymbolToken: FC<PositionHistoryCellState> = (props) => {\n const { side, symbol } = props.item;\n const { t } = useTranslation();\n const isBuy = side === PositionHistorySide.buy;\n\n return (\n <Text.formatted\n intensity={80}\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"sm\"\n // @ts-ignore\n prefix={\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? t(\"common.buy\") : t(\"common.sell\")}\n </Badge>\n }\n onClick={() => {\n props.onSymbolChange?.({ symbol: symbol } as API.Symbol);\n }}\n // showIcon\n >\n {symbol}\n </Text.formatted>\n );\n};\n\nexport const Time: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n\n return (\n <Text.formatted\n rule={\"date\"}\n formatString=\"yyyy-MM-dd hh:mm:ss\"\n intensity={36}\n size=\"2xs\"\n >\n {item.last_update_time}\n </Text.formatted>\n );\n};\n\nexport const PositionHistoryType: FC<PositionHistoryCellState> = (props) => {\n const { item: record } = props;\n const { t } = useTranslation();\n\n const showAlert = () => {\n modal.alert({\n title: t(\"positions.liquidation\"),\n message: (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n >\n {record.liquidation_id != null && (\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.liquidationId\")}</Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.liquidatorFee\")}</Text>\n <Text color=\"lose\">\n {record.liquidator_fee > 0 && \"-\"}\n {commifyOptional(record.liquidator_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.insFundFee\")}</Text>\n <Text color=\"lose\">\n {record.insurance_fund_fee > 0 && \"-\"}\n {commifyOptional(record.insurance_fund_fee)}\n </Text>\n </Flex>\n </Flex>\n ),\n });\n };\n\n const tags = useMemo(() => {\n const list: ReactNode[] = [];\n\n const status = record.position_status;\n\n const renderStatus = () => {\n if (status === \"closed\") {\n return t(\"positions.history.status.closed\");\n } else if (status === \"partial_closed\") {\n return t(\"positions.history.status.partialClosed\");\n } else {\n return capitalizeFirstLetter(status.replace(\"_\", \" \"));\n }\n };\n\n list.push(\n <Badge color={status !== \"closed\" ? \"primaryLight\" : \"neutral\"} size=\"xs\">\n {renderStatus()}\n </Badge>,\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge color={\"danger\"} size=\"xs\">\n {/* {capitalizeFirstLetter(record.type)} */}\n {t(\"positions.history.type.adl\")}\n </Badge>,\n );\n } else if (record.type === \"liquidated\") {\n list.push(\n <Badge\n size=\"xs\"\n color=\"danger\"\n className=\"oui-cursor-pointer\"\n onClick={showAlert}\n >\n <span className=\"oui-underline oui-decoration-dashed oui-decoration-[1px]\">\n {/* {capitalizeFirstLetter(record.type)} */}\n {t(\"positions.history.type.liquidated\")}\n </span>\n </Badge>,\n );\n }\n\n return list;\n }, [record]);\n\n return <Flex gap={1}>{tags}</Flex>;\n};\n\nexport const ClosedQty: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const closedQty =\n item.closed_position_qty != null\n ? Math.abs(item.closed_position_qty)\n : \"--\";\n\n return (\n <Statistic\n // label={\n // <Text>Closed{<Text intensity={20}>{` (${props.base})`}</Text>}</Text>\n // }\n label={<Text>{t(\"positions.history.column.closed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring intensity={80}>\n {closedQty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MaxClosedQty: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const maxClosedQty =\n item.max_position_qty != null ? Math.abs(item.max_position_qty) : \"--\";\n return (\n <Statistic\n // label={\n // <Text>\n // Max closed{<Text intensity={20}>{` (${props.base})`}</Text>}\n // </Text>\n // }\n label={<Text>{t(\"positions.history.column.maxClosed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring intensity={80}>\n {maxClosedQty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const avgOpen =\n item.avg_open_price != null ? Math.abs(item.avg_open_price) : \"--\";\n const { t } = useTranslation();\n return (\n <Statistic\n label={\n <Flex gap={1}>\n {t(\"common.avgOpen\")}\n <Text intensity={20}>(USDC)</Text>\n </Flex>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} padding={false} coloring intensity={80}>\n {avgOpen}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgClosed: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const avgClose =\n item.avg_close_price != null ? Math.abs(item.avg_close_price) : \"--\";\n const { t } = useTranslation();\n return (\n <Statistic\n label={\n <Flex gap={1}>\n {t(\"common.avgClose\")}\n <Text intensity={20}>(USDC)</Text>\n </Flex>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} padding={false} coloring intensity={80}>\n {avgClose}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const OpenTime: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={<Text>{t(\"positions.history.column.timeOpened\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n <Text.formatted\n intensity={80}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n rule={\"date\"}\n >\n {item.open_timestamp}\n </Text.formatted>\n </Statistic>\n );\n};\nexport const ClosedTime: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const child =\n item.position_status == \"closed\" && item.close_timestamp ? (\n <Text.formatted\n intensity={80}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n rule={\"date\"}\n >\n {item.close_timestamp}\n </Text.formatted>\n ) : (\n \"--\"\n );\n\n return (\n <Statistic\n label={<Text>{t(\"positions.history.column.timeClosed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n {child}\n </Statistic>\n );\n};\n\nexport const FundingFee: FC<PositionHistoryCellState> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n justify={\"end\"}\n className=\"oui-text-2xs oui-w-full oui-py-2 oui-gap-1 oui-gap-1\"\n >\n <Text intensity={36}>{t(\"funding.fundingFee\")}: </Text>\n <FundingFeeButton\n fee={-props.item.accumulated_funding_fee}\n symbol={props.item.symbol}\n start_t={props.item.open_timestamp.toString()}\n end_t={props.item.close_timestamp?.toString()}\n />\n </Flex>\n );\n};\n","import {\n useAccount,\n usePrivateQuery,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { PositionHistoryProps } from \"./positionHistory.widget\";\nimport { API } from \"@orderly.network/types\";\nimport { usePagination, useScreen } from \"@orderly.network/ui\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { differenceInDays, setDate, setHours, subDays } from \"date-fns\";\nimport {\n areDatesEqual,\n formatDatePickerRange,\n offsetEndOfDay,\n offsetStartOfDay,\n} from \"../../utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type PositionHistoryExt = API.PositionHistory & {\n netPnL?: number;\n};\n\nexport enum PositionHistorySide {\n all = \"all\",\n buy = \"LONG\",\n sell = \"SHORT\",\n}\nexport enum PositionHistoryStatus {\n all = \"all\",\n closed = \"closed\",\n partial_closed = \"partial_closed\",\n}\n\nexport const usePositionHistoryScript = (props: PositionHistoryProps) => {\n const { onSymbolChange, symbol, pnlNotionalDecimalPrecision } = props;\n const { state } = useAccount();\n\n const { data, isLoading } = usePrivateQuery<PositionHistoryExt[]>(\n symbol\n ? `/v1/position_history?symbol=${symbol}&limit=1000`\n : \"/v1/position_history?limit=1000\",\n {\n formatter(data) {\n return (data.rows ?? null)?.map(\n (item: API.PositionHistory): PositionHistoryExt => {\n if (\n item.realized_pnl != null &&\n item.accumulated_funding_fee != null &&\n item.trading_fee != null\n ) {\n const netPnL =\n item.realized_pnl -\n item.accumulated_funding_fee -\n item.trading_fee;\n return {\n ...item,\n netPnL: netPnL,\n };\n }\n return item;\n }\n );\n },\n revalidateOnFocus: true,\n }\n );\n\n const { pagination, setPage } = usePagination({\n pageSize: 10,\n });\n\n const {\n status,\n side,\n dateRange,\n filterDays,\n updateFilterDays,\n filterItems,\n onFilter,\n } = useFilter();\n\n useEffect(() => {\n setPage(1);\n }, [status, side, dateRange, filterDays, symbol]);\n\n const filterData = useMemo(() => {\n if (data == null) return data;\n\n return data.filter((item) => {\n const sideFilter =\n side === PositionHistorySide.all\n ? true\n : item.side.toLowerCase() === side.toLowerCase();\n const statusFilter =\n status === PositionHistoryStatus.all\n ? true\n : item.position_status.toLowerCase() === status.toLowerCase();\n\n // const time = item.close_timestamp ?? item?.last_update_timestamp ?? item.open_timestamp;\n const time = item?.last_update_time ?? item.open_timestamp;\n const dateFilter =\n dateRange.from && dateRange.to\n ? time >= dateRange.from.getTime() && time <= dateRange.to.getTime()\n : true;\n\n const symbolFilter = symbol ? item.symbol == symbol : true;\n\n return sideFilter && statusFilter && dateFilter && symbolFilter;\n });\n }, [status, side, dateRange, data, symbol]);\n\n const dataSource = useDataTap(filterData, {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n fallbackData: [],\n });\n\n return {\n dataSource,\n isLoading,\n onSymbolChange,\n pagination,\n filterItems,\n onFilter,\n symbol,\n filterDays,\n updateFilterDays,\n pnlNotionalDecimalPrecision,\n };\n};\n\nconst useFilter = () => {\n const { t } = useTranslation();\n\n const [status, setStatus] = useState<PositionHistoryStatus>(\n PositionHistoryStatus.all\n );\n const [side, setSide] = useState<PositionHistorySide>(\n PositionHistorySide.all\n );\n const defaultRange = formatDatePickerRange({\n to: offsetEndOfDay(new Date()),\n from: offsetStartOfDay(subDays(new Date(), 89)),\n });\n\n /// default is 90d\n const [filterDays, setFilterDays] = useState<1 | 7 | 30 | 90 | null>(90);\n\n const [dateRange, setDateRange] = useState<{\n from?: Date;\n to?: Date;\n }>(defaultRange);\n\n const updateFilterDays = (days: 1 | 7 | 30 | 90) => {\n setFilterDays(days);\n setDateRange({\n from: offsetStartOfDay(subDays(new Date(), days - 1)),\n to: offsetEndOfDay(new Date()),\n });\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"side\") {\n setSide(filter.value);\n }\n\n if (filter.name === \"status\") {\n setStatus(filter.value);\n }\n\n if (filter.name === \"dateRange\") {\n const newDateRange = formatDatePickerRange(filter.value);\n setDateRange(newDateRange);\n if (newDateRange.from && newDateRange.to) {\n const diffDays =\n Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) + 1;\n const dateRangeMap: { [key: number]: { from: Date; to: Date } } = {\n 1: {\n from: offsetStartOfDay(new Date())!,\n to: offsetEndOfDay(new Date())!,\n },\n 7: {\n from: offsetStartOfDay(subDays(new Date(), 6))!,\n to: offsetEndOfDay(new Date())!,\n },\n 30: {\n from: offsetStartOfDay(subDays(new Date(), 29))!,\n to: offsetEndOfDay(new Date())!,\n },\n 90: {\n from: offsetStartOfDay(subDays(new Date(), 89))!,\n to: offsetEndOfDay(new Date())!,\n },\n };\n\n const dateRange = dateRangeMap[diffDays];\n if (\n dateRange &&\n areDatesEqual(dateRange.from, newDateRange.from) &&\n areDatesEqual(dateRange.to, newDateRange.to)\n ) {\n setFilterDays(diffDays as any);\n } else {\n setFilterDays(null);\n }\n }\n }\n };\n\n const { isMobile } = useScreen();\n\n const filterItems = useMemo((): any[] => {\n const sideFilter = {\n type: \"select\",\n name: \"side\",\n options: [\n {\n label: t(\"common.side.all\"),\n value: \"all\",\n },\n {\n label: t(\"common.buy\"),\n value: PositionHistorySide.buy,\n },\n {\n label: t(\"common.sell\"),\n value: PositionHistorySide.sell,\n },\n ],\n value: side,\n };\n\n const dateRangeFilter = {\n type: \"range\",\n name: \"dateRange\",\n value: dateRange,\n fromDate: offsetStartOfDay(subDays(new Date(), 89)),\n toDate: offsetEndOfDay(new Date()),\n };\n\n const statusFilter = {\n type: \"select\",\n name: \"status\",\n options: [\n {\n label: t(\"common.status.all\"),\n value: \"all\",\n },\n {\n label: t(\"positions.history.status.closed\"),\n value: PositionHistoryStatus.closed,\n },\n {\n label: t(\"positions.history.status.partialClosed\"),\n value: PositionHistoryStatus.partial_closed,\n },\n ],\n value: status,\n };\n\n if (isMobile) {\n return [sideFilter, statusFilter];\n }\n return [sideFilter, statusFilter, dateRangeFilter];\n }, [side, status, dateRange]);\n\n return {\n filterItems,\n onFilter,\n side,\n dateRange,\n status,\n filterDays,\n updateFilterDays,\n };\n};\n\nexport type PositionHistoryState = ReturnType<typeof usePositionHistoryScript>;\n","import { differenceInDays, setDate, setHours, subDays } 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\nexport function offsetStartOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(0, 0, 0, 0);\n return newDate;\n}\n\nexport function offsetEndOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(23, 59, 59, 999);\n return newDate;\n}\n\nexport const formatDatePickerRange = (option: { from?: Date; to?: Date }) => ({\n from: offsetStartOfDay(option.from),\n to: offsetEndOfDay(option.to ?? option.from),\n});\n\nexport const areDatesEqual = (date1: Date, date2: Date): boolean => {\n return date1.getTime() === date2.getTime();\n};\n","import { API } from \"@orderly.network/types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { SymbolInfo } from \"../desktop/usePositionHistoryColumn\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const usePositionHistoryCellScript = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const symbolInfo = useSymbolContext();\n\n return {\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type PositionHistoryCellState = ReturnType<\n typeof usePositionHistoryCellScript\n>;\n","import { API } from \"@orderly.network/types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { usePositionHistoryCellScript } from \"./positionHistoryCell.script\";\nimport { PositionHistoryCell } from \"./positionHistoryCell.ui\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const PositionHistoryCellWidget = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const state = usePositionHistoryCellScript(props);\n return <PositionHistoryCell {...state} />;\n};\n","import { API } from \"@orderly.network/types\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { usePositionHistoryScript } from \"./positionHistory.script\";\nimport { MobilePositionHistory, PositionHistory } from \"./positionHistory.ui\";\n\nexport type PositionHistoryProps = {\n onSymbolChange?: (symbol: API.Symbol) => void;\n symbol?: string;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n};\n\nexport const PositionHistoryWidget = (props: PositionHistoryProps) => {\n const state = usePositionHistoryScript(props);\n return <PositionHistory {...state} sharePnLConfig={props.sharePnLConfig} />;\n};\n\nexport const MobilePositionHistoryWidget = (\n props: PositionHistoryProps & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n },\n) => {\n const { classNames, ...rest } = props;\n const state = usePositionHistoryScript(rest);\n return (\n <MobilePositionHistory\n {...state}\n classNames={classNames}\n sharePnLConfig={props.sharePnLConfig}\n />\n );\n};\n","import { FC } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport {\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n} from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { useLiquidationColumn } from \"./desktop/useLiquidationColumn\";\nimport { LiquidationState } from \"./liquidation.script\";\nimport { LiquidationCellWidget } from \"./mobile\";\n\nexport const Liquidation: FC<LiquidationState> = (props) => {\n const column = useLiquidationColumn({});\n\n return (\n <Flex direction=\"column\" width=\"100%\" height=\"100%\" itemAlign=\"start\">\n {/* <Divider className=\"oui-w-full\" /> */}\n <Flex gap={3}>\n {props.filterItems.length > 0 && (\n <DataFilter\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n )}\n {[1, 7, 30, 90].map((value) => {\n return (\n <button\n key={`item-${value}`}\n className=\"oui-relative oui-px-2 oui-py-[2px] oui-text-sm\"\n >\n <div className=\"oui-z-10\">\n <Text.gradient\n color={props.filterDays === value ? \"brand\" : undefined}\n className={\n props.filterDays !== value\n ? \"oui-text-base-contrast-54\"\n : \"\"\n }\n >\n {`${value}D`}\n </Text.gradient>\n </div>\n <div\n className=\"oui-absolute oui-inset-0 oui-rounded oui-opacity-[.12] oui-gradient-primary\"\n onClick={() => {\n props.updateFilterDays(value as any);\n }}\n ></div>\n </button>\n );\n })}\n </Flex>\n\n <AuthGuardDataTable<API.Liquidation>\n loading={props.isLoading}\n id=\"oui-desktop-liquidation-content\"\n columns={column}\n bordered\n dataSource={props.dataSource}\n generatedRowKey={(record: API.Liquidation) =>\n `${record.liquidation_id}`\n }\n // manualPagination={false}\n pagination={props.pagination}\n testIds={{\n body: \"oui-testid-dataList-liquidation-tab-body\",\n }}\n classNames={{\n root: \"!oui-h-[calc(100%_-_49px)]\",\n }}\n />\n </Flex>\n );\n};\n\nexport const MobileLiquidation: FC<\n LiquidationState & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }\n> = (props) => {\n return (\n <Grid\n cols={1}\n rows={2}\n className=\"oui-w-full oui-grid-rows-[auto,1fr]\"\n gap={1}\n >\n <Flex gap={2} p={2} className=\"oui-rounded-b-xl oui-bg-base-9\">\n <DataFilter\n className=\"oui-border-none oui-py-0\"\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n </Flex>\n <ListView\n className={cn(\n \"oui-hide-scrollbar oui-w-full oui-space-y-0 oui-overflow-y-hidden\",\n props.classNames?.root,\n )}\n contentClassName={cn(\"!oui-space-y-1\", props.classNames?.content)}\n dataSource={props.dataSource}\n loadMore={props.loadMore}\n renderItem={(item, index) => (\n <LiquidationCellWidget\n item={item}\n index={index}\n classNames={{\n root: props.classNames?.cell,\n }}\n />\n )}\n />\n </Grid>\n );\n};\n","import { API } from \"@orderly.network/types\";\nimport { Column, Flex, Text } from \"@orderly.network/ui\";\nimport { FC, useMemo } from \"react\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const useLiquidationColumn = (props: {}) => {\n const { t } = useTranslation();\n\n const column = useMemo(\n () =>\n [\n // Time\n {\n title: t(\"common.time\"),\n dataIndex: \"timestamp\",\n fixed: \"left\",\n width: 202,\n render: (value: string) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {value}\n </Text.formatted>\n ),\n },\n // Liquidation id\n {\n title: t(\"positions.Liquidation.column.liquidationId\"),\n dataIndex: \"liquidation_id\",\n width: 202,\n render: (value) => <Text>{value}</Text>,\n },\n // net pnl\n {\n title: t(\"positions.Liquidation.column.insFundTransfer\"),\n dataIndex: \"transfer_amount_to_insurance_fund\",\n width: 202,\n render: (value) => {\n return <Text>{commifyOptional(value)}</Text>;\n },\n },\n // Symbol\n {\n title: t(\"common.symbol\"),\n dataIndex: \"Symbol\",\n width: 202,\n render: (_: any, record) => (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n <Text.formatted rule={\"symbol\"} formatString=\"base-quote\">\n {item.symbol}\n </Text.formatted>\n ))}\n </Flex>\n ),\n },\n // Price (USDC)\n {\n title: `${t(\"common.price\")} (USDC)`,\n dataIndex: \"Price_(USDC)\",\n width: 202,\n render: (_: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText value={item.transfer_price} type=\"quote\" />\n ))}\n </Flex>\n );\n },\n },\n // Quantity\n {\n title: t(\"common.quantity\"),\n dataIndex: \"Quantity\",\n width: 202,\n render: (_: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText value={item.position_qty} type=\"base\" />\n ))}\n </Flex>\n );\n },\n },\n // Liquidation Fee\n {\n title: t(\"positions.Liquidation.column.liquidationFee\"),\n dataIndex: \"abs_liquidation_fee\",\n width: 202,\n render: (abs_liquidation_fee: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText\n value={item.abs_liquidation_fee}\n type=\"quote\"\n />\n ))}\n </Flex>\n );\n },\n },\n ] as Column<API.Liquidation>[],\n [t]\n );\n\n return column;\n};\n\nconst FormattedText: FC<{ value?: string | number; type: \"base\" | \"quote\" }> = (\n props\n) => {\n // const { quote_dp, base_dp } = useSymbolContext();\n return <Text>{commifyOptional(props.value)}</Text>;\n};\n","import { FC } from \"react\";\nimport { cn, Flex, Grid, Text } from \"@orderly.network/ui\";\nimport { LiquidationCellState } from \"./liquidationCell.script\";\nimport { LiquidationFee, Price, Quantity } from \"./items\";\nimport { API } from \"@orderly.network/types\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const LiquidationCell: FC<\n LiquidationCellState & {\n classNames?: {\n root?: string;\n };\n }\n> = (props) => {\n return (\n <Flex\n key={props.item.timestamp}\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n itemAlign={\"start\"}\n className={props.classNames?.root}\n >\n <Header {...props} />\n <Body {...props} />\n </Flex>\n );\n};\n\nexport const Header: FC<LiquidationCellState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex gap={1} width={\"100%\"}>\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1\"\n gap={1}\n >\n <Text.formatted\n size=\"2xs\"\n intensity={36}\n rule={\"date\"}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n >\n {props.item.timestamp}\n </Text.formatted>\n <Flex gap={1}>\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"positions.Liquidation.column.liquidationId\")}:`}\n </Text>\n <Text\n size=\"2xs\"\n intensity={80}\n >{` ${props.item.liquidation_id}`}</Text>\n </Flex>\n </Flex>\n <Flex direction={\"column\"} itemAlign={\"end\"} className=\"oui-flex-1\">\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"positions.Liquidation.column.insFundTransfer\")}:`}\n </Text>\n <Text intensity={80} size=\"xs\">\n {commifyOptional(props.item.transfer_amount_to_insurance_fund)}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<LiquidationCellState> = (props) => {\n return (\n <Flex direction={\"column\"} width={\"100%\"}>\n {props.item.positions_by_perp?.map((item, index) => {\n return (\n <Cell\n key={`${index}-${item.symbol}`}\n isLast={index === props.item.positions_by_perp.length - 1}\n {...item}\n />\n );\n })}\n </Flex>\n );\n};\n\nconst Cell: FC<\n API.LiquidationPositionByPerp & {\n isLast: boolean;\n key: string;\n }\n> = (props) => {\n return (\n <Flex\n key={props.key}\n width={\"100%\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-border-t-[1px] oui-border-line-6 oui-pt-2\",\n !props.isLast && \"oui-pb-2\"\n )}\n >\n <Text.formatted\n rule={\"symbol\"}\n formatString=\"base-quote\"\n size=\"xs\"\n intensity={80}\n className=\"oui-flex-1\"\n >\n {props.symbol}\n </Text.formatted>\n <Grid cols={1} rows={3} width={\"100%\"} gap={1} className=\"oui-flex-1\">\n <Price {...props} />\n <Quantity {...props} />\n <LiquidationFee {...props} />\n </Grid>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const Price: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n const { t } = useTranslation();\n\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Flex gap={1}>\n <Text size=\"2xs\" intensity={36}>\n {t(\"common.price\")}\n </Text>\n <Text size=\"2xs\" intensity={20}>\n (USDC)\n </Text>\n </Flex>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.transfer_price}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.transfer_price)}\n </Text>\n </Flex>\n );\n};\nexport const Quantity: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n const { t } = useTranslation();\n\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n {t(\"common.quantity\")}\n </Text>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.position_qty}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.position_qty)}\n </Text>\n </Flex>\n );\n};\nexport const LiquidationFee: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n const { t } = useTranslation();\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n {t(\"positions.Liquidation.column.liquidationFee\")}\n </Text>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.abs_liquidation_fee}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.abs_liquidation_fee)}\n </Text>\n </Flex>\n );\n};\n","import { API } from \"@orderly.network/types\";\n\nexport const useLiquidationCellScript = (props: {\n item: API.Liquidation;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n}) => {\n\n return {\n ...props\n };\n};\n\nexport type LiquidationCellState = ReturnType<typeof useLiquidationCellScript>;\n","import { API } from \"@orderly.network/types\";\nimport { useLiquidationCellScript } from \"./liquidationCell.script\";\nimport { LiquidationCell } from \"./liquidationCell.ui\";\n\nexport const LiquidationCellWidget = (props: {\n item: API.Liquidation;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n}) => {\n const { classNames, ...rest } = props;\n const state = useLiquidationCellScript(rest);\n return <LiquidationCell classNames={classNames} {...state} />;\n};\n","import {\n usePrivateInfiniteQuery,\n usePrivateQuery,\n} from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { API } from \"@orderly.network/types\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n areDatesEqual,\n formatDatePickerRange,\n offsetEndOfDay,\n offsetStartOfDay,\n} from \"../../utils\";\nimport { differenceInDays, subDays } from \"date-fns\";\nimport { usePagination, useScreen } from \"@orderly.network/ui\";\nimport { LiquidationProps } from \"./liquidation.widget\";\n\nexport const useLiquidationScript = (props: LiquidationProps) => {\n const { symbol, enableLoadMore } = props;\n const { page, pageSize, setPage, pagination, parsePagination } =\n usePagination({\n pageSize: 10,\n });\n\n const { dateRange, filterDays, updateFilterDays, filterItems, onFilter } =\n useFilter();\n\n useEffect(() => {\n setPage(1);\n }, [symbol, dateRange, filterDays]);\n\n const [data, { meta, isLoading, loadMore }] = useLiquidation({\n page: enableLoadMore ? undefined : page,\n size: pageSize,\n symbol,\n start_t: dateRange.from != null ? dateRange.from.getTime() : undefined,\n end_t: dateRange.to != null ? dateRange.to.getTime() : undefined,\n });\n\n const dataSource = useDataTap(data, {\n fallbackData: [],\n });\n\n // useEffect(() => {\n // setPage(1);\n // }, [dateRange, filterDays]);\n\n // console.log(\"pagination\", pagination, meta);\n\n return {\n dataSource,\n isLoading,\n loadMore,\n\n pagination: parsePagination(meta),\n\n // filter\n dateRange,\n filterDays,\n updateFilterDays,\n filterItems,\n onFilter,\n };\n};\n\nexport type LiquidationState = ReturnType<typeof useLiquidationScript>;\n\n/**\n *\n * @param props size default is 100\n */\nconst useLiquidation = (props: {\n symbol?: string;\n start_t?: number;\n end_t?: number;\n page?: number;\n size?: number;\n}) => {\n const ordersResponse = usePrivateInfiniteQuery<API.Liquidation>(\n generateKeyFun(props),\n {\n initialSize: 1,\n formatter: (data) => data,\n revalidateOnFocus: true,\n }\n );\n\n const meta = useMemo(() => {\n // @ts-ignore\n return ordersResponse.data?.[0]?.meta;\n }, [ordersResponse.data?.[0]]);\n\n const data = useMemo(() => {\n return ordersResponse.data?.map((item: any) => item.rows)?.flat();\n }, [ordersResponse.data]);\n\n const isLoading = ordersResponse.isLoading;\n\n const loadMore = () => {\n ordersResponse.setSize(ordersResponse.size + 1);\n };\n\n return [data, { meta, isLoading, loadMore }] as const;\n};\n\nconst useFilter = () => {\n const defaultRange = formatDatePickerRange({\n to: offsetEndOfDay(new Date()),\n from: offsetStartOfDay(subDays(new Date(), 89)),\n });\n\n /// default is 90d\n const [filterDays, setFilterDays] = useState<1 | 7 | 30 | 90 | null>(90);\n\n const [dateRange, setDateRange] = useState<{\n from?: Date;\n to?: Date;\n }>(defaultRange);\n\n const updateFilterDays = (days: 1 | 7 | 30 | 90) => {\n setFilterDays(days);\n setDateRange({\n from: offsetStartOfDay(subDays(new Date(), days - 1)),\n to: offsetEndOfDay(new Date()),\n });\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"dateRange\") {\n const newDateRange = formatDatePickerRange(filter.value);\n setDateRange(newDateRange);\n if (newDateRange.from && newDateRange.to) {\n const diffDays =\n Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) + 1;\n const dateRangeMap: { [key: number]: { from: Date; to: Date } } = {\n 1: {\n from: offsetStartOfDay(new Date())!,\n to: offsetEndOfDay(new Date())!,\n },\n 7: {\n from: offsetStartOfDay(subDays(new Date(), 6))!,\n to: offsetEndOfDay(new Date())!,\n },\n 30: {\n from: offsetStartOfDay(subDays(new Date(), 29))!,\n to: offsetEndOfDay(new Date())!,\n },\n 90: {\n from: offsetStartOfDay(subDays(new Date(), 89))!,\n to: offsetEndOfDay(new Date())!,\n },\n };\n\n const dateRange = dateRangeMap[diffDays];\n if (\n dateRange &&\n areDatesEqual(dateRange.from, newDateRange.from) &&\n areDatesEqual(dateRange.to, newDateRange.to)\n ) {\n setFilterDays(diffDays as any);\n } else {\n setFilterDays(null);\n }\n }\n }\n };\n\n const { isMobile } = useScreen();\n\n const filterItems = useMemo((): any[] => {\n const dateRangeFilter = {\n type: \"range\",\n name: \"dateRange\",\n value: dateRange,\n fromDate: offsetStartOfDay(subDays(new Date(), 89)),\n toDate: offsetEndOfDay(new Date()),\n };\n\n if (isMobile) {\n return [dateRangeFilter];\n }\n return [dateRangeFilter];\n }, [dateRange]);\n\n return {\n filterItems,\n onFilter,\n dateRange,\n filterDays,\n updateFilterDays,\n };\n};\n\nconst generateKeyFun =\n (args: {\n symbol?: string;\n start_t?: number;\n end_t?: number;\n page?: number;\n size?: number;\n }) =>\n (pageIndex: number, previousPageData: any): string | null => {\n // reached the end\n if (previousPageData && !previousPageData.rows?.length) return null;\n\n const { symbol, size = 10, page, end_t, start_t } = args;\n\n const search = new URLSearchParams([\n [\"size\", size.toString()],\n [\"page\", `${pageIndex + 1}`],\n ]);\n\n if (page) {\n search.set(\"page\", `${page}`);\n }\n\n if (symbol) {\n search.set(`symbol`, symbol);\n }\n\n if (end_t) {\n search.set(`end_t`, `${end_t}`);\n }\n\n if (start_t) {\n search.set(`start_t`, `${start_t}`);\n }\n\n return `/v1/liquidations?${search.toString()}`;\n };\n","import { useLiquidationScript } from \"./liquidation.script\";\nimport { Liquidation, MobileLiquidation } from \"./liquidation.ui\";\n\nexport type LiquidationProps = {\n symbol?: string;\n enableLoadMore?: boolean;\n}\n\nexport const LiquidationWidget = (props: LiquidationProps) => {\n const state = useLiquidationScript(props);\n return (<Liquidation {...state} />);\n};\n\nexport const MobileLiquidationWidget = (props: LiquidationProps & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }) => {\n\n const { classNames, ...rest} = props;\n const state = useLiquidationScript(rest);\n return (<MobileLiquidation classNames={classNames} {...state} />);\n};\n"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/positions/closePosition/components/confirmDialog.tsx","../src/components/fundingFeeHistory/fundingFeeHistory.ui.tsx","../src/components/fundingFeeHistory/endReachedBox.tsx","../src/components/fundingFeeHistory/useEndReached.ts","../src/components/fundingFeeHistory/fundingFeeButton.tsx","../src/components/positions/combinePositions.script.ts","../src/components/positions/hooks/useSubAccountQuery.ts","../src/components/positions/positions.script.ts","../src/components/positions/positions.ui.tsx","../src/providers/symbolProvider.tsx","../src/components/positions/desktop/useColumn.tsx","../src/components/positions/closePosition/closePositions.mobile.ui.tsx","../src/components/positions/closePosition/components/quantitySlider.tsx","../src/components/positions/closePosition/closePosition.ui.tsx","../src/components/positions/closePosition/closePosition.widget.tsx","../src/components/positions/closePosition/closePosition.script.tsx","../src/components/positions/positionsRowContext.tsx","../src/components/positions/desktop/components.tsx","../src/components/positions/desktop/listElement.tsx","../src/components/positions/desktop/priceInput.tsx","../src/components/positions/desktop/quantityInput.tsx","../src/components/positions/desktop/numeralWithCtx.tsx","../src/components/positions/desktop/shareButton/shareButton.ui.tsx","../src/components/positions/desktop/shareButton/shareButton.script.tsx","../src/components/positions/desktop/shareButton/shareButton.widget.tsx","../src/components/positions/desktop/triggerPrice.tsx","../src/components/positions/desktop/unrealPnLHover.tsx","../src/components/positions/mobile/positionCell/positionCell.ui.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.ui.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.script.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.widget.tsx","../src/components/positions/mobile/positionCell/items.tsx","../src/components/positions/mobile/positionCell/positionCell.script.tsx","../src/components/positions/mobile/positionCell/positionCell.widget.tsx","../src/components/positions/positionsRowProvider.tsx","../src/components/positions/positions.widget.tsx","../src/components/positionHistory/positionHistory.ui.tsx","../src/components/positionHistory/desktop/usePositionHistoryColumn.tsx","../src/components/positionHistory/mobile/positionHistoryCell.ui.tsx","../src/components/positionHistory/mobile/items.tsx","../src/components/positionHistory/positionHistory.script.tsx","../src/utils/utils.ts","../src/components/positionHistory/mobile/positionHistoryCell.script.tsx","../src/components/positionHistory/mobile/positionHistoryCell.widget.tsx","../src/components/positionHistory/positionHistory.widget.tsx","../src/components/liquidation/liquidation.ui.tsx","../src/components/liquidation/desktop/useLiquidationColumn.tsx","../src/components/liquidation/mobile/liquidationCell.ui.tsx","../src/components/liquidation/mobile/items.tsx","../src/components/liquidation/mobile/liquidationCell.script.tsx","../src/components/liquidation/mobile/liquidationCell.widget.tsx","../src/components/liquidation/liquidation.script.tsx","../src/components/liquidation/liquidation.widget.tsx"],"names":["registerSimpleDialog","useMemo","useTranslation","OrderSide","Button","Text","CloseIcon","Flex","Divider","Badge","ThrottledButton","Box","commify","commifyOptional","Decimal","Fragment","jsx","jsxs","ConfirmHeader","props","hideCloseIcon","ConfirmFooter","t","OrderDetail","quantity","price","quoteDp","side","total","MarketCloseConfirm","onCancel","LimitConfirmDialog","order","useCallback","usePrivateInfiniteQuery","Grid","Statistic","DataTable","ListView","useScreen","cn","useRef","useEffect","useEndReached","sentinelRef","onEndReached","observer","cb","options","handleObserver","entries","entry","EndReachedBox","FundingFeeHistoryUI","symbol","start_t","end_t","isMobile","isLoading","data","setSize","pageIndex","previousPageData","loadMore","prev","flattenData","item","listView","HistoryDataListViewSimple","HistoryDataListView","columns","value","renderItem","FundingFeeItem","useBoolean","SimpleDialog","SimpleSheet","FundingFeeButton","fee","isOpen","setTrue","setFalse","produce","useAccount","usePositionStream","usePrivateQuery","useSymbolsInfo","i18n","positions","_account","useDataTap","formatAddress","usePagination","useSWR","fetcher","useConfig","AccountStatusEnum","getTimestamp","signatureMiddleware","account","accountId","apiBaseUrl","useSWRNext","key","config","args","url","fullUrl","signer","payload","signature","ids","id","e","useSubAccountQuery","query","formatter","swrOptions","state","middleware","shouldFetch","init","useCombinePositionsScript","calcMode","includedPendingOrder","pnlNotionalDecimalPrecision","sharePnLConfig","onSymbolChange","selectedAccount","pagination","setPage","symbolsInfo","oldPositions","newPositions","isPositionLoading","mutatePositions","accountInfo","isAccountInfoLoading","processPositions","acc","draft","info","notional","MMR","mm","unrealPnl","imr","unrealPnlROI","unrealPnl_index","unrealPnlROI_index","dataSource","filtered","groupDataSource","groupDataByAccount","mergedLoading","mainAccountId","subAccounts","map","findSubAccount","React","usePositionsScript","AuthGuardDataTable","createContext","useContext","SymbolContext","useSymbolContext","SymbolProvider","symbolInfo","HoverCard","Tooltip","SharePnLDialogId","Input","inputFormatter","Slider","QuantitySlider","MobileClosePosition","base","base_dp","quote","quote_dp","sheetOpen","setSheetOpen","dialogOpen","setDialogOpen","submitting","priceErrorMsg","quantityErrorMsg","disabled","isMarketClose","position","maxQty","isBuy","title","orderType","orderSide","header","lastPrice","inputForm","slider","footer","OrderType","PopoverContent","PopoverRoot","PopoverTrigger","Select","DesktopClosePosition","popoverOpen","setPopoverOpen","isEntirePosition","quantityForm","suffix","disabledInput","priceForm","useState","useLocalStorage","utils","useOrderEntryFormErrorMsg","PositionsRowContext","usePositionsRowContext","useClosePositionScript","sliderValue","setSliderValue","quantityInputRef","orderConfirm","onSubmit","closeOrderData","updatePriceChange","updateOrderType","updateQuantity","errors","baseTick","type","parseErrorMsg","closeType","formatQuantityToBaseTick","formatQty","onSliderValueChange","qty","onMax","onConfirm","res","onDoubleConfirm","onCloseSheet","onCloseDialog","onClosePopover","onEntirePosition","ClosePositionWidget","useSymbolLeverage","EditIcon","PositionTPSLPopover","TPSLButton","baseDp","tpslOrder","TPSLEditIcon","LeverageBadge","LeverageDisplay","leverage","CaretDownIcon","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuRoot","DropdownMenuTrigger","PriceInput","QuantityInput","resetQuantity","percent","event","values","PercentButtons","list","index","renderQuantity","renderQuantityInput","record","renderPriceInput","NumeralWithCtx","tick","children","rest","useAccountInfo","modal","ShareIcon","ShareButton","showModal","entity","netPnL","openPrice","roi","baseIMR","IMR_Factor","roiValue","useReferralInfo","useShareButtonScript","modalId","iconSize","isPositionHistory","getFirstRefCode","refCode","ShareButtonWidget","AlgoOrderType","TriggerPrice","stopLossPrice","takeProfitPrice","TPSLTriggerPrice","TriggerPriceItem","entryPrice","pnl","direction","msgs","child","Label","content","showIcon","UnrealizedPnLPopoverCard","unPnlPriceBasis","setUnPnlPriceBasic","UnPnlPriceBasisCheckBox","onValueChange","RadioButton","sel","label","onCheckChange","SelIcon","UnselIcon","useColumn","fundingFeeEndTime","r1","r2","b","_","TpSLBtn","PositionTPSLSheet","useTpSLBtnScript","TpSLBtnWidget","SharePnLBottomSheetId","SymbolToken","UnrealPnL","Qty","Margin","Notional","AvgOpen","MarkPrice","LiqPrice","liqPrice","TPSLPrice","FundingFee","PositionCell","className","body","buttons","usePositionCellScript","PositionCellWidget","usePositionClose","toast","PositionsRowProvider","setQuantity","setPrice","setType","submit","calculate","newValues","transSymbolformString","err","formatString","arr","Positions","MobilePositions","CombinePositions","tableData","row","column","PositionsWidget","MobilePositionsWidget","CombinePositionsWidget","DataFilter","capitalizeFirstLetter","usePositionHistoryColumn","SymbolInfo","Quantity","a","NetPnL","avgOpen","avgClose","tags","status","renderStatus","netPnl","text","differenceInDays","subDays","setHours","offsetStartOfDay","date","newDate","offsetEndOfDay","formatDatePickerRange","option","areDatesEqual","date1","date2","usePositionHistoryScript","dateRange","filterDays","updateFilterDays","filterItems","onFilter","useFilter","filterData","sideFilter","statusFilter","time","dateFilter","symbolFilter","setStatus","setSide","defaultRange","setFilterDays","setDateRange","days","filter","newDateRange","diffDays","dateRangeFilter","PositionHistoryType","showAlert","ClosedQty","closedQty","MaxClosedQty","maxClosedQty","AvgClosed","OpenTime","ClosedTime","PositionHistoryCell","Header","Body","usePositionHistoryCellScript","PositionHistoryCellWidget","PositionHistory","dayLabel","MobilePositionHistory","PositionHistoryWidget","MobilePositionHistoryWidget","classNames","useLiquidationColumn","FormattedText","abs_liquidation_fee","Price","LiquidationFee","LiquidationCell","Cell","useLiquidationCellScript","LiquidationCellWidget","Liquidation","MobileLiquidation","useLiquidationScript","enableLoadMore","page","pageSize","parsePagination","meta","useLiquidation","ordersResponse","generateKeyFun","size","search","LiquidationWidget","MobileLiquidationWidget","MarketCloseConfirmID"],"mappings":"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","sourcesContent":["import { registerSimpleDialog } from \"@orderly.network/ui\";\nimport { MarketCloseConfirm } from \"./components/positions/closePosition/components/confirmDialog\";\n\nexport { FundingFeeHistoryUI } from \"./components/fundingFeeHistory/fundingFeeHistory.ui\";\nexport { FundingFeeButton } from \"./components/fundingFeeHistory/fundingFeeButton\";\n\nexport {\n PositionsWidget,\n MobilePositionsWidget,\n CombinePositionsWidget,\n} from \"./components/positions/positions.widget\";\n\nexport type { PositionsProps } from \"./types/types\";\n\nexport const MarketCloseConfirmID = \"MarketCloseConfirmID\";\n\nregisterSimpleDialog(MarketCloseConfirmID, MarketCloseConfirm, {\n size: \"md\",\n closable: false,\n});\n\nexport * from \"./components/positionHistory\";\nexport * from \"./components/liquidation\";\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { OrderEntity, OrderSide } from \"@orderly.network/types\";\nimport {\n Button,\n Text,\n CloseIcon,\n Flex,\n Divider,\n Badge,\n ThrottledButton,\n Box,\n} from \"@orderly.network/ui\";\nimport { commify, commifyOptional, Decimal } from \"@orderly.network/utils\";\n\nexport const ConfirmHeader: FC<{\n onClose?: () => void;\n title: string;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { hideCloseIcon = false } = props;\n return (\n <div className=\"oui-relative oui-w-full oui-border-b oui-border-line-4 oui-pb-3\">\n <Text size={\"base\"}>{props.title}</Text>\n {!hideCloseIcon && (\n <button\n onClick={props.onClose}\n className=\"oui-absolute oui-right-0 oui-top-0 oui-p-2 oui-text-base-contrast-54 hover:oui-text-base-contrast-80\"\n >\n <CloseIcon size={18} color=\"white\" />\n </button>\n )}\n </div>\n );\n};\n\nexport const ConfirmFooter: FC<{\n onConfirm?: () => Promise<any>;\n onCancel?: () => void;\n submitting?: boolean;\n disabled?: boolean;\n}> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n id=\"oui-positions-confirm-footer\"\n gap={2}\n width={\"100%\"}\n className=\"oui-mt-3 oui-pb-1\"\n >\n <Button\n id=\"oui-positions-confirm-footer-cancel-button\"\n color={\"secondary\"}\n fullWidth\n onClick={props.onCancel}\n size=\"md\"\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton\n id=\"oui-positions-confirm-footer-confirm-button\"\n onClick={props.onConfirm}\n fullWidth\n loading={props.submitting}\n disabled={props.disabled}\n size=\"md\"\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n );\n};\n\nexport const OrderDetail = (props: {\n quantity: any;\n price: any;\n side: OrderSide;\n quoteDp: number;\n className?: string;\n}) => {\n const { quantity, price, quoteDp, side } = props;\n const { t } = useTranslation();\n\n const total = useMemo(() => {\n if (price && quantity) {\n return new Decimal(price)\n .mul(quantity)\n .toFixed(quoteDp, Decimal.ROUND_DOWN);\n }\n return \"--\";\n }, [price, quantity]);\n\n return (\n <Flex\n direction={\"column\"}\n gap={1}\n width={\"100%\"}\n className=\"oui-text-sm oui-text-base-contrast-54\"\n py={5}\n >\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.qty\")}</Text>\n <Text color={side === OrderSide.BUY ? \"success\" : \"danger\"}>\n {quantity}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.price\")}</Text>\n <Text.formatted\n intensity={98}\n suffix={<Text intensity={54}>USDC</Text>}\n >\n {price}\n </Text.formatted>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.notional\")}</Text>\n <Text.formatted\n intensity={98}\n suffix={<Text intensity={54}>USDC</Text>}\n >\n {total}\n </Text.formatted>\n </Flex>\n </Flex>\n );\n};\n\nexport const MarketCloseConfirm: FC<{\n base?: string;\n quantity?: string;\n onClose?: () => void;\n close?: () => void;\n onConfirm?: () => Promise<any>;\n submitting?: boolean;\n hideCloseIcon?: boolean;\n classNames?: {\n root?: string;\n };\n}> = (props) => {\n const { t } = useTranslation();\n\n const onCancel = () => {\n const func = props?.onClose ?? props.close;\n func?.();\n };\n return (\n <Flex direction={\"column\"} className={props.classNames?.root}>\n <ConfirmHeader\n onClose={onCancel}\n title={t(\"positions.marketClose\")}\n hideCloseIcon={props.hideCloseIcon}\n />\n <Text intensity={54} size=\"sm\" className=\"oui-my-5\">\n {t(\"positions.marketClose.description\", {\n quantity: commifyOptional(props.quantity),\n base: props.base,\n })}\n </Text>\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={async () => {\n await props.onConfirm?.();\n onCancel();\n }}\n submitting={props.submitting}\n />\n </Flex>\n );\n};\n\nexport const LimitConfirmDialog: FC<{\n base: string;\n quantity: string;\n price: string;\n onClose?: () => void;\n onConfirm: () => Promise<any>;\n order: OrderEntity;\n submitting: boolean;\n quoteDp?: number;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { order, quoteDp, quantity, price } = props;\n const { side } = order;\n const { t } = useTranslation();\n\n const onCancel = () => {\n props.onClose?.();\n };\n\n return (\n <>\n <ConfirmHeader\n onClose={onCancel}\n title={t(\"positions.limitClose\")}\n hideCloseIcon={props.hideCloseIcon}\n />\n <Box mt={5}>\n <Text intensity={54} size=\"sm\">\n {t(\"positions.limitClose.description\", {\n quantity: commify(props.quantity),\n base: props.base,\n })}\n </Text>\n </Box>\n\n <Flex gap={2} mb={4} mt={5} justify={\"between\"}>\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"base\"\n showIcon\n >\n {order.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n {t(\"orderEntry.orderType.limit\")}\n </Badge>\n <Badge\n color={side === OrderSide.BUY ? \"success\" : \"danger\"}\n size=\"xs\"\n >\n {side === OrderSide.BUY ? t(\"common.buy\") : t(\"common.sell\")}\n </Badge>\n </Flex>\n </Flex>\n\n <Divider className=\"oui-w-full\" />\n\n <OrderDetail\n className=\"oui-text-sm\"\n price={price}\n quantity={quantity}\n side={order.side}\n quoteDp={quoteDp ?? 2}\n />\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={props.onConfirm}\n submitting={props.submitting}\n />\n </>\n );\n};\n","import { FC, useCallback, useMemo } from \"react\";\nimport { usePrivateInfiniteQuery } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Grid,\n Statistic,\n DataTable,\n Text,\n ListView,\n Flex,\n useScreen,\n cn,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { EndReachedBox } from \"./endReachedBox\";\n\ntype FundingFeeHistory = {\n created_time: number;\n funding_fee: number;\n funding_rate: number;\n mark_price: number;\n payment_type: \"Pay\" | \"Receive\";\n status: \"Accrued\" | \"Settled\";\n symbol: string;\n updated_time: number;\n};\n\nexport const FundingFeeHistoryUI: FC<{\n total: number;\n symbol: string;\n start_t: string;\n end_t: string;\n}> = ({ total, symbol, start_t, end_t }) => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n const { isLoading, data, setSize } =\n usePrivateInfiniteQuery<FundingFeeHistory>(\n (pageIndex, previousPageData) => {\n if (previousPageData && !previousPageData.length) return null;\n return `/v1/funding_fee/history?page=${pageIndex}&symbol=${symbol}&start_t=${start_t}&end_t=${end_t}`;\n },\n {\n revalidateFirstPage: false,\n },\n );\n\n const loadMore = useCallback(() => {\n setSize((prev) => {\n // console.log(\">>>>>>>>loadMore\", prev);\n return prev + 1;\n });\n }, [setSize]);\n\n const flattenData = useMemo(() => {\n if (!Array.isArray(data)) return [];\n return data.flat().map((item) => {\n return {\n ...item,\n funding_fee: -item.funding_fee,\n };\n });\n }, [data]);\n\n const listView = useMemo(() => {\n if (isMobile) {\n return (\n <HistoryDataListViewSimple\n data={flattenData ?? []}\n isLoading={isLoading}\n loadMore={loadMore}\n />\n );\n }\n return (\n <HistoryDataListView\n data={flattenData ?? []}\n isLoading={isLoading}\n loadMore={loadMore}\n />\n );\n }, [isMobile, flattenData, isLoading]);\n\n return (\n <div>\n <Grid\n cols={2}\n gapX={3}\n className=\"oui-sticky oui-top-0 oui-z-10 oui-bg-base-8 oui-py-4\"\n >\n <div className=\"oui-rounded-lg oui-border oui-border-line-6 oui-bg-base-9 oui-p-3\">\n {/* <Statistic label={\"Instrument\"} /> */}\n <Flex direction={\"column\"} gap={1} itemAlign={\"start\"}>\n <span className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"common.symbol\")}\n </span>\n <Text.formatted\n rule=\"symbol\"\n className=\"oui-font-semibold\"\n intensity={98}\n >\n {symbol}\n </Text.formatted>\n </Flex>\n </div>\n <div className=\"oui-rounded-lg oui-border oui-border-line-6 oui-bg-base-9 oui-p-3\">\n <Statistic\n label={`${t(\"funding.fundingFee\")} (USDC)`}\n valueProps={{\n ignoreDP: true,\n coloring: true,\n showIdentifier: true,\n }}\n >\n {total}\n </Statistic>\n </div>\n </Grid>\n {listView}\n </div>\n );\n};\n\ntype ListProps = {\n isLoading: boolean;\n data: any[];\n loadMore: () => void;\n};\n\nconst HistoryDataListView: FC<ListProps> = ({ isLoading, data, loadMore }) => {\n const { t } = useTranslation();\n const columns = useMemo(() => {\n return [\n {\n title: t(\"common.time\"),\n dataIndex: \"created_time\",\n width: 120,\n render: (value: string) => {\n return <Text.formatted rule=\"date\">{value}</Text.formatted>;\n },\n },\n {\n title: t(\"funding.fundingRate\"),\n dataIndex: \"funding_rate\",\n formatter: (value: string) => new Decimal(value).mul(100).toString(),\n render: (value: string) => {\n return <span>{`${value}%`}</span>;\n },\n },\n {\n title: t(\"funding.paymentType\"),\n dataIndex: \"payment_type\",\n formatter: (value: string) => {\n return value === \"Pay\"\n ? t(\"funding.paymentType.paid\")\n : t(\"funding.paymentType.received\");\n },\n render: (value) => <span>{value}</span>,\n },\n {\n title: `${t(\"funding.fundingFee\")} (USDC)`,\n dataIndex: \"funding_fee\",\n render: (value: string) => {\n return (\n <Text.numeral rule=\"price\" coloring showIdentifier ignoreDP>\n {value}\n </Text.numeral>\n );\n },\n },\n ];\n }, [t]);\n\n return (\n <div className=\"oui-h-[calc(80vh_-_132px_-_8px)] oui-overflow-y-auto\">\n <EndReachedBox onEndReached={loadMore}>\n <DataTable\n classNames={{\n root: cn(\"oui-h-auto oui-bg-base-8 oui-text-sm\"),\n }}\n columns={columns}\n dataSource={data ?? []}\n loading={isLoading}\n />\n </EndReachedBox>\n </div>\n );\n};\n\nconst HistoryDataListViewSimple: FC<ListProps> = ({\n data,\n isLoading,\n loadMore,\n}) => {\n const renderItem = useCallback((item: FundingFeeHistory) => {\n return <FundingFeeItem item={item} />;\n }, []);\n return (\n <div className=\"oui-h-[calc(80vh_-_104px)] oui-overflow-y-auto\">\n <ListView\n dataSource={data}\n renderItem={renderItem}\n isLoading={isLoading}\n contentClassName=\"oui-space-y-0\"\n loadMore={loadMore}\n />\n </div>\n );\n};\n\nconst FundingFeeItem: FC<{\n item: any;\n}> = ({ item }) => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-flex-col oui-space-y-2 oui-border-t oui-border-line-6 oui-py-2\">\n <Flex justify={\"between\"}>\n <Statistic\n label={t(\"funding.fundingRate\")}\n classNames={{\n label: \"oui-text-2xs\",\n }}\n valueProps={{\n ignoreDP: true,\n rule: \"percentages\",\n className: \"oui-text-xs\",\n }}\n >\n {item.funding_rate}\n </Statistic>\n <Statistic\n label={t(\"common.amount\")}\n className=\"oui-items-end\"\n classNames={{\n label: \"oui-text-2xs\",\n }}\n valueProps={{\n ignoreDP: true,\n coloring: true,\n as: \"div\",\n className: \"oui-text-xs\",\n showIdentifier: true,\n }}\n >\n {item.funding_fee}\n </Statistic>\n </Flex>\n <Flex justify={\"between\"}>\n <Text.formatted\n rule=\"date\"\n className=\"oui-text-base-contrast-36\"\n size=\"2xs\"\n >\n {item.created_time}\n </Text.formatted>\n <Text size=\"sm\" intensity={80}>\n {item.payment_type === \"Pay\"\n ? t(\"funding.paymentType.paid\")\n : t(\"funding.paymentType.received\")}\n </Text>\n </Flex>\n </div>\n );\n};\n","import { FC, useRef, type PropsWithChildren } from \"react\";\nimport { useEndReached } from \"./useEndReached\";\n\nexport interface EndReachedBoxProps {\n onEndReached?: () => void;\n // className?: string;\n}\n\nexport const EndReachedBox: FC<PropsWithChildren<EndReachedBoxProps>> = (\n props,\n) => {\n const sentinelRef = useRef<HTMLDivElement | null>(null);\n const { onEndReached } = props;\n\n useEndReached(sentinelRef, () => {\n onEndReached?.();\n });\n\n return (\n <>\n {props.children}\n <div\n ref={sentinelRef}\n className=\"oui-relative oui-invisible oui-h-[25px] oui-bg-red-400 oui-top-[-300px]\"\n />\n </>\n );\n};\n","import { useEffect, useRef, MutableRefObject } from \"react\";\n\n/**\n * Listen for the specified element to scroll to the bottom\n */\nexport function useEndReached(\n sentinelRef: MutableRefObject<HTMLDivElement | null>,\n onEndReached?: () => void,\n) {\n const observer = useRef<IntersectionObserver>();\n const cb = useRef(onEndReached);\n\n cb.current = onEndReached;\n\n useEffect(() => {\n const options: IntersectionObserverInit = {\n root: null,\n rootMargin: \"0px\",\n threshold: 0,\n };\n\n const handleObserver = (entries: IntersectionObserverEntry[]) => {\n console.log(\">>>>>>>>handleObserver\", entries);\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n cb.current?.();\n }\n });\n };\n\n observer.current = new IntersectionObserver(handleObserver, options);\n\n return () => {\n // console.log(\"------->disconnect\");\n observer.current?.disconnect();\n };\n }, []);\n\n useEffect(() => {\n observer.current?.observe(sentinelRef.current!);\n }, []);\n}\n","import { FC } from \"react\";\nimport { useBoolean } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n SimpleDialog,\n SimpleSheet,\n Text,\n useScreen,\n} from \"@orderly.network/ui\";\nimport { FundingFeeHistoryUI } from \"./fundingFeeHistory.ui\";\n\nexport const FundingFeeButton: FC<{\n fee: number;\n symbol: string;\n start_t: string;\n end_t: string;\n}> = ({ fee, symbol, start_t, end_t }) => {\n const { t } = useTranslation();\n const [isOpen, { setTrue, setFalse }] = useBoolean(false);\n const { isMobile } = useScreen();\n\n return (\n <>\n <button onClick={setTrue}>\n <Text.numeral\n rule=\"price\"\n coloring\n showIdentifier\n ignoreDP\n className=\"oui-border-b oui-border-line-16 oui-border-dashed oui-py-0.5\"\n >\n {fee}\n </Text.numeral>\n </button>\n {isMobile ? (\n <SimpleSheet\n open={isOpen}\n onOpenChange={setFalse}\n title={t(\"funding.fundingFee\")}\n classNames={{\n body: \"oui-max-h-[80vh] oui-py-0\",\n }}\n >\n <FundingFeeHistoryUI\n total={fee}\n symbol={symbol}\n start_t={start_t}\n end_t={end_t}\n />\n </SimpleSheet>\n ) : (\n <SimpleDialog\n open={isOpen}\n onOpenChange={setFalse}\n title={t(\"funding.fundingFee\")}\n classNames={{\n content: \"lg:oui-max-w-[640px]\",\n body: \"oui-max-h-[80vh] oui-bg-base-8 lg:oui-py-0\",\n }}\n >\n <FundingFeeHistoryUI\n total={fee}\n symbol={symbol}\n start_t={start_t}\n end_t={end_t}\n />\n </SimpleDialog>\n )}\n </>\n );\n};\n","import { useEffect, useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport {\n SubAccount,\n useAccount,\n usePositionStream,\n usePrivateQuery,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { i18n } from \"@orderly.network/i18n\";\nimport { positions, account as _account } from \"@orderly.network/perp\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport type { API } from \"@orderly.network/types\";\nimport { formatAddress, usePagination } from \"@orderly.network/ui\";\nimport type { PositionsProps } from \"../../types/types\";\nimport { useSubAccountQuery } from \"./hooks/useSubAccountQuery\";\n\nexport enum AccountType {\n ALL = \"All accounts\",\n MAIN = \"Main accounts\",\n}\n\nexport const useCombinePositionsScript = (props: PositionsProps) => {\n const {\n symbol,\n calcMode,\n includedPendingOrder,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange,\n selectedAccount,\n } = props;\n\n const { pagination, setPage } = usePagination({ pageSize: 50 });\n\n useEffect(() => {\n setPage(1);\n }, [symbol]);\n\n const symbolsInfo = useSymbolsInfo();\n\n const { state } = useAccount();\n\n const [oldPositions, , { isLoading }] = usePositionStream(symbol, {\n calcMode,\n includedPendingOrder,\n });\n\n // need to get sub account Positions info to calculate portfolio and positions\n const {\n data: newPositions = [],\n isLoading: isPositionLoading,\n mutate: mutatePositions,\n } = usePrivateQuery<API.PositionExt[]>(\"/v1/client/aggregate/positions\", {\n // formatter: (data) => data,\n errorRetryCount: 3,\n });\n\n // need to get sub account info to calculate portfolio and positions\n const { data: accountInfo = [], isLoading: isAccountInfoLoading } =\n useSubAccountQuery<API.AccountInfo[]>(\"/v1/client/info\", {\n accountId: newPositions.map((item) => item.account_id!),\n revalidateOnFocus: false,\n });\n\n const processPositions = produce<API.PositionTPSLExt[]>(\n newPositions.filter((acc) => acc.account_id !== state.mainAccountId),\n (draft) => {\n for (const item of draft) {\n const info = symbolsInfo[item.symbol];\n const notional = positions.notional(item.position_qty, item.mark_price);\n const account = accountInfo.find(\n (acc) => acc.account_id === item.account_id,\n );\n const MMR = positions.MMR({\n baseMMR: info?.(\"base_mmr\"),\n baseIMR: info?.(\"base_imr\"),\n IMRFactor: account?.imr_factor[item.symbol] ?? 0,\n positionNotional: notional,\n IMR_factor_power: 4 / 5,\n });\n const mm = positions.maintenanceMargin({\n positionQty: item.position_qty,\n markPrice: item.mark_price,\n MMR: MMR,\n });\n const unrealPnl = positions.unrealizedPnL({\n qty: item.position_qty,\n openPrice: item?.average_open_price,\n // markPrice: unRealizedPrice,\n markPrice: item.mark_price,\n });\n const imr = _account.IMR({\n maxLeverage: account?.max_leverage ?? 1,\n baseIMR: info?.(\"base_imr\"),\n IMR_Factor: account?.imr_factor[item.symbol] ?? 0,\n positionNotional: notional,\n ordersNotional: 0,\n IMR_factor_power: 4 / 5,\n });\n const unrealPnlROI = positions.unrealizedPnLROI({\n positionQty: item.position_qty,\n openPrice: item.average_open_price,\n IMR: imr,\n unrealizedPnL: unrealPnl,\n });\n let unrealPnl_index = 0;\n let unrealPnlROI_index = 0;\n if (item.index_price) {\n unrealPnl_index = positions.unrealizedPnL({\n qty: item.position_qty,\n openPrice: item?.average_open_price,\n // markPrice: unRealizedPrice,\n markPrice: item.index_price,\n });\n unrealPnlROI_index = positions.unrealizedPnLROI({\n positionQty: item.position_qty,\n openPrice: item.average_open_price,\n IMR: imr,\n unrealizedPnL: unrealPnl_index,\n });\n }\n item.mmr = MMR;\n item.mm = mm;\n item.notional = notional;\n item.unrealized_pnl = unrealPnl;\n item.unrealized_pnl_ROI = unrealPnlROI;\n item.unrealized_pnl_ROI_index = unrealPnlROI_index;\n }\n },\n );\n\n const dataSource =\n useDataTap(\n [...oldPositions?.rows, ...processPositions].filter(\n (acc) => acc.position_qty !== 0,\n ),\n ) ?? [];\n\n const filtered = useMemo(() => {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return dataSource;\n }\n return dataSource.filter((item) => {\n if (selectedAccount === AccountType.MAIN) {\n return item.account_id === state.mainAccountId || !item.account_id;\n } else {\n return item.account_id === selectedAccount;\n }\n });\n }, [dataSource, selectedAccount, state.mainAccountId]);\n\n const groupDataSource = useMemo(() => {\n return groupDataByAccount(filtered, {\n mainAccountId: state.mainAccountId,\n subAccounts: state.subAccounts,\n });\n }, [filtered, state.mainAccountId, state.subAccounts]);\n\n const mergedLoading = useMemo<boolean>(() => {\n return isLoading || isPositionLoading || isAccountInfoLoading;\n }, [isLoading, isPositionLoading, isAccountInfoLoading]);\n\n return {\n tableData: groupDataSource,\n isLoading: mergedLoading,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n symbol,\n onSymbolChange,\n pagination,\n mutatePositions,\n };\n};\n\nexport type CombinePositionsState = ReturnType<\n typeof useCombinePositionsScript\n>;\n\nexport const groupDataByAccount = (\n data: API.PositionExt[],\n options: {\n mainAccountId?: string;\n subAccounts?: SubAccount[];\n },\n) => {\n const { mainAccountId = \"\", subAccounts = [] } = options;\n\n const map = new Map<\n PropertyKey,\n {\n id: string;\n description: string;\n children: API.PositionExt[];\n }\n >();\n\n for (const item of data) {\n // if account_id is not set, as a main account\n const accountId = item.account_id || mainAccountId;\n const findSubAccount = subAccounts.find((acc) => acc.id === accountId);\n if (map.has(accountId)) {\n map.get(accountId)?.children?.push(item);\n } else {\n map.set(accountId, {\n id: accountId,\n description:\n accountId === mainAccountId\n ? i18n.t(\"common.mainAccount\")\n : findSubAccount?.description ||\n formatAddress(findSubAccount?.id || \"\"),\n children: [item],\n });\n }\n }\n return {\n expanded: Array.from(map.keys()),\n dataSource: Array.from(map.values()),\n };\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n type SWRConfiguration,\n type SWRHook,\n type SWRResponse,\n type Middleware,\n useAccount,\n useSWR,\n fetcher,\n useConfig,\n useAccountInstance,\n} from \"@orderly.network/hooks\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { getTimestamp } from \"@orderly.network/utils\";\n\nexport type QueryOptions<T> = SWRConfiguration & {\n formatter?: (data: any) => T;\n accountId?: string | string[];\n};\n\nconst signatureMiddleware = (\n account: ReturnType<typeof useAccountInstance>,\n accountId?: string | string[],\n): Middleware => {\n const apiBaseUrl = useConfig(\"apiBaseUrl\");\n // @ts-ignore\n return (useSWRNext: SWRHook) => {\n return (key, fetcher, config) => {\n try {\n const extendedFetcher = async (args: any) => {\n const url = Array.isArray(args) ? args[0] : args;\n const fullUrl = `${apiBaseUrl}${url}`;\n const signer = account.signer;\n const payload: MessageFactor = { method: \"GET\", url };\n const signature = await signer.sign(payload, getTimestamp());\n const ids = Array.isArray(accountId) ? accountId : [accountId];\n return Promise.all(\n ids.map((id) => {\n // @ts-ignore\n return fetcher(fullUrl, {\n headers: {\n ...signature,\n \"orderly-account-id\": id,\n },\n });\n }),\n );\n };\n // @ts-ignore\n return useSWRNext(key, extendedFetcher, config);\n } catch (e) {\n throw e;\n }\n };\n };\n};\n\nexport const useSubAccountQuery = <T>(\n query: Parameters<SWRHook>[0],\n options?: QueryOptions<T>,\n): SWRResponse<T> => {\n const { formatter, accountId, ...swrOptions } = options || {};\n const { state, account } = useAccount();\n const middleware = Array.isArray(options?.use) ? (options?.use ?? []) : [];\n\n const ids = Array.isArray(accountId) ? accountId : [accountId];\n\n const shouldFetch =\n ids.filter(Boolean).length &&\n (state.status >= AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected);\n\n return useSWR<T>(\n () => (shouldFetch ? [query, ids] : null),\n (url: string, init: RequestInit) => {\n return fetcher(url, init, { formatter });\n },\n {\n ...swrOptions,\n use: [...middleware, signatureMiddleware(account, ids as string[])],\n onError: () => {},\n },\n );\n};\n\nexport type MessageFactor = {\n url: string;\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\n data?: any;\n};\n","import React from \"react\";\nimport { usePositionStream } from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport type { PositionsProps } from \"../../types/types\";\n\nexport const usePositionsScript = (props: PositionsProps) => {\n const {\n symbol,\n calcMode,\n includedPendingOrder,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange,\n } = props;\n // const [showAllSymbol] = useLocalStorage(\n // \"showAllSymbol\",\n // true\n // );\n const { pagination, setPage } = usePagination({ pageSize: 50 });\n\n React.useEffect(() => {\n setPage(1);\n }, [symbol]);\n\n const [data, , { isLoading }] = usePositionStream(symbol, {\n calcMode,\n includedPendingOrder,\n });\n\n const dataSource = useDataTap(data?.rows, { fallbackData: [] }) ?? undefined;\n\n return {\n dataSource,\n isLoading, // will be use isLoading when usePositionStream support\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n symbol,\n onSymbolChange,\n pagination,\n };\n};\n\nexport type PositionsState = ReturnType<typeof usePositionsScript>;\n","import React from \"react\";\nimport type { API } from \"@orderly.network/types\";\nimport { Badge, formatAddress, ListView } from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { SymbolProvider } from \"../../providers/symbolProvider\";\nimport type { PositionsProps } from \"../../types/types\";\nimport type { CombinePositionsState } from \"./combinePositions.script\";\nimport { useColumn } from \"./desktop/useColumn\";\nimport { PositionCellWidget } from \"./mobile/positionCell\";\nimport type { PositionsState } from \"./positions.script\";\nimport { PositionsRowProvider } from \"./positionsRowProvider\";\n\nexport const Positions: React.FC<Readonly<PositionsState>> = (props) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n pagination,\n isLoading,\n dataSource,\n onSymbolChange,\n } = props;\n\n const columns = useColumn({\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange: onSymbolChange,\n });\n\n return (\n <AuthGuardDataTable<API.PositionTPSLExt>\n loading={isLoading}\n id=\"oui-desktop-positions-content\"\n columns={columns}\n bordered\n dataSource={dataSource}\n generatedRowKey={(record: any) => record.symbol}\n renderRowContainer={(record: any, index: number, children: any) => {\n return (\n <SymbolProvider symbol={record.symbol}>\n <PositionsRowProvider position={record}>\n {children}\n </PositionsRowProvider>\n </SymbolProvider>\n );\n }}\n manualPagination={false}\n pagination={pagination}\n testIds={{\n body: \"oui-testid-dataList-position-tab-body\",\n }}\n />\n );\n};\n\nexport const MobilePositions: React.FC<\n Readonly<PositionsState & PositionsProps>\n> = (props) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n dataSource,\n onSymbolChange,\n } = props;\n return (\n <ListView\n className=\"oui-hide-scrollbar oui-w-full oui-space-y-0 oui-overflow-y-hidden\"\n contentClassName=\"!oui-space-y-1\"\n dataSource={dataSource}\n renderItem={(item, index) => (\n <SymbolProvider symbol={item.symbol}>\n <PositionsRowProvider position={item}>\n <PositionCellWidget\n item={item}\n index={index}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n sharePnLConfig={sharePnLConfig}\n onSymbolChange={onSymbolChange}\n />\n </PositionsRowProvider>\n </SymbolProvider>\n )}\n />\n );\n};\n\nexport const CombinePositions: React.FC<Readonly<CombinePositionsState>> = (\n props,\n) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n pagination,\n isLoading,\n tableData,\n onSymbolChange,\n mutatePositions,\n } = props;\n\n const columns = useColumn({\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange: onSymbolChange,\n });\n\n const { dataSource = [] } = tableData;\n\n return (\n <AuthGuardDataTable<any>\n bordered\n loading={isLoading}\n id=\"oui-desktop-positions-content\"\n columns={columns}\n dataSource={dataSource}\n expanded\n getSubRows={(row) => row.children}\n generatedRowKey={(record) => record.id}\n onCell={(column, record) => {\n const isGroup = (record.children ?? []).length > 0;\n if (isGroup) {\n return {\n children:\n column.id === \"symbol\" ? (\n <Badge color=\"neutral\" size=\"xs\">\n {record?.description || formatAddress(record?.id)}\n </Badge>\n ) : null,\n };\n }\n }}\n renderRowContainer={(record: any, index: number, children: any) => {\n if (record.symbol) {\n return (\n <SymbolProvider symbol={record.symbol}>\n <PositionsRowProvider\n position={record}\n mutatePositions={mutatePositions}\n >\n {children}\n </PositionsRowProvider>\n </SymbolProvider>\n );\n }\n return children;\n }}\n manualPagination={false}\n pagination={pagination}\n testIds={{\n body: \"oui-testid-dataList-position-tab-body\",\n }}\n />\n );\n};\n","import { FC, PropsWithChildren, createContext, useContext } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\n\nexport interface SymbolContextState {\n base_dp: number;\n quote_dp: number;\n base_tick: number;\n quote_tick: number;\n base: string;\n quote: string;\n symbol: string;\n origin: API.SymbolExt;\n quote_min: number;\n quote_max: number;\n}\n\nexport const SymbolContext = createContext({} as SymbolContextState);\n\nexport const useSymbolContext = () => {\n return useContext(SymbolContext);\n};\n\ninterface FormatterProviderProps {\n symbol: string;\n}\n\nexport const SymbolProvider: FC<PropsWithChildren<FormatterProviderProps>> = (\n props,\n) => {\n const symbolInfo = useSymbolsInfo()[props.symbol];\n return (\n <SymbolContext.Provider\n value={{\n symbol: props.symbol,\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n base_tick: symbolInfo(\"base_tick\"),\n quote_tick: symbolInfo(\"quote_tick\"),\n base: symbolInfo(\"base\"),\n quote: symbolInfo(\"quote\"),\n origin: symbolInfo(),\n quote_max: symbolInfo(\"quote_max\"),\n quote_min: symbolInfo(\"quote_min\"),\n }}\n >\n {props.children}\n </SymbolContext.Provider>\n );\n};\n","import { useMemo, useRef } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Box,\n cn,\n Divider,\n Flex,\n HoverCard,\n Column,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { SharePnLOptions, SharePnLDialogId } from \"@orderly.network/ui-share\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FundingFeeButton } from \"../../fundingFeeHistory/fundingFeeButton\";\nimport { ClosePositionWidget } from \"../closePosition\";\nimport { TPSLButton, LeverageBadge } from \"./components\";\nimport {\n renderPriceInput,\n renderQuantity,\n renderQuantityInput,\n} from \"./listElement\";\nimport { NumeralWithCtx } from \"./numeralWithCtx\";\nimport { ShareButtonWidget } from \"./shareButton\";\nimport { TriggerPrice } from \"./triggerPrice\";\nimport { UnrealizedPnLPopoverCard } from \"./unrealPnLHover\";\n\ninterface ColumnConfig {\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLOptions;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}\n\nexport const useColumn = (config: ColumnConfig) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig, onSymbolChange } =\n config;\n const { t } = useTranslation();\n const fundingFeeEndTime = useRef(Date.now().toString());\n const column = useMemo<Column<API.PositionTPSLExt>[]>(\n () => [\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 140,\n onSort: (r1, r2) => {\n return r1.symbol.localeCompare(r2.symbol);\n // if (sortOrder === \"asc\") {\n // return r1.symbol.localeCompare(r2.symbol);\n // }\n // return r2.symbol.localeCompare(r1.symbol);\n },\n render: (value: string, record) => (\n <Flex gap={2}>\n <Box\n width={4}\n height={20}\n className={cn(\n \"oui-h-[38px] oui-rounded-[1px]\",\n record.position_qty > 0\n ? \"oui-bg-trade-profit\"\n : \"oui-bg-trade-loss\",\n )}\n />\n <Flex direction=\"column\" itemAlign=\"start\">\n <Text.formatted\n // rule={\"symbol\"}\n formatString=\"base-type\"\n className=\"oui-cursor-pointer\"\n onClick={(e) => {\n onSymbolChange?.({ symbol: value } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${value.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n <LeverageBadge symbol={value} />\n </Flex>\n </Flex>\n ),\n },\n {\n title: t(\"common.quantity\"),\n dataIndex: \"position_qty\",\n // onSort: true,\n onSort: (a, b) => {\n return a.position_qty - b.position_qty;\n },\n width: 120,\n className: \"oui-pl-6\",\n // rule: \"price\",\n // numeralProps: {\n // coloring: true,\n // // tick: \"base_dp\",\n // },\n render: renderQuantity,\n // render: (value: string) => (\n // <NumeralWithCtx\n // coloring\n // className=\"oui-font-semibold\"\n // tick=\"base_dp\"\n // >\n // {value}\n // </NumeralWithCtx>\n // ),\n },\n {\n title: t(\"common.avgOpen\"),\n className: \"oui-h-[48px]\",\n width: 120,\n onSort: true,\n dataIndex: \"average_open_price\",\n render: (value: string) => {\n // const ctx = usePositionsRowContext();\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: t(\"common.markPrice\"),\n dataIndex: \"mark_price\",\n width: 120,\n onSort: true,\n className: \"oui-h-[48px]\",\n render: (value: string) => {\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast-54\"\n content={t(\"positions.column.liqPrice.tooltip\")}\n >\n <Text>{t(\"positions.column.liqPrice\")}</Text>\n </Tooltip>\n ),\n width: 100,\n onSort: true,\n dataIndex: \"est_liq_price\",\n render: (value: string) => {\n return Number(value) === 0 ? (\n \"--\"\n ) : (\n <NumeralWithCtx\n rm={Decimal.ROUND_DOWN}\n className={Number(value) > 0 ? \"oui-text-warning-light\" : \"\"}\n >\n {value ?? \"--\"}\n </NumeralWithCtx>\n );\n },\n },\n {\n title: (\n <HoverCard\n content={<UnrealizedPnLPopoverCard />}\n side=\"top\"\n align=\"center\"\n className=\"oui-max-w-[280px] oui-text-2xs\"\n >\n <Text>{t(\"common.unrealizedPnl\")}</Text>\n </HoverCard>\n ),\n dataIndex: \"unrealized_pnl\",\n width: 180,\n onSort: true,\n rule: \"price\",\n numeralProps: {\n coloring: true,\n // tick: \"base_dp\",\n },\n // hint: <UnrealizedPnLPopoverCard />,\n render: (value: string, record) => {\n return (\n <Flex gap={2}>\n <Flex>\n <Text.numeral\n dp={pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"oui-font-semibold\"\n >\n {value}\n </Text.numeral>\n <Text.numeral\n rule=\"percentages\"\n dp={pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"oui-font-semibold\"\n prefix=\"(\"\n suffix=\")\"\n >\n {record.unrealized_pnl_ROI}\n </Text.numeral>\n </Flex>\n <ShareButtonWidget\n position={record}\n sharePnLConfig={sharePnLConfig}\n modalId={SharePnLDialogId}\n />\n </Flex>\n );\n },\n },\n {\n title: t(\"common.tpsl\"),\n dataIndex: \"__\",\n width: 150,\n render: (_: string, record) => (\n <TriggerPrice\n stopLossPrice={record.sl_trigger_price}\n takeProfitPrice={record.tp_trigger_price}\n />\n ),\n },\n\n {\n title: t(\"common.notional\"),\n dataIndex: \"notional\",\n className: \"oui-h-[48px]\",\n width: 100,\n onSort: true,\n render: (value: string) => (\n <Text.numeral dp={pnlNotionalDecimalPrecision}>{value}</Text.numeral>\n ),\n },\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast-54\"\n content={\n <Flex\n direction={\"column\"}\n gap={3}\n className=\"oui-rounded-sm oui-bg-base-8 oui-text-base-contrast-54\"\n >\n <span>{t(\"positions.column.margin.tooltip\")}</span>\n <Divider className=\"oui-w-full\" />\n <span>{t(\"positions.column.margin.formula\")}</span>\n </Flex>\n }\n >\n <Text>{t(\"positions.column.margin\")}</Text>\n </Tooltip>\n ),\n dataIndex: \"mm\",\n onSort: true,\n width: 100,\n rule: \"price\",\n render: (value: string) => <Text.numeral>{value}</Text.numeral>,\n },\n {\n title: t(\"funding.fundingFee\"),\n dataIndex: \"fundingFee\",\n width: 100,\n render: (value, record) => (\n <FundingFeeButton\n fee={value}\n symbol={record.symbol}\n start_t={record.timestamp.toString()}\n end_t={fundingFeeEndTime.current}\n />\n ),\n },\n {\n title: t(\"common.qty\"),\n dataIndex: \"close_qty\",\n width: 100,\n fixed: \"right\",\n render: renderQuantityInput,\n },\n {\n title: t(\"common.price\"),\n dataIndex: \"close_price\",\n width: 100,\n fixed: \"right\",\n render: renderPriceInput,\n // render: (value: string) => <PriceInput />,\n },\n {\n title: null,\n dataIndex: \"close_position\",\n align: \"left\",\n width: 136,\n fixed: \"right\",\n render() {\n return (\n <Flex gapX={2} justify={\"end\"}>\n <ClosePositionWidget />\n <TPSLButton />\n </Flex>\n );\n },\n },\n ],\n [pnlNotionalDecimalPrecision, sharePnLConfig, t],\n );\n return column;\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Badge,\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n SimpleDialog,\n SimpleSheet,\n Text,\n ThrottledButton,\n} from \"@orderly.network/ui\";\nimport { ClosePositionScriptReturn } from \"./closePosition.script\";\nimport {\n LimitConfirmDialog,\n MarketCloseConfirm,\n} from \"./components/confirmDialog\";\nimport { QuantitySlider } from \"./components/quantitySlider\";\n\nexport const MobileClosePosition: FC<ClosePositionScriptReturn> = (props) => {\n const {\n base,\n base_dp,\n quote,\n quote_dp,\n sheetOpen,\n setSheetOpen,\n dialogOpen,\n setDialogOpen,\n quantity,\n price,\n submitting,\n priceErrorMsg,\n quantityErrorMsg,\n disabled,\n isMarketClose,\n position,\n maxQty,\n isBuy,\n } = props;\n const { t } = useTranslation();\n\n const title = isMarketClose\n ? t(\"positions.marketClose\")\n : t(\"positions.limitClose\");\n\n const orderType = isMarketClose\n ? t(\"orderEntry.orderType.market\")\n : t(\"orderEntry.orderType.limit\");\n\n const orderSide = isBuy ? (\n <Badge color=\"success\" size=\"xs\">\n {t(\"common.buy\")}\n </Badge>\n ) : (\n <Badge color=\"danger\" size=\"xs\">\n {t(\"common.sell\")}\n </Badge>\n );\n\n const header = (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text.formatted rule={\"symbol\"} showIcon>\n {position.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n {orderType}\n </Badge>\n {orderSide}\n </Flex>\n </Flex>\n );\n\n const lastPrice = (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text intensity={54}>{t(\"common.lastPrice\")}</Text>\n <Text.numeral dp={quote_dp} suffix={<Text intensity={36}> {quote}</Text>}>\n {position.mark_price}\n </Text.numeral>\n </Flex>\n );\n\n const inputForm = !isMarketClose && (\n <>\n <Flex width={\"100%\"} direction={\"column\"} gap={2}>\n <Input.tooltip\n prefix={t(\"common.price\")}\n suffix={quote}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(quote_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={priceErrorMsg}\n color={priceErrorMsg ? \"danger\" : undefined}\n value={price}\n onValueChange={props.updatePriceChange}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n priceErrorMsg ? \"oui-outline-danger\" : undefined,\n ),\n }}\n />\n <Input.tooltip\n prefix={t(\"common.quantity\")}\n suffix={base}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(base_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={quantityErrorMsg}\n color={quantityErrorMsg ? \"danger\" : undefined}\n value={quantity}\n onBlur={() => props.formatQuantityToBaseTick(quantity)}\n onValueChange={props.updateQuantity}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n quantityErrorMsg ? \"oui-outline-danger\" : undefined,\n ),\n }}\n />\n </Flex>\n </>\n );\n\n const slider = (\n <QuantitySlider\n value={props.sliderValue}\n onValueChange={props.onSliderValueChange}\n base_dp={base_dp}\n max={maxQty}\n onMax={props.onMax}\n />\n );\n\n const footer = (\n <Flex width={\"100%\"} gap={3} mt={2}>\n <Button fullWidth color=\"secondary\" onClick={props.onCloseSheet}>\n {t(\"common.cancel\")}\n </Button>\n\n <ThrottledButton\n fullWidth\n disabled={submitting || disabled}\n loading={submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.onDoubleConfirm();\n }}\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n );\n\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n setSheetOpen(true);\n }}\n >\n {title}\n </Button>\n\n <SimpleSheet title={title} open={sheetOpen} onOpenChange={setSheetOpen}>\n <Flex\n direction={\"column\"}\n gap={3}\n width={\"100%\"}\n itemAlign={\"start\"}\n className=\"oui-text-sm\"\n >\n {header}\n <Divider className=\"oui-w-full\" />\n {lastPrice}\n {inputForm}\n {slider}\n {footer}\n </Flex>\n </SimpleSheet>\n\n <SimpleDialog open={dialogOpen} onOpenChange={setDialogOpen} size=\"xs\">\n {isMarketClose ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n submitting={submitting}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n hideCloseIcon\n />\n ) : (\n <LimitConfirmDialog\n base={base}\n quoteDp={quote_dp}\n quantity={quantity}\n price={price}\n submitting={submitting}\n order={props.closeOrderData}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n hideCloseIcon\n />\n )}\n </SimpleDialog>\n </>\n );\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { Flex, Slider, Text } from \"@orderly.network/ui\";\n\ntype QuantitySliderProps = {\n value: number;\n onValueChange: (value: number) => void;\n base_dp: number;\n max: number;\n onMax: () => void;\n};\n\nexport const QuantitySlider = (props: QuantitySliderProps) => {\n const { t } = useTranslation();\n\n return (\n <>\n <Slider\n showTip\n markCount={4}\n value={[props.value]}\n color=\"primary\"\n onValueChange={(value) => {\n props.onValueChange(value[0]);\n }}\n />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text color=\"primary\" size=\"2xs\">{`${props.value}%`}</Text>\n <Flex gap={1} onClick={props.onMax} className=\"oui-cursor-pointer\">\n <Text size=\"2xs\" color=\"primary\">\n {t(\"common.max\")}\n </Text>\n <Text.numeral\n intensity={54}\n size=\"2xs\"\n dp={props.base_dp}\n padding={false}\n >\n {props.max}\n </Text.numeral>\n </Flex>\n </Flex>\n </>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { OrderType } from \"@orderly.network/types\";\nimport {\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n PopoverContent,\n PopoverRoot,\n PopoverTrigger,\n Select,\n SimpleDialog,\n Text,\n} from \"@orderly.network/ui\";\nimport { ClosePositionScriptReturn } from \"./closePosition.script\";\nimport {\n ConfirmFooter,\n LimitConfirmDialog,\n MarketCloseConfirm,\n} from \"./components/confirmDialog\";\nimport { QuantitySlider } from \"./components/quantitySlider\";\n\nexport const DesktopClosePosition: FC<ClosePositionScriptReturn> = (props) => {\n const {\n position,\n base,\n base_dp,\n quote_dp,\n price,\n quantity,\n submitting,\n dialogOpen,\n setDialogOpen,\n isMarketClose,\n popoverOpen,\n setPopoverOpen,\n maxQty,\n quantityErrorMsg,\n priceErrorMsg,\n isEntirePosition,\n } = props;\n\n const { t } = useTranslation();\n\n // const disabled = isMarketClose ? !quantity : !price || !quantity;\n\n const quantityForm = (\n <Flex width=\"100%\" gap={2} mb={1}>\n <Input.tooltip\n ref={props.quantityInputRef}\n prefix={t(\"common.quantity\")}\n suffix={\n isEntirePosition ? (\n <Text\n size=\"2xs\"\n intensity={54}\n className=\"oui-cursor-pointer oui-px-3\"\n onClick={props.onEntirePosition}\n >\n {t(\"tpsl.entirePosition\")}\n </Text>\n ) : (\n base\n )\n }\n align=\"right\"\n size=\"md\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(base_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={quantityErrorMsg}\n color={quantityErrorMsg ? \"danger\" : undefined}\n value={isEntirePosition ? \"\" : quantity}\n onBlur={() => props.formatQuantityToBaseTick(quantity)}\n onValueChange={props.updateQuantity}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n quantityErrorMsg ? \"oui-outline-danger\" : undefined,\n ),\n }}\n />\n <Button\n onClick={props.onMax}\n size=\"md\"\n variant=\"outlined\"\n className={cn(\n \"oui-text-2xs\",\n isEntirePosition\n ? \"oui-border-primary-light oui-text-primary-light hover:oui-bg-primary-light/20\"\n : \"oui-border-line-12 oui-bg-base-6 oui-text-base-contrast-54 hover:oui-bg-base-5\",\n )}\n >\n {t(\"common.position\")}\n </Button>\n </Flex>\n );\n\n const suffix = (\n <Select.options\n variant=\"text\"\n size=\"md\"\n options={[\n {\n label: t(\"orderEntry.orderType.limit\"),\n value: OrderType.LIMIT,\n },\n {\n label: t(\"orderEntry.orderType.market\"),\n value: OrderType.MARKET,\n },\n ]}\n classNames={{\n // set the width of the trigger to the width of the content\n trigger: \"oui-w-[--radix-select-content-available-width]\",\n }}\n value={props.type}\n onValueChange={(value) => {\n props.updateOrderType(value as OrderType);\n }}\n contentProps={{\n align: \"end\",\n className: \"oui-border oui-border-line-6\",\n }}\n />\n );\n\n const disabledInput = isMarketClose;\n\n const priceForm = (\n <Input.tooltip\n suffix={suffix}\n size=\"md\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(quote_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={priceErrorMsg}\n color={priceErrorMsg ? \"danger\" : undefined}\n value={price}\n onValueChange={props.updatePriceChange}\n placeholder={disabledInput ? \"--\" : \"\"}\n disabled={disabledInput}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n priceErrorMsg ? \"oui-outline-danger\" : undefined,\n // when disabled, override the outline color\n disabledInput ? \"focus-within:oui-outline-line-12\" : undefined,\n ),\n }}\n />\n );\n\n return (\n <>\n <PopoverRoot open={popoverOpen} onOpenChange={setPopoverOpen}>\n <PopoverTrigger\n asChild\n onClick={() => {\n setPopoverOpen(true);\n }}\n >\n <Button variant=\"outlined\" size=\"sm\" color=\"secondary\">\n {t(\"positions.column.close\")}\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className={cn(\n \"oui-w-[360px] oui-p-5\",\n popoverOpen ? \"oui-visible\" : \"oui-invisible\",\n )}\n align=\"end\"\n side=\"top\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <Flex gapY={2} direction=\"column\">\n {quantityForm}\n <QuantitySlider\n value={props.sliderValue}\n onValueChange={props.onSliderValueChange}\n base_dp={base_dp}\n max={maxQty}\n onMax={props.onMax}\n />\n <Divider my={2} intensity={8} className=\"oui-w-full\" />\n {priceForm}\n <ConfirmFooter\n onConfirm={props.onDoubleConfirm}\n onCancel={props.onClosePopover}\n submitting={submitting}\n disabled={props.disabled}\n />\n </Flex>\n </PopoverContent>\n </PopoverRoot>\n\n <SimpleDialog open={dialogOpen} onOpenChange={setDialogOpen} size=\"sm\">\n {isMarketClose ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n submitting={submitting}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n classNames={{\n root: \"oui-items-start\",\n }}\n hideCloseIcon\n />\n ) : (\n <LimitConfirmDialog\n base={base}\n quoteDp={quote_dp}\n quantity={quantity}\n price={price}\n submitting={submitting}\n order={props.closeOrderData}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n hideCloseIcon\n />\n )}\n </SimpleDialog>\n </>\n );\n};\n","import { useScreen } from \"@orderly.network/ui\";\nimport {\n ClosePositionScriptProps,\n useClosePositionScript,\n} from \"./closePosition.script\";\nimport { DesktopClosePosition } from \"./closePosition.ui\";\nimport { MobileClosePosition } from \"./closePositions.mobile.ui\";\n\ntype ClosePositionWidgetProps = Pick<ClosePositionScriptProps, \"type\">;\n\nexport const ClosePositionWidget = (props: ClosePositionWidgetProps) => {\n const state = useClosePositionScript(props);\n const { isMobile } = useScreen();\n\n if (isMobile) {\n return <MobileClosePosition {...state} />;\n }\n\n return <DesktopClosePosition {...state} />;\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useLocalStorage, utils } from \"@orderly.network/hooks\";\nimport { useOrderEntryFormErrorMsg } from \"@orderly.network/react-app\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\nexport type ClosePositionScriptProps = {\n type?: OrderType.MARKET | OrderType.LIMIT;\n};\n\nexport type ClosePositionScriptReturn = ReturnType<\n typeof useClosePositionScript\n>;\n\nexport const useClosePositionScript = (props: ClosePositionScriptProps) => {\n const [sheetOpen, setSheetOpen] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [popoverOpen, setPopoverOpen] = useState(false);\n const [sliderValue, setSliderValue] = useState(100);\n const quantityInputRef = useRef<HTMLInputElement>(null);\n const [orderConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n\n const {\n position,\n onSubmit,\n price,\n quantity,\n closeOrderData,\n submitting,\n updatePriceChange,\n updateOrderType,\n updateQuantity,\n errors,\n baseTick,\n type,\n } = usePositionsRowContext();\n const { quote_dp, base_dp, base, quote } = useSymbolContext();\n const { parseErrorMsg } = useOrderEntryFormErrorMsg(errors);\n\n // buy position quantity is positive, sell position quantity is negative\n const isBuy = position.position_qty > 0;\n\n // we need to use Math.abs to get the absolute value of the position quantity\n const maxQty = Math.abs(position.position_qty);\n\n // close position type: limit or market\n const closeType = props.type || type;\n\n const isMarketClose = closeType === OrderType.MARKET;\n\n const isEntirePosition = maxQty?.toString() === quantity.toString();\n\n useEffect(() => {\n // mobile sheet open, update order type\n if (sheetOpen) {\n updateOrderType(props.type as OrderType);\n }\n }, [props.type, sheetOpen]);\n\n // reset state when sheet is closed\n // useEffect(() => {\n // if (!sheetOpen || !popoverOpen) {\n // // set default slider value to 100 when table edit remove\n // updateQuantity(maxQty?.toString());\n // }\n // }, [sheetOpen, popoverOpen, maxQty]);\n\n const { priceErrorMsg, quantityErrorMsg } = useMemo(() => {\n return {\n priceErrorMsg: parseErrorMsg(\"order_price\"),\n quantityErrorMsg: parseErrorMsg(\"order_quantity\"),\n };\n // parseErrorMsg is changed when errors is changed\n }, [errors]);\n\n const disabled = !!(priceErrorMsg || quantityErrorMsg);\n\n const formatQuantityToBaseTick = useCallback(\n (value: string) => {\n if (baseTick && baseTick > 0) {\n // format quantity to baseTick\n const formatQty = utils.formatNumber(value, baseTick) ?? value;\n updateQuantity(formatQty);\n }\n },\n [baseTick, updateQuantity],\n );\n\n const onSliderValueChange = useCallback(\n (value: number) => {\n setSliderValue(value);\n\n // transform slider value to quantity\n const qty = new Decimal(value)\n .div(100)\n .mul(maxQty)\n .toFixed(base_dp, Decimal.ROUND_DOWN);\n\n formatQuantityToBaseTick(qty);\n },\n [maxQty, base_dp, formatQuantityToBaseTick],\n );\n\n useEffect(() => {\n const qty = Math.min(Number(quantity || 0), maxQty);\n // transform quantity to slider value\n const slider = new Decimal(qty)\n .div(maxQty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n\n setSliderValue(slider);\n }, [quantity]);\n\n const onMax = useCallback(() => {\n updateQuantity(maxQty?.toString());\n }, [maxQty, updateQuantity]);\n\n const onConfirm = useCallback(() => {\n return onSubmit().then((res) => {\n setSheetOpen(false);\n setDialogOpen(false);\n setPopoverOpen(false);\n });\n }, [onSubmit]);\n\n const onDoubleConfirm = useCallback(() => {\n if (!orderConfirm) {\n return onConfirm();\n }\n setDialogOpen(true);\n return Promise.resolve();\n }, [onConfirm, orderConfirm]);\n\n const onCloseSheet = useCallback(() => {\n setSheetOpen(false);\n }, []);\n\n const onCloseDialog = useCallback(() => {\n setDialogOpen(false);\n }, []);\n\n const onClosePopover = useCallback(() => {\n setPopoverOpen(false);\n }, []);\n\n // when click entire position button, set quantity to 0 and focus on input\n const onEntirePosition = useCallback(() => {\n updateQuantity(\"0\");\n quantityInputRef.current?.focus();\n\n setTimeout(() => {\n quantityInputRef.current?.setSelectionRange(0, 1);\n }, 0);\n }, [updateQuantity]);\n\n return {\n position,\n closeOrderData,\n quote_dp,\n base_dp,\n base,\n quote,\n price,\n quantity,\n submitting,\n\n onConfirm,\n onDoubleConfirm,\n updatePriceChange,\n updateQuantity,\n formatQuantityToBaseTick,\n updateOrderType,\n\n sliderValue,\n onSliderValueChange,\n\n priceErrorMsg,\n quantityErrorMsg,\n disabled,\n isMarketClose,\n\n maxQty,\n onMax,\n isBuy,\n isEntirePosition,\n type: closeType,\n quantityInputRef,\n onEntirePosition,\n\n sheetOpen,\n onCloseSheet,\n setSheetOpen,\n\n dialogOpen,\n setDialogOpen,\n onCloseDialog,\n\n popoverOpen,\n setPopoverOpen,\n onClosePopover,\n };\n};\n","import { createContext, useContext } from \"react\";\nimport { API, OrderSide, OrderType } from \"@orderly.network/types\";\n\nexport interface PositionsRowContextState {\n quantity: string;\n price: string;\n type: OrderType;\n side: OrderSide;\n position: API.PositionExt | API.PositionTPSLExt;\n updateQuantity: (value: string) => void;\n updatePriceChange: (value: string) => void;\n updateOrderType: (value: OrderType) => void;\n\n closeOrderData: any;\n\n onSubmit: () => Promise<any>;\n submitting: boolean;\n tpslOrder?: API.AlgoOrder;\n quoteDp?: number;\n baseDp?: number;\n baseTick?: number;\n errors: any | undefined;\n}\n\nexport const PositionsRowContext = createContext(\n {} as PositionsRowContextState,\n);\n\nexport const usePositionsRowContext = () => {\n return useContext(PositionsRowContext);\n};\n","import React from \"react\";\nimport { useSymbolLeverage } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { EditIcon, Text } from \"@orderly.network/ui\";\nimport { PositionTPSLPopover } from \"@orderly.network/ui-tpsl\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\n// ------------ TP/SL Price input end------------\nexport const TPSLButton = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n const { t } = useTranslation();\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n label={t(\"common.tpsl\")}\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing={false}\n />\n );\n};\n\nexport const TPSLEditIcon = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing\n >\n <EditIcon\n opacity={1}\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={16}\n />\n </PositionTPSLPopover>\n );\n};\n\nexport const LeverageBadge = ({ symbol }: { symbol: string }) => {\n if (!symbol) return null;\n return (\n <div className=\"oui-flex oui-h-[18px] oui-items-center oui-gap-1 oui-rounded oui-bg-white/[0.06] oui-px-2 oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n <Text>Cross</Text>\n <LeverageDisplay symbol={symbol} />\n </div>\n );\n};\n\nexport const LeverageDisplay = ({ symbol }: { symbol: string }) => {\n const leverage = useSymbolLeverage(symbol);\n\n return (\n <Text.numeral dp={0} size=\"2xs\" unit=\"X\">\n {leverage !== \"-\" ? leverage : \"--\"}\n </Text.numeral>\n );\n};\n","import { Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { PriceInput } from \"./priceInput\";\nimport { QuantityInput } from \"./quantityInput\";\n\nexport const renderQuantity = (value: number) => {\n const symbolInfo = useSymbolContext();\n return (\n <Text.numeral\n dp={symbolInfo.base_dp}\n rm={Decimal.ROUND_DOWN}\n padding={false}\n coloring\n >\n {value}\n </Text.numeral>\n );\n};\n\nexport const renderQuantityInput = (value: number, record: any) => {\n return <QuantityInput value={record[\"position_qty\"]} />;\n};\n\nexport const renderPriceInput = (value: number) => {\n return <PriceInput />;\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { OrderType } from \"@orderly.network/types\";\nimport {\n CaretDownIcon,\n cn,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Input,\n inputFormatter,\n} from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\nexport const PriceInput = () => {\n const { type, quoteDp, price, updatePriceChange, updateOrderType } =\n usePositionsRowContext();\n const { t } = useTranslation();\n\n return (\n <DropdownMenuRoot>\n <Input\n size=\"sm\"\n value={\n type === OrderType.LIMIT ? price : t(\"orderEntry.orderType.market\")\n }\n onValueChange={(e) => updatePriceChange(e)}\n formatters={[\n inputFormatter.numberFormatter,\n ...(quoteDp ? [inputFormatter.dpFormatter(quoteDp)] : []),\n ]}\n onFocus={() => {\n if (type === OrderType.MARKET) {\n updateOrderType(OrderType.LIMIT);\n }\n }}\n suffix={\n <DropdownMenuTrigger asChild>\n <button className=\"oui-h-full oui-px-1\">\n <CaretDownIcon size={12} color=\"white\" />\n </button>\n </DropdownMenuTrigger>\n }\n classNames={{\n root: cn(\n \"oui-border oui-border-solid oui-border-white/[0.12] oui-outline-none focus-within:oui-outline-primary-light\",\n ),\n }}\n />\n <DropdownMenuContent\n align=\"end\"\n className=\"oui-w-[96px] oui-min-w-[96px]\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DropdownMenuGroup>\n <DropdownMenuItem\n size=\"xs\"\n onSelect={() => {\n updateOrderType(OrderType.MARKET);\n }}\n >\n <span>{t(\"common.marketPrice\")}</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenuRoot>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { utils } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n PopoverRoot,\n PopoverContent,\n PopoverTrigger,\n Flex,\n Text,\n Slider,\n Button,\n inputFormatter,\n} from \"@orderly.network/ui\";\nimport { Input } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\nexport const QuantityInput = (props: { value: number }) => {\n const [sliderValue, setSliderValue] = useState<number>(100);\n const { baseDp, updateQuantity, quantity, baseTick } =\n usePositionsRowContext();\n\n const resetQuantity = (percent: number) => {\n formatQuantityToBaseTick(`${props.value * percent}`);\n };\n\n const formatQuantityToBaseTick = (value: string) => {\n if (baseTick && baseTick > 0) {\n // format quantity to baseTick\n const formatQty = utils.formatNumber(value, baseTick) ?? value;\n updateQuantity(formatQty);\n }\n };\n\n useEffect(() => {\n const maxQty = Math.abs(props.value);\n const qty = Math.min(Number(quantity || 0), maxQty);\n\n // transform quantity to slider value\n const slider = new Decimal(qty)\n .div(maxQty)\n .mul(100)\n .todp(2, Decimal.ROUND_DOWN)\n .toNumber();\n\n setSliderValue(slider);\n }, [quantity, props.value]);\n\n return (\n <PopoverRoot>\n <PopoverTrigger>\n <Input\n size=\"sm\"\n classNames={{\n root: \"oui-outline-none oui-border oui-border-solid oui-border-white/[0.12] focus-within:oui-outline-primary-light\",\n }}\n formatters={[\n inputFormatter.numberFormatter,\n ...(baseDp ? [inputFormatter.dpFormatter(baseDp)] : []),\n ]}\n value={quantity}\n onBlur={(event) => formatQuantityToBaseTick(event.target.value)}\n onValueChange={updateQuantity}\n />\n </PopoverTrigger>\n <PopoverContent\n className=\"oui-w-[360px] oui-rounded-xl\"\n align=\"start\"\n side=\"bottom\"\n onOpenAutoFocus={(event) => {\n event.preventDefault();\n }}\n >\n <Flex p={1} gap={2} width={\"100%\"} itemAlign={\"start\"}>\n <Text size=\"xs\" intensity={98} className=\"oui-min-w-[40px]\">\n {`${sliderValue}%`}\n </Text>\n <Flex direction={\"column\"} width={\"100%\"} gap={2}>\n <Slider\n markCount={4}\n value={[sliderValue]}\n onValueChange={(values) => {\n resetQuantity(values[0] / 100);\n }}\n />\n <PercentButtons onClick={resetQuantity} />\n </Flex>\n </Flex>\n </PopoverContent>\n </PopoverRoot>\n );\n};\n\nconst PercentButtons = (props: { onClick: (value: number) => void }) => {\n const { t } = useTranslation();\n const list = [\n {\n label: \"0%\",\n value: 0,\n },\n {\n label: \"25%\",\n value: 0.25,\n },\n {\n label: \"50%\",\n value: 0.5,\n },\n {\n label: \"75%\",\n value: 0.75,\n },\n {\n label: t(\"common.max\"),\n value: 1,\n },\n ];\n\n return (\n <Flex gap={2} width={\"100%\"}>\n {list.map((item, index) => {\n return (\n <Button\n key={index}\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n onClick={(e) => {\n e.stopPropagation();\n props.onClick(item.value);\n }}\n className=\"oui-w-1/5\"\n >\n {item.label}\n </Button>\n );\n })}\n </Flex>\n );\n};\n","import React from \"react\";\nimport { NumeralProps, Text } from \"@orderly.network/ui\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\n\nexport type TickName = \"quote_dp\" | \"base_dp\";\n\nexport const NumeralWithCtx: React.FC<\n React.PropsWithChildren<\n Omit<NumeralProps, \"precision\" | \"tick\"> & { tick?: TickName }\n >\n> = (props) => {\n const { tick = \"quote_dp\", children, ...rest } = props;\n const symbolInfo = useSymbolContext();\n\n if (!symbolInfo) {\n // TODO i18n\n throw new Error(\"NumeralWithCtx must be used inside SymbolProvider\");\n }\n\n return (\n <Text.numeral as={\"span\" as any} dp={symbolInfo[tick]} {...rest}>\n {children}\n </Text.numeral>\n );\n};\n","import { FC } from \"react\";\nimport { useSymbolsInfo, useAccountInfo } from \"@orderly.network/hooks\";\nimport { positions, account } from \"@orderly.network/perp\";\nimport { modal, ShareIcon } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { ShareButtonState } from \"./shareButton.script\";\n\nexport const ShareButton: FC<ShareButtonState> = (props) => {\n if (props.sharePnLConfig == null) return <></>;\n\n const { position } = props;\n const symbolsInfo = useSymbolsInfo();\n const { data: accountInfo } = useAccountInfo();\n\n const showModal = () => {\n const entity = props.isPositionHistory\n ? (() => {\n // Calculate ROI for position history\n const netPnL = position.netPnL || 0;\n const openPrice = Math.abs(position.avg_open_price);\n const quantity = Math.abs(position.closed_position_qty);\n\n let roi = undefined;\n\n if (\n netPnL !== 0 &&\n quantity !== 0 &&\n openPrice !== 0 &&\n accountInfo &&\n typeof props.leverage === \"number\"\n ) {\n // Calculate IMR for ROI calculation\n const symbolInfo = symbolsInfo[position.symbol];\n const baseIMR = symbolInfo(\"base_imr\");\n const IMR_Factor = accountInfo.imr_factor[position.symbol] || 1;\n\n if (baseIMR) {\n const notional = positions.notional(quantity, openPrice);\n const imr = account.IMR({\n maxLeverage: accountInfo.max_leverage,\n baseIMR: baseIMR,\n IMR_Factor: IMR_Factor,\n positionNotional: notional,\n ordersNotional: 0,\n IMR_factor_power: 4 / 5,\n });\n\n const roiValue = positions.unrealizedPnLROI({\n positionQty: quantity,\n openPrice: openPrice,\n IMR: imr,\n unrealizedPnL: netPnL,\n });\n\n roi = new Decimal(roiValue * 100).toFixed(2, Decimal.ROUND_DOWN);\n }\n }\n\n return {\n side: position.side,\n pnl: netPnL,\n roi: roi,\n openPrice: openPrice,\n closePrice: Math.abs(position.avg_close_price),\n openTime: position.open_timestamp,\n closeTime: position.close_timestamp,\n quantity: position.closed_position_qty,\n };\n })()\n : {\n side: position.position_qty > 0 ? \"LONG\" : \"SHORT\",\n pnl: position.unrealized_pnl,\n roi: new Decimal(position.unrealized_pnl_ROI * 100).toFixed(\n 2,\n Decimal.ROUND_DOWN,\n ),\n openPrice: Math.abs(position.average_open_price),\n markPrice: position.mark_price,\n openTime: position.timestamp,\n quantity: position.position_qty,\n };\n\n modal.show(props.modalId, {\n pnl: {\n entity: {\n symbol: position.symbol,\n ...entity,\n },\n refCode: props.refCode,\n ...props.sharePnLConfig,\n },\n });\n };\n return (\n <button\n type=\"button\"\n onClick={(e: any) => {\n e.stopPropagation();\n showModal();\n }}\n >\n <ShareIcon color=\"white\" opacity={0.54} size={props.iconSize ?? 16} />\n </button>\n );\n};\n","import { useMemo } from \"react\";\nimport { useReferralInfo, useSymbolLeverage } from \"@orderly.network/hooks\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport type UseShareButtonScriptOptions = {\n position: any;\n sharePnLConfig?: SharePnLConfig;\n modalId: string;\n iconSize?: number;\n isPositionHistory?: boolean;\n};\n\nexport const useShareButtonScript = (props: UseShareButtonScriptOptions) => {\n const { sharePnLConfig, position, modalId, iconSize, isPositionHistory } =\n props;\n const { getFirstRefCode } = useReferralInfo();\n const refCode = useMemo(() => {\n return getFirstRefCode()?.code;\n }, [getFirstRefCode]);\n const leverage = useSymbolLeverage(props.position.symbol);\n return {\n iconSize,\n position,\n refCode,\n leverage,\n sharePnLConfig,\n modalId,\n isPositionHistory,\n };\n};\n\nexport type ShareButtonState = ReturnType<typeof useShareButtonScript>;\n","import {\n useShareButtonScript,\n UseShareButtonScriptOptions,\n} from \"./shareButton.script\";\nimport { ShareButton } from \"./shareButton.ui\";\n\nexport type ShareButtonWidgetProps = UseShareButtonScriptOptions;\n\nexport const ShareButtonWidget = (props: ShareButtonWidgetProps) => {\n const state = useShareButtonScript(props);\n return <ShareButton {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { useSymbolsInfo, utils } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AlgoOrderType, API, OrderSide } from \"@orderly.network/types\";\nimport { cn, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\nimport { TPSLEditIcon } from \"./components\";\n\nexport const TriggerPrice: FC<{\n stopLossPrice?: number;\n takeProfitPrice?: number;\n}> = (props) => {\n const { stopLossPrice, takeProfitPrice } = props;\n const { tpslOrder, position } = usePositionsRowContext();\n\n return (\n <TPSLTriggerPrice\n stopLossPrice={stopLossPrice}\n takeProfitPrice={takeProfitPrice}\n direction={\"column\"}\n order={tpslOrder}\n position={position}\n tooltip\n />\n );\n};\n\nexport const TriggerPriceItem: FC<{\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n symbolInfo: API.SymbolExt;\n}> = (props) => {\n const { qty, price, entryPrice, orderSide, orderType, symbolInfo } = props;\n const pnl = utils.priceToPnl(\n {\n qty,\n price,\n entryPrice,\n orderSide,\n orderType,\n },\n {\n symbol: symbolInfo,\n },\n );\n\n const type = orderType === AlgoOrderType.TAKE_PROFIT ? \"TP\" : \"SL\";\n\n return (\n <Flex>\n <Text intensity={54} className=\"oui-mr-1\">{`${type} PnL:`}</Text>\n <Text.formatted\n rule=\"price\"\n className={\n pnl === 0\n ? \"oui-text-base-contrast-36\"\n : pnl > 0\n ? \"oui-text-trade-profit oui-gap-0\"\n : \"oui-text-trade-loss oui-gap-0\"\n }\n prefix={<Text>{pnl === 0 ? \"\" : pnl > 0 ? \"+\" : \"-\"}</Text>}\n suffix={\n <Text intensity={36} className=\"oui-ml-1\">\n USDC\n </Text>\n }\n >{`${Math.abs(pnl)}`}</Text.formatted>\n </Flex>\n );\n};\n\nexport const TPSLTriggerPrice: FC<{\n takeProfitPrice: number | undefined;\n stopLossPrice: number | undefined;\n className?: string;\n direction?: \"row\" | \"column\";\n tooltip?: boolean;\n order?: API.AlgoOrder;\n position?: API.PositionTPSLExt;\n}> = (props) => {\n const { direction = \"row\", order, position } = props;\n // const symbolInfo = useSymbolsInfo()[position?.symbol ?? \"\"]();\n const symbolInfo = useSymbolsInfo();\n const { t } = useTranslation();\n const pnl = useMemo(() => {\n const msgs = [];\n\n if (!props.tooltip || !order || !position) return;\n\n let quantity = order.quantity;\n\n if (quantity === 0) {\n if (order.child_orders[0].type === \"CLOSE_POSITION\") {\n quantity = position.position_qty;\n }\n }\n\n if (!!props.takeProfitPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"tp\"}\n qty={quantity}\n price={props.takeProfitPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.TAKE_PROFIT}\n symbolInfo={symbolInfo[order.symbol]()}\n />,\n );\n }\n\n if (!!props.stopLossPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"sl\"}\n qty={quantity}\n price={props.stopLossPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.STOP_LOSS}\n symbolInfo={symbolInfo[order.symbol]()}\n />,\n );\n }\n\n return <div>{msgs}</div>;\n }, [\n props.takeProfitPrice,\n props.stopLossPrice,\n position?.average_open_price,\n order?.side,\n order?.quantity,\n order?.algo_type,\n ]);\n\n const child = useMemo(() => {\n const children = [];\n\n if (!order?.symbol) return <span>-</span>;\n\n const Label = ({ children }: { children?: string }) => {\n return !props.stopLossPrice || direction === \"column\" ? (\n <Text intensity={54}>{children}</Text>\n ) : (\n \"\"\n );\n };\n\n if (props.takeProfitPrice) {\n children.push(\n <Text.formatted\n className={cn(\n \"oui-text-trade-profit oui-gap-0 oui-decoration-white/20\",\n )}\n key={\"tp\"}\n rule=\"price\"\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={props.takeProfitPrice}\n prefix={\n !props.stopLossPrice || direction === \"column\" ? (\n <Text intensity={54}>{`${t(\"tpsl.tp\")} - `}</Text>\n ) : (\n \"\"\n )\n }\n />,\n );\n }\n if (props.stopLossPrice) {\n children.push(\n <Text.formatted\n key={\"sl\"}\n className={cn(\n \"oui-text-trade-loss oui-gap-0 oui-decoration-white/20 \",\n )}\n rule={\"price\"}\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={props.stopLossPrice}\n prefix={\n !props.takeProfitPrice || direction === \"column\" ? (\n <Text intensity={54}>{`${t(\"tpsl.sl\")} - `}</Text>\n ) : (\n \"\"\n )\n }\n />,\n );\n }\n\n if (children.length === 0) return <Text>-</Text>;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <Text key={\"split\"}>/</Text>);\n }\n\n return children;\n }, [props.takeProfitPrice, props.stopLossPrice, order?.symbol, t]);\n\n const content = (\n <div\n className={cn(\n \"oui-inline-flex oui-text-base-contrast-36\",\n props.direction === \"column\"\n ? \"oui-flex-col\"\n : \"oui-flex-row oui-gap-1\",\n props.className,\n )}\n >\n {child}\n </div>\n );\n\n const showIcon = Array.isArray(child) ? !!child.length : !child;\n\n if (props.tooltip) {\n return (\n <Flex gapX={2}>\n <Tooltip content={pnl}>{content}</Tooltip>\n {showIcon && <TPSLEditIcon />}\n </Flex>\n );\n }\n\n return content;\n};\n","import { FC } from \"react\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { Divider, Flex, Text } from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const UnrealizedPnLPopoverCard: FC<{}> = (props) => {\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\"\n );\n const { t } = useTranslation();\n return (\n <Flex\n direction={\"column\"}\n gap={3}\n className=\"oui-text-base-contrast-54 oui-items-start\"\n >\n <Text>{t(\"positions.column.unrealPnl.tooltip\")}</Text>\n <Divider className=\"oui-w-full\" />\n <div className=\"oui-mb-0\">\n {t(\"positions.column.unrealPnl.priceBasis\")}\n </div>\n <UnPnlPriceBasisCheckBox\n value={unPnlPriceBasis}\n onValueChange={setUnPnlPriceBasic}\n />\n </Flex>\n );\n};\n\nconst UnPnlPriceBasisCheckBox = (props: {\n value: string;\n onValueChange: (value: string) => void;\n}) => {\n const { value, onValueChange } = props;\n const { t } = useTranslation();\n\n // \"markPrice\" | \"lastPrice\"\n return (\n <Flex gap={2}>\n <RadioButton\n sel={value === \"markPrice\"}\n label={t(\"common.markPrice\")}\n value={\"markPrice\"}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === \"lastPrice\"}\n label={t(\"common.lastPrice\")}\n value={\"lastPrice\"}\n onCheckChange={onValueChange}\n />\n </Flex>\n );\n};\n\nconst RadioButton = (props: {\n sel: boolean;\n label: any;\n value: any;\n onCheckChange: (value: any) => void;\n}) => {\n const { sel, label, value, onCheckChange } = props;\n return (\n <Flex\n onClick={(e) => {\n onCheckChange(value);\n e.stopPropagation();\n }}\n gap={1}\n className=\"oui-cursor-pointer\"\n >\n {sel ? <SelIcon /> : <UnselIcon />}\n <Text size=\"xs\" intensity={sel ? 98 : 54}>\n {label}\n </Text>\n </Flex>\n );\n};\n\nconst SelIcon = () => {\n return (\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 className=\"oui-fill-white\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".36\"\n />\n <circle cx=\"8\" cy=\"8\" r=\"3.333\" />\n </svg>\n );\n};\n\nconst UnselIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".54\"\n />\n </svg>\n );\n};\n","import { FC } from \"react\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { cn, Divider, Flex, Grid } from \"@orderly.network/ui\";\nimport { ClosePositionWidget } from \"../../closePosition\";\nimport { TpSLBtnWidget } from \"../tpSLBtn\";\nimport {\n UnrealPnL,\n SymbolToken,\n Qty,\n Margin,\n Notional,\n AvgOpen,\n MarkPrice,\n LiqPrice,\n TPSLPrice,\n FundingFee,\n} from \"./items\";\nimport { PositionCellState } from \"./positionCell.script\";\n\nexport const PositionCell: FC<\n PositionCellState & {\n className?: string;\n }\n> = (props) => {\n const { className, ...rest } = props;\n\n const header = (\n <Flex justify={\"between\"} width={\"100%\"}>\n <SymbolToken {...props} />\n <UnrealPnL {...props} />\n </Flex>\n );\n\n const body = (\n <Grid cols={3} rows={2} gap={2} width={\"100%\"}>\n <Qty {...props} />\n <Margin {...props} />\n <Notional {...props} />\n <AvgOpen {...props} />\n <MarkPrice {...props} />\n <LiqPrice {...props} />\n </Grid>\n );\n\n const buttons = (\n <Grid width={\"100%\"} gap={2} cols={3} rows={1}>\n <TpSLBtnWidget state={props} />\n <ClosePositionWidget type={OrderType.LIMIT} />\n <ClosePositionWidget type={OrderType.MARKET} />\n </Grid>\n );\n\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n p={2}\n r=\"xl\"\n itemAlign={\"start\"}\n className={cn(className, \"oui-bg-base-9\")}\n >\n {header}\n <Divider intensity={6} className=\"oui-w-full\" />\n {body}\n <TPSLPrice {...rest} />\n <FundingFee {...rest} />\n {buttons}\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { Button, Flex, Text, toast } from \"@orderly.network/ui\";\nimport { TpSLBtnState } from \"./tpSLBtn.script\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const TpSLBtn: FC<TpSLBtnState> = (props) => {\n // const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.openTP_SL();\n }}\n >\n {t(\"common.tpsl\")}\n </Button>\n );\n};\n","import { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\nimport { PositionTPSLSheet } from \"@orderly.network/ui-tpsl\";\nimport { usePositionsRowContext } from \"../../positionsRowContext\";\nimport { PositionCellState } from \"../positionCell/positionCell.script\";\n\nexport const useTpSLBtnScript = (props: { state: PositionCellState }) => {\n const symbolInfo: API.SymbolExt = useSymbolsInfo()[props.state.item.symbol]();\n const { tpslOrder } = usePositionsRowContext();\n const { t } = useTranslation();\n\n const openTP_SL = () => {\n modal.sheet({\n title: t(\"common.tpsl\"),\n content: (\n <PositionTPSLSheet\n position={props.state.item}\n symbolInfo={symbolInfo}\n order={tpslOrder}\n isEditing={false}\n />\n ),\n });\n };\n\n return {\n openTP_SL,\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type TpSLBtnState = ReturnType<typeof useTpSLBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useTpSLBtnScript } from \"./tpSLBtn.script\";\nimport { TpSLBtn } from \"./tpSLBtn.ui\";\n\nexport const TpSLBtnWidget = (props: { state: PositionCellState }) => {\n const state = useTpSLBtnScript(props);\n return (<TpSLBtn {...state} />);\n};\n","import { FC, useRef } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Badge, cn, Flex, Statistic, Text } from \"@orderly.network/ui\";\nimport { SharePnLBottomSheetId } from \"@orderly.network/ui-share\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FundingFeeButton } from \"../../../fundingFeeHistory/fundingFeeButton\";\nimport { LeverageBadge } from \"../../desktop/components\";\nimport { ShareButtonWidget } from \"../../desktop/shareButton\";\nimport { PositionCellState } from \"./positionCell.script\";\n\nexport const SymbolToken: FC<PositionCellState> = (props) => {\n const { item } = props;\n const isBuy = item.position_qty > 0;\n const { t } = useTranslation();\n return (\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"2xs\"\n suffix={\n <div className=\"oui-flex oui-items-center oui-gap-1\">\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? t(\"common.long\") : t(\"common.short\")}\n </Badge>\n <LeverageBadge symbol={item.symbol} />\n </div>\n }\n showIcon\n onClick={() => {\n props.onSymbolChange?.({ symbol: item.symbol } as API.Symbol);\n }}\n >\n {item.symbol}\n </Text.formatted>\n );\n};\n\nexport const UnrealPnL: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n return (\n <Flex gap={3}>\n <Flex direction={\"column\"} className=\"oui-text-2xs\" itemAlign={\"end\"}>\n <div>\n <Text intensity={36}>{t(\"common.unrealizedPnl\")}</Text>\n <Text intensity={20}>(USDC)</Text>\n </div>\n\n <Text.numeral\n size=\"xs\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"orderly-font-semibold\"\n suffix={\n <Text.numeral\n rule=\"percentages\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n prefix=\"(\"\n suffix=\")\"\n className={cn(\n \"oui-ml-1\",\n item.unrealized_pnl_ROI > 0\n ? \"oui-text-success-darken\"\n : \"oui-text-danger-darken\",\n )}\n >\n {item.unrealized_pnl_ROI}\n </Text.numeral>\n }\n >\n {item.unrealized_pnl}\n </Text.numeral>\n </Flex>\n <ShareButtonWidget\n position={item}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLBottomSheetId}\n iconSize={12}\n />\n </Flex>\n );\n};\n\nexport const Qty: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.qty\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring>\n {item.position_qty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Margin: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={\n <span>\n {t(\"positions.column.margin\")}\n <Text intensity={20}>(USDC)</Text>\n </span>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} intensity={80}>\n {item.mm}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Notional: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n align=\"end\"\n label={\n <span>\n {t(\"common.notional\")}\n <Text intensity={20}>(USDC)</Text>\n </span>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} intensity={80}>\n {item.notional}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.avgOpen\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} intensity={80}>\n {item.average_open_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MarkPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n return (\n <Statistic\n label={t(\"common.markPrice\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} intensity={80}>\n {item.mark_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const LiqPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n const liqPrice =\n item.est_liq_price && item.est_liq_price > 0 ? item.est_liq_price : \"-\";\n\n return (\n <Statistic\n label={t(\"positions.column.liqPrice\")}\n align=\"end\"\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} color=\"warning\">\n {liqPrice}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const TPSLPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n if (item.tp_trigger_price == null && item.sl_trigger_price == null)\n return <></>;\n\n return (\n <Flex className=\"oui-text-2xs oui-text-base-contrast-36\">\n <Text>{`${t(\"common.tpsl\")}:`}&nbsp;</Text>\n <Flex className=\"oui-gap-[2px]\">\n {item.tp_trigger_price && (\n <Text.numeral color=\"buy\">{item.tp_trigger_price}</Text.numeral>\n )}\n {item.sl_trigger_price && \"/\"}\n {item.sl_trigger_price && (\n <Text.numeral color=\"sell\">{item.sl_trigger_price}</Text.numeral>\n )}\n </Flex>\n </Flex>\n );\n};\n\nexport const FundingFee: FC<PositionCellState> = (props) => {\n const { t } = useTranslation();\n const fundingFeeEndTime = useRef(Date.now().toString());\n return (\n <Flex justify={\"end\"} className=\"oui-w-full oui-text-2xs\">\n <Text intensity={36}>{t(\"funding.fundingFee\")}: </Text>\n <FundingFeeButton\n fee={props.item.fundingFee!}\n symbol={props.item.symbol}\n start_t={props.item.timestamp.toString()}\n end_t={fundingFeeEndTime.current}\n />\n </Flex>\n );\n};\n","import { API } from \"@orderly.network/types\";\nimport { useSymbolContext } from \"../../../../providers/symbolProvider\";\nimport { PositionsProps } from \"../../../../types/types\";\n\ntype PositionCellScriptProps = {\n item: API.PositionTPSLExt;\n index: number;\n} & PositionsProps;\n\nexport type PositionCellState = ReturnType<typeof usePositionCellScript>;\n\nexport const usePositionCellScript = (props: PositionCellScriptProps) => {\n const symbolInfo = useSymbolContext();\n return {\n ...props,\n ...symbolInfo,\n };\n};\n","import { FC } from \"react\";\nimport { usePositionCellScript } from \"./positionCell.script\";\nimport { PositionCell } from \"./positionCell.ui\";\nimport { API } from \"@orderly.network/types\";\nimport { PositionsProps } from \"../../../../types/types\";\n\nexport const PositionCellWidget: FC<\n {\n item: API.PositionTPSLExt;\n index: number;\n className?: string;\n shareIconSize?: number;\n } & PositionsProps\n> = (props) => {\n const state = usePositionCellScript(props);\n return <PositionCell {...state} className={props.className} />;\n};\n","import { FC, PropsWithChildren, useCallback, useEffect, useState } from \"react\";\nimport {\n KeyedMutator,\n usePositionClose,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, OrderType } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { PositionsRowContext } from \"./positionsRowContext\";\n\ntype PositionsRowProviderProps = PropsWithChildren<{\n position: API.PositionExt | API.PositionTPSLExt;\n mutatePositions?: KeyedMutator<API.PositionExt[]>;\n}>;\n\nexport const PositionsRowProvider: FC<PositionsRowProviderProps> = (props) => {\n const { position } = props;\n const { t } = useTranslation();\n const [quantity, setQuantity] = useState<string>(\n Math.abs(position.position_qty).toString(),\n );\n const [price, setPrice] = useState<string>(\"\");\n const [type, setType] = useState<OrderType>(OrderType.MARKET);\n\n useEffect(() => {\n setQuantity(Math.abs(position.position_qty).toString());\n }, [position.position_qty]);\n\n const symbol = position.symbol;\n const symbolsInfo = useSymbolsInfo();\n const symbolInfo = symbolsInfo?.[symbol];\n const quoteDp = symbolInfo(\"quote_dp\");\n const baseDp = symbolInfo(\"base_dp\");\n const baseTick = symbolInfo(\"base_tick\");\n\n const {\n side,\n closeOrderData,\n submit,\n isMutating: submitting,\n errors,\n calculate,\n } = usePositionClose({\n position,\n order: {\n type,\n quantity,\n price,\n },\n });\n\n const updateQuantity = useCallback(\n (value: string) => {\n const newValues = calculate(\n {},\n \"order_quantity\",\n value,\n position.mark_price,\n symbolInfo(),\n );\n setQuantity(newValues.order_quantity!);\n },\n [calculate, symbolsInfo, position.mark_price],\n );\n\n const updatePriceChange = useCallback(\n (value: string) => {\n const newValues = calculate(\n {},\n \"order_price\",\n value,\n position.mark_price,\n symbolInfo(),\n );\n setPrice(newValues.order_price!);\n },\n [calculate, symbolsInfo, position.mark_price],\n );\n\n const updateOrderType = useCallback(\n (type: OrderType) => {\n setType(type);\n // when type is Limit, set price to mark price\n // when type is Market, set price to empty string\n setPrice(type === OrderType.LIMIT ? position.mark_price?.toString() : \"\");\n },\n [position.mark_price],\n );\n\n const onSubmit = useCallback(async () => {\n if (Number(quantity) > symbolInfo(\"base_max\")) {\n toast.error(\n <div>\n {t(\"positions.limitClose.errors.exceed.title\")}\n <br />\n <div className=\"oui-break-normal\">\n {t(\"positions.limitClose.errors.exceed.description\", {\n quantity: quantity,\n symbol: transSymbolformString(symbol, \"base\"),\n maxQuantity: symbolInfo(\"base_max\"),\n })}\n </div>\n </div>,\n );\n return;\n }\n\n return submit()\n .then((res) => {\n if (res.success) {\n props.mutatePositions?.();\n return res;\n }\n\n if (res.message) {\n toast.error(res.message);\n }\n\n throw true;\n })\n .catch((err) => {\n if (err.message) {\n toast.error(err.message);\n }\n return false;\n });\n }, [submit]);\n\n return (\n <PositionsRowContext.Provider\n value={{\n quantity,\n price,\n type,\n side,\n position,\n updatePriceChange,\n updateQuantity,\n updateOrderType,\n tpslOrder: (position as API.PositionTPSLExt).algo_order,\n onSubmit,\n submitting,\n closeOrderData,\n quoteDp,\n baseDp,\n baseTick,\n errors,\n }}\n >\n {props.children}\n </PositionsRowContext.Provider>\n );\n};\n\nfunction transSymbolformString(symbol: string, formatString = \"base\") {\n const arr = symbol.split(\"_\");\n const type = arr[0];\n const base = arr[1];\n const quote = arr[2];\n\n return (formatString ?? \"base-quote\")\n .replace(\"type\", type)\n .replace(\"base\", base)\n .replace(\"quote\", quote);\n}\n","import React from \"react\";\nimport type { PositionsProps } from \"../../types/types\";\nimport { useCombinePositionsScript } from \"./combinePositions.script\";\nimport { usePositionsScript } from \"./positions.script\";\nimport { MobilePositions, Positions, CombinePositions } from \"./positions.ui\";\n\nexport const PositionsWidget: React.FC<PositionsProps> = (props) => {\n const state = usePositionsScript(props);\n return <Positions {...state} />;\n};\n\nexport const MobilePositionsWidget: React.FC<PositionsProps> = (props) => {\n const state = usePositionsScript(props);\n return <MobilePositions {...state} />;\n};\n\nexport const CombinePositionsWidget: React.FC<PositionsProps> = (props) => {\n const state = useCombinePositionsScript(props);\n return <CombinePositions {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n} from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { SymbolProvider } from \"../../providers/symbolProvider\";\nimport { usePositionHistoryColumn } from \"./desktop/usePositionHistoryColumn\";\nimport { PositionHistoryCellWidget } from \"./mobile\";\nimport {\n PositionHistoryExt,\n PositionHistoryState,\n} from \"./positionHistory.script\";\n\ntype PositionHistoryProps = PositionHistoryState & {\n sharePnLConfig?: SharePnLConfig;\n};\n\nexport const PositionHistory: FC<PositionHistoryProps> = (props) => {\n const { onSymbolChange, pagination, pnlNotionalDecimalPrecision } = props;\n const column = usePositionHistoryColumn({\n onSymbolChange,\n pnlNotionalDecimalPrecision,\n sharePnLConfig: props.sharePnLConfig,\n });\n\n const { t } = useTranslation();\n\n const dayLabel: Record<number, string> = useMemo(() => {\n return {\n 1: t(\"common.select.1d\"),\n 7: t(\"common.select.7d\"),\n 30: t(\"common.select.30d\"),\n 90: t(\"common.select.90d\"),\n };\n }, [t]);\n\n return (\n <Flex direction=\"column\" width=\"100%\" height=\"100%\" itemAlign=\"start\">\n {/* <Divider className=\"oui-w-full\" /> */}\n <Flex gap={3}>\n {props.filterItems.length > 0 && (\n <DataFilter\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n )}\n {[1, 7, 30, 90].map((value) => {\n return (\n <button\n key={`item-${value}`}\n className=\"oui-relative oui-px-2 oui-py-[2px] oui-text-sm\"\n >\n <div className=\"oui-z-10\">\n <Text.gradient\n color={props.filterDays === value ? \"brand\" : undefined}\n className={cn(\n \"oui-whitespace-nowrap oui-break-normal\",\n props.filterDays !== value\n ? \"oui-text-base-contrast-54\"\n : \"\",\n )}\n >\n {dayLabel[value] || `${value}D`}\n </Text.gradient>\n </div>\n <div\n className=\"oui-absolute oui-inset-0 oui-rounded oui-opacity-[.12] oui-gradient-primary\"\n onClick={() => {\n props.updateFilterDays(value as any);\n }}\n ></div>\n </button>\n );\n })}\n </Flex>\n\n <AuthGuardDataTable<PositionHistoryExt>\n loading={props.isLoading}\n id=\"oui-desktop-positions-content\"\n columns={column}\n bordered\n dataSource={props.dataSource}\n generatedRowKey={(record: PositionHistoryExt) =>\n `${record.symbol}_${record.position_id}`\n }\n renderRowContainer={(record: any, index: number, children: any) => (\n <SymbolProvider symbol={record.symbol}>{children}</SymbolProvider>\n )}\n manualPagination={false}\n pagination={pagination}\n testIds={{\n body: \"oui-testid-dataList-positionHistory-tab-body\",\n }}\n classNames={{\n root: \"!oui-h-[calc(100%_-_49px)]\",\n }}\n />\n </Flex>\n );\n};\n\nexport const MobilePositionHistory: FC<\n PositionHistoryState & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n }\n> = (props) => {\n return (\n <Grid\n cols={1}\n rows={2}\n className=\"oui-w-full oui-grid-rows-[auto,1fr]\"\n gap={1}\n >\n <Flex gap={2} p={2} className=\"oui-rounded-b-xl oui-bg-base-9\">\n <DataFilter\n className=\"oui-border-none oui-py-0\"\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n </Flex>\n <ListView\n className={cn(\n \"oui-hide-scrollbar oui-w-full oui-space-y-0 oui-overflow-y-hidden\",\n props.classNames?.root,\n )}\n contentClassName={cn(\"!oui-space-y-1\", props.classNames?.content)}\n dataSource={props.dataSource}\n renderItem={(item, index) => (\n <SymbolProvider symbol={item.symbol}>\n <PositionHistoryCellWidget\n item={item}\n index={index}\n onSymbolChange={props.onSymbolChange}\n classNames={{\n root: props.classNames?.cell,\n }}\n sharePnLConfig={props.sharePnLConfig}\n />\n </SymbolProvider>\n )}\n />\n </Grid>\n );\n};\n","import { ReactNode } from \"react\";\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Badge,\n Box,\n capitalizeFirstLetter,\n cn,\n Column,\n Flex,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { SharePnLConfig, SharePnLDialogId } from \"@orderly.network/ui-share\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { FundingFeeButton } from \"../../fundingFeeHistory/fundingFeeButton\";\nimport { ShareButtonWidget } from \"../../positions/desktop/shareButton\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\n\nexport const usePositionHistoryColumn = (props: {\n onSymbolChange?: (symbol: API.Symbol) => void;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const { onSymbolChange, pnlNotionalDecimalPrecision } = props;\n const { t } = useTranslation();\n\n const column = useMemo(\n () =>\n [\n // instrument\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 200,\n onSort: (r1: any, r2: any) => {\n return r1.symbol.localeCompare(r2.symbol);\n },\n render: (value: string, record) => (\n <SymbolInfo record={record} onSymbolChange={onSymbolChange} />\n ),\n },\n // quantity\n {\n title: t(\"positions.history.column.closed&maxClosed\"),\n dataIndex: \"close_maxClose\",\n width: 200,\n render: (value: string, record) => <Quantity record={record} />,\n },\n // net pnl\n {\n title: t(\"positions.history.column.netPnl\"),\n dataIndex: \"netPnL\",\n width: 140,\n onSort: (a, b) => {\n if (a.netPnL == null || b.netPnL == null) return -1;\n return (a.netPnL ?? 0) - (b.netPnL ?? 0);\n },\n render: (_: any, record) => (\n <Flex gapX={1}>\n <NetPnL\n record={record}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n />\n <ShareButtonWidget\n position={record}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLDialogId}\n isPositionHistory\n />\n </Flex>\n ),\n },\n // avg open\n {\n title: t(\"common.avgPrice\"),\n dataIndex: \"avg_open\",\n width: 140,\n render: (_: any, record) => {\n const avgOpen =\n record.avg_open_price != null\n ? Math.abs(record.avg_open_price)\n : \"--\";\n const { quote_dp } = useSymbolContext();\n return (\n <Text.numeral dp={quote_dp} padding={false}>\n {avgOpen}\n </Text.numeral>\n );\n },\n },\n // avg close\n {\n title: t(\"common.avgClose\"),\n dataIndex: \"avg_close\",\n width: 175,\n render: (_: any, record) => {\n const avgClose =\n record.avg_close_price != null\n ? Math.abs(record.avg_close_price)\n : \"--\";\n const { quote_dp } = useSymbolContext();\n return (\n <Text.numeral dp={quote_dp} padding={false}>\n {avgClose}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"funding.fundingFee\"),\n dataIndex: \"accumulated_funding_fee\",\n render: (value, record) => {\n return (\n <FundingFeeButton\n fee={-value}\n symbol={record.symbol}\n start_t={record.open_timestamp.toString()}\n end_t={record.close_timestamp?.toString()}\n />\n );\n },\n },\n // time opened\n {\n title: t(\"positions.history.column.timeOpened\"),\n dataIndex: \"open_timestamp\",\n width: 175,\n onSort: true,\n render: (_: any, record) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {record.open_timestamp}\n </Text.formatted>\n ),\n },\n // time close\n {\n title: t(\"positions.history.column.timeClosed\"),\n dataIndex: \"close_timestamp\",\n width: 175,\n onSort: true,\n render: (_: any, record) => {\n if (record.position_status == \"closed\" && record.close_timestamp) {\n return (\n <Text.formatted\n rule={\"date\"}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n >\n {record.close_timestamp ?? \"--\"}\n </Text.formatted>\n );\n }\n return \"--\";\n },\n },\n // updated time\n {\n title: t(\"positions.history.column.updatedTime\"),\n dataIndex: \"last_update_time\",\n width: 175,\n onSort: true,\n render: (_: any, record) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {record.last_update_time}\n </Text.formatted>\n ),\n },\n ] as Column<PositionHistoryExt>[],\n [pnlNotionalDecimalPrecision, t],\n );\n\n return column;\n};\n\nexport const SymbolInfo = (props: {\n record: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}) => {\n const { record, onSymbolChange } = props;\n const { t } = useTranslation();\n\n const tags = useMemo(() => {\n const list: ReactNode[] = [];\n\n const status = record.position_status;\n\n const renderStatus = () => {\n if (status === \"closed\") {\n return t(\"positions.history.status.closed\");\n } else if (status === \"partial_closed\") {\n return t(\"positions.history.status.partialClosed\");\n } else {\n return capitalizeFirstLetter(status.replace(\"_\", \" \"));\n }\n };\n\n list.push(\n <Badge\n color={status !== \"closed\" ? \"primaryLight\" : \"neutral\"}\n size=\"xs\"\n className=\"oui-break-normal oui-whitespace-nowrap\"\n >\n {renderStatus()}\n </Badge>,\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge color={\"danger\"} size=\"xs\">\n {/* {capitalizeFirstLetter(record.type)} */}\n {t(\"positions.history.type.adl\")}\n </Badge>,\n );\n } else if (record.type === \"liquidated\") {\n list.push(\n <Tooltip\n className=\"oui-min-w-[204px] oui-bg-base-5\"\n arrow={{\n className: \"oui-fill-base-5\",\n }}\n // @ts-ignore\n content={\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {record.liquidation_id != null && (\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.liquidationId\")}\n </Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.liquidatorFee\")}\n </Text>\n <Text color=\"lose\">\n {record.liquidator_fee > 0 && \"-\"}\n {commifyOptional(record.liquidator_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.insFundFee\")}\n </Text>\n <Text color=\"lose\">\n {record.insurance_fund_fee > 0 && \"-\"}\n {commifyOptional(record.insurance_fund_fee)}\n </Text>\n </Flex>\n </Flex>\n }\n >\n <div>\n <Badge size=\"xs\" color=\"danger\" className=\"oui-cursor-pointer\">\n <span className=\"oui-underline oui-decoration-dashed oui-decoration-[1px]\">\n {t(\"positions.history.type.liquidated\")}\n </span>\n </Badge>\n </div>\n </Tooltip>,\n );\n }\n\n return list;\n }, [record, t]);\n\n return (\n <Flex gap={2} height={48}>\n <Box\n width={4}\n height={38}\n className={cn(\n \"oui-rounded-[1px] oui-shrink-0\",\n record.side === \"LONG\" ? \"oui-bg-trade-profit\" : \"oui-bg-trade-loss\",\n )}\n />\n\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n <Text.formatted\n // rule={\"symbol\"}\n formatString=\"base-type\"\n className=\"oui-cursor-pointer\"\n onClick={(e) => {\n onSymbolChange?.({ symbol: record.symbol } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${record.symbol.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n <Flex gap={1}>{tags}</Flex>\n </Flex>\n </Flex>\n );\n};\n\nexport const Quantity = (props: { record: PositionHistoryExt }) => {\n const { record } = props;\n\n const { base_dp } = useSymbolContext();\n\n return (\n <Flex\n gap={1}\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-overflow-hidden oui-whitespace-nowrap oui-text-ellipsis\"\n >\n <Text.numeral dp={base_dp} padding={false}>\n {Math.abs(record.closed_position_qty)}\n </Text.numeral>\n <Text.numeral dp={base_dp} padding={false} className=\"oui-truncate\">\n {Math.abs(record.max_position_qty)}\n </Text.numeral>\n {/* <Text className=\"oui-truncate\">{`${record.symbol.split(\"_\")[1]}`}</Text> */}\n </Flex>\n );\n};\n\nexport const NetPnL = (props: {\n record: PositionHistoryExt;\n pnlNotionalDecimalPrecision?: number;\n}) => {\n const { record, pnlNotionalDecimalPrecision } = props;\n const { t } = useTranslation();\n const netPnl = record.netPnL != null ? record.netPnL : undefined;\n\n const text = () => (\n <Text.numeral\n dp={pnlNotionalDecimalPrecision}\n color={\n record.netPnL != null\n ? record.netPnL > 0\n ? \"profit\"\n : \"lose\"\n : undefined\n }\n className={\n netPnl == null\n ? \"\"\n : \"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n }\n >\n {netPnl ?? \"--\"}\n </Text.numeral>\n );\n\n if (record.netPnL == null) return text();\n\n return (\n <Tooltip\n // open={record.max_position_qty == 3.22}\n delayDuration={200}\n // @ts-ignore\n content={\n <Flex direction={\"column\"} itemAlign={\"start\"} className=\"oui-text-2xs\">\n <Text intensity={80}>{t(\"positions.history.column.netPnl\")}</Text>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"common.realizedPnl\")}</Text>\n <Text\n color={record.realized_pnl >= 0 ? \"profit\" : \"lose\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(record.realized_pnl)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"funding.fundingFee\")}</Text>\n <Text\n color={record.accumulated_funding_fee > 0 ? \"lose\" : \"profit\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(-record.accumulated_funding_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.netPnl.tradingFee\")}\n </Text>\n <Text\n color={record.trading_fee > 0 ? \"lose\" : \"profit\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(-record.trading_fee)}\n </Text>\n </Flex>\n </Flex>\n }\n className=\"oui-min-w-[204px] oui-bg-base-5\"\n arrow={{\n className: \"oui-fill-base-5\",\n }}\n >\n <div>{text()}</div>\n </Tooltip>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Divider, Flex, Grid, modal, Text } from \"@orderly.network/ui\";\nimport { SharePnLBottomSheetId } from \"@orderly.network/ui-share\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { ShareButtonWidget } from \"../../positions/desktop/shareButton\";\nimport {\n PositionHistoryType,\n ClosedQty,\n SymbolToken,\n OpenTime,\n AvgOpen,\n AvgClosed,\n ClosedTime,\n MaxClosedQty,\n FundingFee,\n} from \"./items\";\nimport { PositionHistoryCellState } from \"./positionHistoryCell.script\";\n\nexport const PositionHistoryCell: FC<PositionHistoryCellState> = (props) => {\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n itemAlign={\"start\"}\n className={props.classNames?.root}\n >\n <Header {...props} />\n <Divider intensity={6} className=\"oui-w-full\" />\n <Body {...props} />\n </Flex>\n );\n};\n\nexport const Header: FC<PositionHistoryCellState> = (props) => {\n const { t } = useTranslation();\n\n const showAlert = () => {\n const { item: record } = props;\n\n modal.alert({\n title: t(\"positions.history.column.netPnl\"),\n message: (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n >\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"common.realizedPnl\")}</Text>\n <Text color={record.realized_pnl >= 0 ? \"profit\" : \"lose\"}>\n {commifyOptional(record.realized_pnl)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"funding.fundingFee\")}</Text>\n <Text\n color={record.accumulated_funding_fee > 0 ? \"lose\" : \"profit\"}\n >\n {commifyOptional(-record.accumulated_funding_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.netPnl.tradingFee\")}\n </Text>\n <Text color={record.trading_fee > 0 ? \"lose\" : \"profit\"}>\n {commifyOptional(-record.trading_fee)}\n </Text>\n </Flex>\n </Flex>\n ),\n });\n };\n\n return (\n <Flex gap={1} width={\"100%\"}>\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1\"\n gap={1}\n >\n <SymbolToken {...props} />\n <PositionHistoryType {...props} />\n </Flex>\n <Flex direction={\"column\"} itemAlign={\"end\"} className=\"oui-flex-1\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"positions.history.column.netPnl\")}\n </Text>\n <Flex gapX={1}>\n <button onClick={showAlert}>\n <Text.numeral size=\"xs\" coloring>\n {props.item.netPnL ?? \"--\"}\n </Text.numeral>\n </button>\n\n <ShareButtonWidget\n position={props.item}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLBottomSheetId}\n iconSize={12}\n isPositionHistory\n />\n </Flex>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<PositionHistoryCellState> = (props) => {\n return (\n <div className=\"oui-w-full\">\n <Grid\n cols={3}\n rows={2}\n width={\"100%\"}\n gap={0}\n className=\"oui-grid-cols-[1fr,1fr,135px]\"\n >\n <ClosedQty {...props} />\n <MaxClosedQty {...props} />\n <OpenTime {...props} />\n <AvgOpen {...props} />\n <AvgClosed {...props} />\n <ClosedTime {...props} />\n </Grid>\n <FundingFee {...props} />\n </div>\n );\n};\n","import { FC, ReactNode, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Badge,\n capitalizeFirstLetter,\n Flex,\n modal,\n Statistic,\n Text,\n} from \"@orderly.network/ui\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { FundingFeeButton } from \"../../fundingFeeHistory/fundingFeeButton\";\nimport { PositionHistorySide } from \"../positionHistory.script\";\nimport { PositionHistoryCellState } from \"./positionHistoryCell.script\";\n\nexport const SymbolToken: FC<PositionHistoryCellState> = (props) => {\n const { side, symbol } = props.item;\n const { t } = useTranslation();\n const isBuy = side === PositionHistorySide.buy;\n\n return (\n <Text.formatted\n intensity={80}\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"sm\"\n // @ts-ignore\n prefix={\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? t(\"common.buy\") : t(\"common.sell\")}\n </Badge>\n }\n onClick={() => {\n props.onSymbolChange?.({ symbol: symbol } as API.Symbol);\n }}\n // showIcon\n >\n {symbol}\n </Text.formatted>\n );\n};\n\nexport const Time: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n\n return (\n <Text.formatted\n rule={\"date\"}\n formatString=\"yyyy-MM-dd hh:mm:ss\"\n intensity={36}\n size=\"2xs\"\n >\n {item.last_update_time}\n </Text.formatted>\n );\n};\n\nexport const PositionHistoryType: FC<PositionHistoryCellState> = (props) => {\n const { item: record } = props;\n const { t } = useTranslation();\n\n const showAlert = () => {\n modal.alert({\n title: t(\"positions.liquidation\"),\n message: (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n >\n {record.liquidation_id != null && (\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.liquidationId\")}</Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.liquidatorFee\")}</Text>\n <Text color=\"lose\">\n {record.liquidator_fee > 0 && \"-\"}\n {commifyOptional(record.liquidator_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.insFundFee\")}</Text>\n <Text color=\"lose\">\n {record.insurance_fund_fee > 0 && \"-\"}\n {commifyOptional(record.insurance_fund_fee)}\n </Text>\n </Flex>\n </Flex>\n ),\n });\n };\n\n const tags = useMemo(() => {\n const list: ReactNode[] = [];\n\n const status = record.position_status;\n\n const renderStatus = () => {\n if (status === \"closed\") {\n return t(\"positions.history.status.closed\");\n } else if (status === \"partial_closed\") {\n return t(\"positions.history.status.partialClosed\");\n } else {\n return capitalizeFirstLetter(status.replace(\"_\", \" \"));\n }\n };\n\n list.push(\n <Badge color={status !== \"closed\" ? \"primaryLight\" : \"neutral\"} size=\"xs\">\n {renderStatus()}\n </Badge>,\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge color={\"danger\"} size=\"xs\">\n {/* {capitalizeFirstLetter(record.type)} */}\n {t(\"positions.history.type.adl\")}\n </Badge>,\n );\n } else if (record.type === \"liquidated\") {\n list.push(\n <Badge\n size=\"xs\"\n color=\"danger\"\n className=\"oui-cursor-pointer\"\n onClick={showAlert}\n >\n <span className=\"oui-underline oui-decoration-dashed oui-decoration-[1px]\">\n {/* {capitalizeFirstLetter(record.type)} */}\n {t(\"positions.history.type.liquidated\")}\n </span>\n </Badge>,\n );\n }\n\n return list;\n }, [record]);\n\n return <Flex gap={1}>{tags}</Flex>;\n};\n\nexport const ClosedQty: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const closedQty =\n item.closed_position_qty != null\n ? Math.abs(item.closed_position_qty)\n : \"--\";\n\n return (\n <Statistic\n // label={\n // <Text>Closed{<Text intensity={20}>{` (${props.base})`}</Text>}</Text>\n // }\n label={<Text>{t(\"positions.history.column.closed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring intensity={80}>\n {closedQty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MaxClosedQty: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const maxClosedQty =\n item.max_position_qty != null ? Math.abs(item.max_position_qty) : \"--\";\n return (\n <Statistic\n // label={\n // <Text>\n // Max closed{<Text intensity={20}>{` (${props.base})`}</Text>}\n // </Text>\n // }\n label={<Text>{t(\"positions.history.column.maxClosed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring intensity={80}>\n {maxClosedQty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const avgOpen =\n item.avg_open_price != null ? Math.abs(item.avg_open_price) : \"--\";\n const { t } = useTranslation();\n return (\n <Statistic\n label={\n <Flex gap={1}>\n {t(\"common.avgOpen\")}\n <Text intensity={20}>(USDC)</Text>\n </Flex>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} padding={false} coloring intensity={80}>\n {avgOpen}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgClosed: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const avgClose =\n item.avg_close_price != null ? Math.abs(item.avg_close_price) : \"--\";\n const { t } = useTranslation();\n return (\n <Statistic\n label={\n <Flex gap={1}>\n {t(\"common.avgClose\")}\n <Text intensity={20}>(USDC)</Text>\n </Flex>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} padding={false} coloring intensity={80}>\n {avgClose}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const OpenTime: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={<Text>{t(\"positions.history.column.timeOpened\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n <Text.formatted\n intensity={80}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n rule={\"date\"}\n >\n {item.open_timestamp}\n </Text.formatted>\n </Statistic>\n );\n};\nexport const ClosedTime: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const child =\n item.position_status == \"closed\" && item.close_timestamp ? (\n <Text.formatted\n intensity={80}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n rule={\"date\"}\n >\n {item.close_timestamp}\n </Text.formatted>\n ) : (\n \"--\"\n );\n\n return (\n <Statistic\n label={<Text>{t(\"positions.history.column.timeClosed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n {child}\n </Statistic>\n );\n};\n\nexport const FundingFee: FC<PositionHistoryCellState> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n justify={\"end\"}\n className=\"oui-text-2xs oui-w-full oui-py-2 oui-gap-1 oui-gap-1\"\n >\n <Text intensity={36}>{t(\"funding.fundingFee\")}: </Text>\n <FundingFeeButton\n fee={-props.item.accumulated_funding_fee}\n symbol={props.item.symbol}\n start_t={props.item.open_timestamp.toString()}\n end_t={props.item.close_timestamp?.toString()}\n />\n </Flex>\n );\n};\n","import {\n useAccount,\n usePrivateQuery,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { PositionHistoryProps } from \"./positionHistory.widget\";\nimport { API } from \"@orderly.network/types\";\nimport { usePagination, useScreen } from \"@orderly.network/ui\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { differenceInDays, setDate, setHours, subDays } from \"date-fns\";\nimport {\n areDatesEqual,\n formatDatePickerRange,\n offsetEndOfDay,\n offsetStartOfDay,\n} from \"../../utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type PositionHistoryExt = API.PositionHistory & {\n netPnL?: number;\n};\n\nexport enum PositionHistorySide {\n all = \"all\",\n buy = \"LONG\",\n sell = \"SHORT\",\n}\nexport enum PositionHistoryStatus {\n all = \"all\",\n closed = \"closed\",\n partial_closed = \"partial_closed\",\n}\n\nexport const usePositionHistoryScript = (props: PositionHistoryProps) => {\n const { onSymbolChange, symbol, pnlNotionalDecimalPrecision } = props;\n const { state } = useAccount();\n\n const { data, isLoading } = usePrivateQuery<PositionHistoryExt[]>(\n symbol\n ? `/v1/position_history?symbol=${symbol}&limit=1000`\n : \"/v1/position_history?limit=1000\",\n {\n formatter(data) {\n return (data.rows ?? null)?.map(\n (item: API.PositionHistory): PositionHistoryExt => {\n if (\n item.realized_pnl != null &&\n item.accumulated_funding_fee != null &&\n item.trading_fee != null\n ) {\n const netPnL =\n item.realized_pnl -\n item.accumulated_funding_fee -\n item.trading_fee;\n return {\n ...item,\n netPnL: netPnL,\n };\n }\n return item;\n }\n );\n },\n revalidateOnFocus: true,\n }\n );\n\n const { pagination, setPage } = usePagination({\n pageSize: 10,\n });\n\n const {\n status,\n side,\n dateRange,\n filterDays,\n updateFilterDays,\n filterItems,\n onFilter,\n } = useFilter();\n\n useEffect(() => {\n setPage(1);\n }, [status, side, dateRange, filterDays, symbol]);\n\n const filterData = useMemo(() => {\n if (data == null) return data;\n\n return data.filter((item) => {\n const sideFilter =\n side === PositionHistorySide.all\n ? true\n : item.side.toLowerCase() === side.toLowerCase();\n const statusFilter =\n status === PositionHistoryStatus.all\n ? true\n : item.position_status.toLowerCase() === status.toLowerCase();\n\n // const time = item.close_timestamp ?? item?.last_update_timestamp ?? item.open_timestamp;\n const time = item?.last_update_time ?? item.open_timestamp;\n const dateFilter =\n dateRange.from && dateRange.to\n ? time >= dateRange.from.getTime() && time <= dateRange.to.getTime()\n : true;\n\n const symbolFilter = symbol ? item.symbol == symbol : true;\n\n return sideFilter && statusFilter && dateFilter && symbolFilter;\n });\n }, [status, side, dateRange, data, symbol]);\n\n const dataSource = useDataTap(filterData, {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n fallbackData: [],\n });\n\n return {\n dataSource,\n isLoading,\n onSymbolChange,\n pagination,\n filterItems,\n onFilter,\n symbol,\n filterDays,\n updateFilterDays,\n pnlNotionalDecimalPrecision,\n };\n};\n\nconst useFilter = () => {\n const { t } = useTranslation();\n\n const [status, setStatus] = useState<PositionHistoryStatus>(\n PositionHistoryStatus.all\n );\n const [side, setSide] = useState<PositionHistorySide>(\n PositionHistorySide.all\n );\n const defaultRange = formatDatePickerRange({\n to: offsetEndOfDay(new Date()),\n from: offsetStartOfDay(subDays(new Date(), 89)),\n });\n\n /// default is 90d\n const [filterDays, setFilterDays] = useState<1 | 7 | 30 | 90 | null>(90);\n\n const [dateRange, setDateRange] = useState<{\n from?: Date;\n to?: Date;\n }>(defaultRange);\n\n const updateFilterDays = (days: 1 | 7 | 30 | 90) => {\n setFilterDays(days);\n setDateRange({\n from: offsetStartOfDay(subDays(new Date(), days - 1)),\n to: offsetEndOfDay(new Date()),\n });\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"side\") {\n setSide(filter.value);\n }\n\n if (filter.name === \"status\") {\n setStatus(filter.value);\n }\n\n if (filter.name === \"dateRange\") {\n const newDateRange = formatDatePickerRange(filter.value);\n setDateRange(newDateRange);\n if (newDateRange.from && newDateRange.to) {\n const diffDays =\n Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) + 1;\n const dateRangeMap: { [key: number]: { from: Date; to: Date } } = {\n 1: {\n from: offsetStartOfDay(new Date())!,\n to: offsetEndOfDay(new Date())!,\n },\n 7: {\n from: offsetStartOfDay(subDays(new Date(), 6))!,\n to: offsetEndOfDay(new Date())!,\n },\n 30: {\n from: offsetStartOfDay(subDays(new Date(), 29))!,\n to: offsetEndOfDay(new Date())!,\n },\n 90: {\n from: offsetStartOfDay(subDays(new Date(), 89))!,\n to: offsetEndOfDay(new Date())!,\n },\n };\n\n const dateRange = dateRangeMap[diffDays];\n if (\n dateRange &&\n areDatesEqual(dateRange.from, newDateRange.from) &&\n areDatesEqual(dateRange.to, newDateRange.to)\n ) {\n setFilterDays(diffDays as any);\n } else {\n setFilterDays(null);\n }\n }\n }\n };\n\n const { isMobile } = useScreen();\n\n const filterItems = useMemo((): any[] => {\n const sideFilter = {\n type: \"select\",\n name: \"side\",\n options: [\n {\n label: t(\"common.side.all\"),\n value: \"all\",\n },\n {\n label: t(\"common.buy\"),\n value: PositionHistorySide.buy,\n },\n {\n label: t(\"common.sell\"),\n value: PositionHistorySide.sell,\n },\n ],\n value: side,\n };\n\n const dateRangeFilter = {\n type: \"range\",\n name: \"dateRange\",\n value: dateRange,\n fromDate: offsetStartOfDay(subDays(new Date(), 89)),\n toDate: offsetEndOfDay(new Date()),\n };\n\n const statusFilter = {\n type: \"select\",\n name: \"status\",\n options: [\n {\n label: t(\"common.status.all\"),\n value: \"all\",\n },\n {\n label: t(\"positions.history.status.closed\"),\n value: PositionHistoryStatus.closed,\n },\n {\n label: t(\"positions.history.status.partialClosed\"),\n value: PositionHistoryStatus.partial_closed,\n },\n ],\n value: status,\n };\n\n if (isMobile) {\n return [sideFilter, statusFilter];\n }\n return [sideFilter, statusFilter, dateRangeFilter];\n }, [side, status, dateRange]);\n\n return {\n filterItems,\n onFilter,\n side,\n dateRange,\n status,\n filterDays,\n updateFilterDays,\n };\n};\n\nexport type PositionHistoryState = ReturnType<typeof usePositionHistoryScript>;\n","import { differenceInDays, setDate, setHours, subDays } 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\nexport function offsetStartOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(0, 0, 0, 0);\n return newDate;\n}\n\nexport function offsetEndOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(23, 59, 59, 999);\n return newDate;\n}\n\nexport const formatDatePickerRange = (option: { from?: Date; to?: Date }) => ({\n from: offsetStartOfDay(option.from),\n to: offsetEndOfDay(option.to ?? option.from),\n});\n\nexport const areDatesEqual = (date1: Date, date2: Date): boolean => {\n return date1.getTime() === date2.getTime();\n};\n","import { API } from \"@orderly.network/types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { SymbolInfo } from \"../desktop/usePositionHistoryColumn\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const usePositionHistoryCellScript = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const symbolInfo = useSymbolContext();\n\n return {\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type PositionHistoryCellState = ReturnType<\n typeof usePositionHistoryCellScript\n>;\n","import { API } from \"@orderly.network/types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { usePositionHistoryCellScript } from \"./positionHistoryCell.script\";\nimport { PositionHistoryCell } from \"./positionHistoryCell.ui\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const PositionHistoryCellWidget = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const state = usePositionHistoryCellScript(props);\n return <PositionHistoryCell {...state} />;\n};\n","import { API } from \"@orderly.network/types\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { usePositionHistoryScript } from \"./positionHistory.script\";\nimport { MobilePositionHistory, PositionHistory } from \"./positionHistory.ui\";\n\nexport type PositionHistoryProps = {\n onSymbolChange?: (symbol: API.Symbol) => void;\n symbol?: string;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n};\n\nexport const PositionHistoryWidget = (props: PositionHistoryProps) => {\n const state = usePositionHistoryScript(props);\n return <PositionHistory {...state} sharePnLConfig={props.sharePnLConfig} />;\n};\n\nexport const MobilePositionHistoryWidget = (\n props: PositionHistoryProps & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n },\n) => {\n const { classNames, ...rest } = props;\n const state = usePositionHistoryScript(rest);\n return (\n <MobilePositionHistory\n {...state}\n classNames={classNames}\n sharePnLConfig={props.sharePnLConfig}\n />\n );\n};\n","import { FC } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport {\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n} from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { useLiquidationColumn } from \"./desktop/useLiquidationColumn\";\nimport { LiquidationState } from \"./liquidation.script\";\nimport { LiquidationCellWidget } from \"./mobile\";\n\nexport const Liquidation: FC<LiquidationState> = (props) => {\n const column = useLiquidationColumn({});\n\n return (\n <Flex direction=\"column\" width=\"100%\" height=\"100%\" itemAlign=\"start\">\n {/* <Divider className=\"oui-w-full\" /> */}\n <Flex gap={3}>\n {props.filterItems.length > 0 && (\n <DataFilter\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n )}\n {[1, 7, 30, 90].map((value) => {\n return (\n <button\n key={`item-${value}`}\n className=\"oui-relative oui-px-2 oui-py-[2px] oui-text-sm\"\n >\n <div className=\"oui-z-10\">\n <Text.gradient\n color={props.filterDays === value ? \"brand\" : undefined}\n className={\n props.filterDays !== value\n ? \"oui-text-base-contrast-54\"\n : \"\"\n }\n >\n {`${value}D`}\n </Text.gradient>\n </div>\n <div\n className=\"oui-absolute oui-inset-0 oui-rounded oui-opacity-[.12] oui-gradient-primary\"\n onClick={() => {\n props.updateFilterDays(value as any);\n }}\n ></div>\n </button>\n );\n })}\n </Flex>\n\n <AuthGuardDataTable<API.Liquidation>\n loading={props.isLoading}\n id=\"oui-desktop-liquidation-content\"\n columns={column}\n bordered\n dataSource={props.dataSource}\n generatedRowKey={(record: API.Liquidation) =>\n `${record.liquidation_id}`\n }\n // manualPagination={false}\n pagination={props.pagination}\n testIds={{\n body: \"oui-testid-dataList-liquidation-tab-body\",\n }}\n classNames={{\n root: \"!oui-h-[calc(100%_-_49px)]\",\n }}\n />\n </Flex>\n );\n};\n\nexport const MobileLiquidation: FC<\n LiquidationState & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }\n> = (props) => {\n return (\n <Grid\n cols={1}\n rows={2}\n className=\"oui-w-full oui-grid-rows-[auto,1fr]\"\n gap={1}\n >\n <Flex gap={2} p={2} className=\"oui-rounded-b-xl oui-bg-base-9\">\n <DataFilter\n className=\"oui-border-none oui-py-0\"\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n </Flex>\n <ListView\n className={cn(\n \"oui-hide-scrollbar oui-w-full oui-space-y-0 oui-overflow-y-hidden\",\n props.classNames?.root,\n )}\n contentClassName={cn(\"!oui-space-y-1\", props.classNames?.content)}\n dataSource={props.dataSource}\n loadMore={props.loadMore}\n renderItem={(item, index) => (\n <LiquidationCellWidget\n item={item}\n index={index}\n classNames={{\n root: props.classNames?.cell,\n }}\n />\n )}\n />\n </Grid>\n );\n};\n","import { API } from \"@orderly.network/types\";\nimport { Column, Flex, Text } from \"@orderly.network/ui\";\nimport { FC, useMemo } from \"react\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const useLiquidationColumn = (props: {}) => {\n const { t } = useTranslation();\n\n const column = useMemo(\n () =>\n [\n // Time\n {\n title: t(\"common.time\"),\n dataIndex: \"timestamp\",\n fixed: \"left\",\n width: 202,\n render: (value: string) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {value}\n </Text.formatted>\n ),\n },\n // Liquidation id\n {\n title: t(\"positions.Liquidation.column.liquidationId\"),\n dataIndex: \"liquidation_id\",\n width: 202,\n render: (value) => <Text>{value}</Text>,\n },\n // net pnl\n {\n title: t(\"positions.Liquidation.column.insFundTransfer\"),\n dataIndex: \"transfer_amount_to_insurance_fund\",\n width: 202,\n render: (value) => {\n return <Text>{commifyOptional(value)}</Text>;\n },\n },\n // Symbol\n {\n title: t(\"common.symbol\"),\n dataIndex: \"Symbol\",\n width: 202,\n render: (_: any, record) => (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n <Text.formatted rule={\"symbol\"} formatString=\"base-quote\">\n {item.symbol}\n </Text.formatted>\n ))}\n </Flex>\n ),\n },\n // Price (USDC)\n {\n title: `${t(\"common.price\")} (USDC)`,\n dataIndex: \"Price_(USDC)\",\n width: 202,\n render: (_: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText value={item.transfer_price} type=\"quote\" />\n ))}\n </Flex>\n );\n },\n },\n // Quantity\n {\n title: t(\"common.quantity\"),\n dataIndex: \"Quantity\",\n width: 202,\n render: (_: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText value={item.position_qty} type=\"base\" />\n ))}\n </Flex>\n );\n },\n },\n // Liquidation Fee\n {\n title: t(\"positions.Liquidation.column.liquidationFee\"),\n dataIndex: \"abs_liquidation_fee\",\n width: 202,\n render: (abs_liquidation_fee: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText\n value={item.abs_liquidation_fee}\n type=\"quote\"\n />\n ))}\n </Flex>\n );\n },\n },\n ] as Column<API.Liquidation>[],\n [t]\n );\n\n return column;\n};\n\nconst FormattedText: FC<{ value?: string | number; type: \"base\" | \"quote\" }> = (\n props\n) => {\n // const { quote_dp, base_dp } = useSymbolContext();\n return <Text>{commifyOptional(props.value)}</Text>;\n};\n","import { FC } from \"react\";\nimport { cn, Flex, Grid, Text } from \"@orderly.network/ui\";\nimport { LiquidationCellState } from \"./liquidationCell.script\";\nimport { LiquidationFee, Price, Quantity } from \"./items\";\nimport { API } from \"@orderly.network/types\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const LiquidationCell: FC<\n LiquidationCellState & {\n classNames?: {\n root?: string;\n };\n }\n> = (props) => {\n return (\n <Flex\n key={props.item.timestamp}\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n itemAlign={\"start\"}\n className={props.classNames?.root}\n >\n <Header {...props} />\n <Body {...props} />\n </Flex>\n );\n};\n\nexport const Header: FC<LiquidationCellState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex gap={1} width={\"100%\"}>\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1\"\n gap={1}\n >\n <Text.formatted\n size=\"2xs\"\n intensity={36}\n rule={\"date\"}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n >\n {props.item.timestamp}\n </Text.formatted>\n <Flex gap={1}>\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"positions.Liquidation.column.liquidationId\")}:`}\n </Text>\n <Text\n size=\"2xs\"\n intensity={80}\n >{` ${props.item.liquidation_id}`}</Text>\n </Flex>\n </Flex>\n <Flex direction={\"column\"} itemAlign={\"end\"} className=\"oui-flex-1\">\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"positions.Liquidation.column.insFundTransfer\")}:`}\n </Text>\n <Text intensity={80} size=\"xs\">\n {commifyOptional(props.item.transfer_amount_to_insurance_fund)}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<LiquidationCellState> = (props) => {\n return (\n <Flex direction={\"column\"} width={\"100%\"}>\n {props.item.positions_by_perp?.map((item, index) => {\n return (\n <Cell\n key={`${index}-${item.symbol}`}\n isLast={index === props.item.positions_by_perp.length - 1}\n {...item}\n />\n );\n })}\n </Flex>\n );\n};\n\nconst Cell: FC<\n API.LiquidationPositionByPerp & {\n isLast: boolean;\n key: string;\n }\n> = (props) => {\n return (\n <Flex\n key={props.key}\n width={\"100%\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-border-t-[1px] oui-border-line-6 oui-pt-2\",\n !props.isLast && \"oui-pb-2\"\n )}\n >\n <Text.formatted\n rule={\"symbol\"}\n formatString=\"base-quote\"\n size=\"xs\"\n intensity={80}\n className=\"oui-flex-1\"\n >\n {props.symbol}\n </Text.formatted>\n <Grid cols={1} rows={3} width={\"100%\"} gap={1} className=\"oui-flex-1\">\n <Price {...props} />\n <Quantity {...props} />\n <LiquidationFee {...props} />\n </Grid>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const Price: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n const { t } = useTranslation();\n\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Flex gap={1}>\n <Text size=\"2xs\" intensity={36}>\n {t(\"common.price\")}\n </Text>\n <Text size=\"2xs\" intensity={20}>\n (USDC)\n </Text>\n </Flex>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.transfer_price}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.transfer_price)}\n </Text>\n </Flex>\n );\n};\nexport const Quantity: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n const { t } = useTranslation();\n\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n {t(\"common.quantity\")}\n </Text>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.position_qty}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.position_qty)}\n </Text>\n </Flex>\n );\n};\nexport const LiquidationFee: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n const { t } = useTranslation();\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n {t(\"positions.Liquidation.column.liquidationFee\")}\n </Text>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.abs_liquidation_fee}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.abs_liquidation_fee)}\n </Text>\n </Flex>\n );\n};\n","import { API } from \"@orderly.network/types\";\n\nexport const useLiquidationCellScript = (props: {\n item: API.Liquidation;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n}) => {\n\n return {\n ...props\n };\n};\n\nexport type LiquidationCellState = ReturnType<typeof useLiquidationCellScript>;\n","import { API } from \"@orderly.network/types\";\nimport { useLiquidationCellScript } from \"./liquidationCell.script\";\nimport { LiquidationCell } from \"./liquidationCell.ui\";\n\nexport const LiquidationCellWidget = (props: {\n item: API.Liquidation;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n}) => {\n const { classNames, ...rest } = props;\n const state = useLiquidationCellScript(rest);\n return <LiquidationCell classNames={classNames} {...state} />;\n};\n","import {\n usePrivateInfiniteQuery,\n usePrivateQuery,\n} from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { API } from \"@orderly.network/types\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n areDatesEqual,\n formatDatePickerRange,\n offsetEndOfDay,\n offsetStartOfDay,\n} from \"../../utils\";\nimport { differenceInDays, subDays } from \"date-fns\";\nimport { usePagination, useScreen } from \"@orderly.network/ui\";\nimport { LiquidationProps } from \"./liquidation.widget\";\n\nexport const useLiquidationScript = (props: LiquidationProps) => {\n const { symbol, enableLoadMore } = props;\n const { page, pageSize, setPage, pagination, parsePagination } =\n usePagination({\n pageSize: 10,\n });\n\n const { dateRange, filterDays, updateFilterDays, filterItems, onFilter } =\n useFilter();\n\n useEffect(() => {\n setPage(1);\n }, [symbol, dateRange, filterDays]);\n\n const [data, { meta, isLoading, loadMore }] = useLiquidation({\n page: enableLoadMore ? undefined : page,\n size: pageSize,\n symbol,\n start_t: dateRange.from != null ? dateRange.from.getTime() : undefined,\n end_t: dateRange.to != null ? dateRange.to.getTime() : undefined,\n });\n\n const dataSource = useDataTap(data, {\n fallbackData: [],\n });\n\n // useEffect(() => {\n // setPage(1);\n // }, [dateRange, filterDays]);\n\n // console.log(\"pagination\", pagination, meta);\n\n return {\n dataSource,\n isLoading,\n loadMore,\n\n pagination: parsePagination(meta),\n\n // filter\n dateRange,\n filterDays,\n updateFilterDays,\n filterItems,\n onFilter,\n };\n};\n\nexport type LiquidationState = ReturnType<typeof useLiquidationScript>;\n\n/**\n *\n * @param props size default is 100\n */\nconst useLiquidation = (props: {\n symbol?: string;\n start_t?: number;\n end_t?: number;\n page?: number;\n size?: number;\n}) => {\n const ordersResponse = usePrivateInfiniteQuery<API.Liquidation>(\n generateKeyFun(props),\n {\n initialSize: 1,\n formatter: (data) => data,\n revalidateOnFocus: true,\n }\n );\n\n const meta = useMemo(() => {\n // @ts-ignore\n return ordersResponse.data?.[0]?.meta;\n }, [ordersResponse.data?.[0]]);\n\n const data = useMemo(() => {\n return ordersResponse.data?.map((item: any) => item.rows)?.flat();\n }, [ordersResponse.data]);\n\n const isLoading = ordersResponse.isLoading;\n\n const loadMore = () => {\n ordersResponse.setSize(ordersResponse.size + 1);\n };\n\n return [data, { meta, isLoading, loadMore }] as const;\n};\n\nconst useFilter = () => {\n const defaultRange = formatDatePickerRange({\n to: offsetEndOfDay(new Date()),\n from: offsetStartOfDay(subDays(new Date(), 89)),\n });\n\n /// default is 90d\n const [filterDays, setFilterDays] = useState<1 | 7 | 30 | 90 | null>(90);\n\n const [dateRange, setDateRange] = useState<{\n from?: Date;\n to?: Date;\n }>(defaultRange);\n\n const updateFilterDays = (days: 1 | 7 | 30 | 90) => {\n setFilterDays(days);\n setDateRange({\n from: offsetStartOfDay(subDays(new Date(), days - 1)),\n to: offsetEndOfDay(new Date()),\n });\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"dateRange\") {\n const newDateRange = formatDatePickerRange(filter.value);\n setDateRange(newDateRange);\n if (newDateRange.from && newDateRange.to) {\n const diffDays =\n Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) + 1;\n const dateRangeMap: { [key: number]: { from: Date; to: Date } } = {\n 1: {\n from: offsetStartOfDay(new Date())!,\n to: offsetEndOfDay(new Date())!,\n },\n 7: {\n from: offsetStartOfDay(subDays(new Date(), 6))!,\n to: offsetEndOfDay(new Date())!,\n },\n 30: {\n from: offsetStartOfDay(subDays(new Date(), 29))!,\n to: offsetEndOfDay(new Date())!,\n },\n 90: {\n from: offsetStartOfDay(subDays(new Date(), 89))!,\n to: offsetEndOfDay(new Date())!,\n },\n };\n\n const dateRange = dateRangeMap[diffDays];\n if (\n dateRange &&\n areDatesEqual(dateRange.from, newDateRange.from) &&\n areDatesEqual(dateRange.to, newDateRange.to)\n ) {\n setFilterDays(diffDays as any);\n } else {\n setFilterDays(null);\n }\n }\n }\n };\n\n const { isMobile } = useScreen();\n\n const filterItems = useMemo((): any[] => {\n const dateRangeFilter = {\n type: \"range\",\n name: \"dateRange\",\n value: dateRange,\n fromDate: offsetStartOfDay(subDays(new Date(), 89)),\n toDate: offsetEndOfDay(new Date()),\n };\n\n if (isMobile) {\n return [dateRangeFilter];\n }\n return [dateRangeFilter];\n }, [dateRange]);\n\n return {\n filterItems,\n onFilter,\n dateRange,\n filterDays,\n updateFilterDays,\n };\n};\n\nconst generateKeyFun =\n (args: {\n symbol?: string;\n start_t?: number;\n end_t?: number;\n page?: number;\n size?: number;\n }) =>\n (pageIndex: number, previousPageData: any): string | null => {\n // reached the end\n if (previousPageData && !previousPageData.rows?.length) return null;\n\n const { symbol, size = 10, page, end_t, start_t } = args;\n\n const search = new URLSearchParams([\n [\"size\", size.toString()],\n [\"page\", `${pageIndex + 1}`],\n ]);\n\n if (page) {\n search.set(\"page\", `${page}`);\n }\n\n if (symbol) {\n search.set(`symbol`, symbol);\n }\n\n if (end_t) {\n search.set(`end_t`, `${end_t}`);\n }\n\n if (start_t) {\n search.set(`start_t`, `${start_t}`);\n }\n\n return `/v1/liquidations?${search.toString()}`;\n };\n","import { useLiquidationScript } from \"./liquidation.script\";\nimport { Liquidation, MobileLiquidation } from \"./liquidation.ui\";\n\nexport type LiquidationProps = {\n symbol?: string;\n enableLoadMore?: boolean;\n}\n\nexport const LiquidationWidget = (props: LiquidationProps) => {\n const state = useLiquidationScript(props);\n return (<Liquidation {...state} />);\n};\n\nexport const MobileLiquidationWidget = (props: LiquidationProps & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }) => {\n\n const { classNames, ...rest} = props;\n const state = useLiquidationScript(rest);\n return (<MobileLiquidation classNames={classNames} {...state} />);\n};\n"]}