@orderly.network/ui-positions 2.4.2-alpha.0 → 2.5.0-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.
package/dist/index.js.map CHANGED
@@ -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","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","children","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: string, 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 { FC } 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: FC<\n Omit<NumeralProps, \"precision\" | \"tick\"> & {\n tick?: TickName;\n }\n> = (props) => {\n const { tick = \"quote_dp\", ...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 // @ts-ignore\n return <Text.numeral as=\"span\" {...rest} dp={symbolInfo[tick]} />;\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/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"]}