@orderly.network/ui-positions 2.6.2 → 2.6.3
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 +21 -21
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +12 -12
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/positions/closePosition/components/confirmDialog.tsx","../src/components/positions/positionsRowContext.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/provider/symbolProvider.tsx","../src/provider/symbolContext.tsx","../src/components/positions/desktop/useColumn.tsx","../src/components/positions/closePosition/closePositions.mobile.ui.tsx","../src/components/positions/closePosition/components/quantitySlider.tsx","../src/components/positions/closePosition/closePosition.ui.tsx","../src/components/positions/closePosition/closePosition.widget.tsx","../src/components/positions/closePosition/closePosition.script.tsx","../src/components/positions/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/partialTPSL.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/positionCell/items.tsx","../src/components/positions/mobile/positionCell/positionCell.script.tsx","../src/components/positions/mobile/positionCell/positionCell.widget.tsx","../src/components/positions/positionsRowProvider.tsx","../src/components/positions/positions.widget.tsx","../src/components/positionHistory/positionHistory.ui.tsx","../src/components/positionHistory/desktop/usePositionHistoryColumn.tsx","../src/components/positionHistory/mobile/positionHistoryCell.ui.tsx","../src/components/positionHistory/mobile/items.tsx","../src/components/positionHistory/positionHistory.script.tsx","../src/utils/utils.ts","../src/components/positionHistory/mobile/positionHistoryCell.script.tsx","../src/components/positionHistory/mobile/positionHistoryCell.widget.tsx","../src/components/positionHistory/positionHistory.widget.tsx","../src/components/liquidation/liquidation.ui.tsx","../src/components/liquidation/desktop/useLiquidationColumn.tsx","../src/components/liquidation/mobile/liquidationCell.ui.tsx","../src/components/liquidation/mobile/items.tsx","../src/components/liquidation/mobile/liquidationCell.script.tsx","../src/components/liquidation/mobile/liquidationCell.widget.tsx","../src/components/liquidation/liquidation.script.tsx","../src/components/liquidation/liquidation.widget.tsx"],"names":["registerSimpleDialog","useMemo","useTranslation","OrderSide","Button","Text","CloseIcon","Flex","Divider","Badge","ThrottledButton","Box","commify","commifyOptional","Decimal","Fragment","jsx","jsxs","ConfirmHeader","props","hideCloseIcon","ConfirmFooter","t","OrderDetail","quantity","price","quoteDp","side","total","MarketCloseConfirm","onCancel","LimitConfirmDialog","order","createContext","useContext","PositionsRowContext","usePositionsRowContext","useCallback","usePrivateInfiniteQuery","EMPTY_LIST","Grid","Statistic","DataTable","ListView","useScreen","cn","useRef","useEffect","useEndReached","sentinelRef","onEndReached","observer","cb","options","handleObserver","entries","entry","EndReachedBox","FundingFeeHistoryUI","symbol","start_t","end_t","isMobile","isLoading","data","setSize","pageIndex","previousPageData","loadMore","prev","flattenData","item","listView","HistoryDataListViewSimple","HistoryDataListView","columns","value","renderItem","FundingFeeItem","useBoolean","SimpleDialog","SimpleSheet","FundingFeeButton","fee","isOpen","setTrue","setFalse","produce","useAccount","usePositionStream","usePrivateQuery","useSymbolsInfo","i18n","positions","_account","useDataTap","formatAddress","usePagination","useSWR","fetcher","useConfig","AccountStatusEnum","getTimestamp","signatureMiddleware","account","accountId","apiBaseUrl","useSWRNext","key","config","args","url","fullUrl","signer","payload","signature","ids","id","e","useSubAccountQuery","query","formatter","swrOptions","state","middleware","shouldFetch","init","useCombinePositionsScript","calcMode","includedPendingOrder","pnlNotionalDecimalPrecision","sharePnLConfig","onSymbolChange","selectedAccount","pagination","setPage","symbolsInfo","oldPositions","newPositions","isPositionLoading","mutatePositions","accountInfo","isAccountInfoLoading","processPositions","acc","draft","info","notional","MMR","mm","unrealPnl","imr","unrealPnlROI","unrealPnl_index","unrealPnlROI_index","dataSource","filtered","groupDataSource","groupDataByAccount","mergedLoading","mainAccountId","subAccounts","map","findSubAccount","React","usePositionsScript","AuthGuardDataTable","SymbolContext","useSymbolContext","SymbolProvider","children","symbolInfo","memoizedValue","HoverCard","Tooltip","SharePnLDialogId","Input","inputFormatter","Slider","QuantitySlider","MobileClosePosition","base","base_dp","quote","quote_dp","sheetOpen","setSheetOpen","dialogOpen","setDialogOpen","submitting","priceErrorMsg","quantityErrorMsg","disabled","isMarketClose","position","maxQty","isBuy","title","orderType","orderSide","header","lastPrice","inputForm","slider","footer","OrderType","PopoverContent","PopoverRoot","PopoverTrigger","Select","DesktopClosePosition","popoverOpen","setPopoverOpen","isEntirePosition","quantityForm","suffix","disabledInput","priceForm","useState","useLocalStorage","utils","useOrderEntryFormErrorMsg","useClosePositionScript","sliderValue","setSliderValue","quantityInputRef","orderConfirm","onSubmit","closeOrderData","updatePriceChange","updateOrderType","updateQuantity","errors","baseTick","type","parseErrorMsg","closeType","formatQuantityToBaseTick","formatQty","onSliderValueChange","qty","onMax","onConfirm","res","onDoubleConfirm","onCloseSheet","onCloseDialog","onClosePopover","onEntirePosition","ClosePositionWidget","useSymbolLeverage","EditIcon","modal","PositionTPSLPopover","TPSLDetailDialogId","TPSLDialogId","TPSLSheetId","TPSLDetailSheetId","TPSLEditIcon","baseDp","tpslOrder","dialogId","AddIcon","needConfirm","onAdd","modalParams","LeverageBadge","LeverageDisplay","leverage","CaretDownIcon","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuRoot","DropdownMenuTrigger","renderQuantity","NumeralWithCtx","tick","rest","PositionType","PartialTPSL","orderNum","tpTriggerPrice","slTriggerPrice","direction","child","hasTPSL","useAccountInfo","ShareIcon","ShareButton","showModal","entity","netPnL","openPrice","roi","baseIMR","IMR_Factor","roiValue","useReferralInfo","useShareButtonScript","modalId","iconSize","isPositionHistory","getFirstRefCode","refCode","ShareButtonWidget","AlgoOrderType","TriggerPrice","stopLossPrice","takeProfitPrice","TPSLTriggerPrice","TriggerPriceItem","entryPrice","pnl","msgs","Label","content","showIcon","UnrealizedPnLPopoverCard","unPnlPriceBasis","setUnPnlPriceBasic","UnPnlPriceBasisCheckBox","onValueChange","RadioButton","sel","label","onCheckChange","SelIcon","UnselIcon","useColumn","fundingFeeEndTime","r1","r2","record","a","b","_","SharePnLBottomSheetId","SymbolToken","UnrealPnL","Qty","Margin","Notional","AvgOpen","MarkPrice","LiqPrice","liqPrice","TPSLPrice","fullTPSL","partialTPSL","FundingFee","PositionCell","className","body","buttons","usePositionCellScript","PositionCellWidget","usePositionClose","toast","PositionsRowProvider","setQuantity","setPrice","setType","submit","calculate","newValues","transSymbolformString","err","formatString","arr","Positions","index","MobilePositions","CombinePositions","tableData","row","column","PositionsWidget","MobilePositionsWidget","CombinePositionsWidget","DataFilter","capitalizeFirstLetter","usePositionHistoryColumn","SymbolInfo","Quantity","NetPnL","avgOpen","avgClose","tags","list","status","renderStatus","netPnl","text","differenceInDays","subDays","setHours","offsetStartOfDay","date","newDate","offsetEndOfDay","formatDatePickerRange","option","areDatesEqual","date1","date2","usePositionHistoryScript","dateRange","filterDays","updateFilterDays","filterItems","onFilter","useFilter","filterData","sideFilter","statusFilter","time","dateFilter","symbolFilter","setStatus","setSide","defaultRange","setFilterDays","setDateRange","days","filter","newDateRange","diffDays","dateRangeFilter","PositionHistoryType","showAlert","ClosedQty","closedQty","MaxClosedQty","maxClosedQty","AvgClosed","OpenTime","ClosedTime","PositionHistoryCell","Header","Body","usePositionHistoryCellScript","PositionHistoryCellWidget","PositionHistory","dayLabel","MobilePositionHistory","PositionHistoryWidget","MobilePositionHistoryWidget","classNames","useLiquidationColumn","FormattedText","abs_liquidation_fee","Price","LiquidationFee","LiquidationCell","Cell","useLiquidationCellScript","LiquidationCellWidget","Liquidation","MobileLiquidation","useLiquidationScript","enableLoadMore","page","pageSize","parsePagination","meta","useLiquidation","ordersResponse","generateKeyFun","size","search","LiquidationWidget","MobileLiquidationWidget","MarketCloseConfirmID"],"mappings":"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","sourcesContent":["import { registerSimpleDialog } from \"@orderly.network/ui\";\nimport { MarketCloseConfirm } from \"./components/positions/closePosition/components/confirmDialog\";\n\nexport { usePositionsRowContext } from \"./components/positions/positionsRowContext\";\n\nexport { FundingFeeHistoryUI } from \"./components/fundingFeeHistory/fundingFeeHistory.ui\";\nexport { FundingFeeButton } from \"./components/fundingFeeHistory/fundingFeeButton\";\n\nexport {\n PositionsWidget,\n MobilePositionsWidget,\n CombinePositionsWidget,\n} from \"./components/positions/positions.widget\";\n\nexport type { PositionsProps } from \"./types/types\";\n\nexport const MarketCloseConfirmID = \"MarketCloseConfirmID\";\n\nregisterSimpleDialog(MarketCloseConfirmID, MarketCloseConfirm, {\n size: \"md\",\n closable: false,\n});\n\nexport * from \"./components/positionHistory\";\nexport * from \"./components/liquidation\";\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { OrderEntity, OrderSide } from \"@orderly.network/types\";\nimport {\n Button,\n Text,\n CloseIcon,\n Flex,\n Divider,\n Badge,\n ThrottledButton,\n Box,\n} from \"@orderly.network/ui\";\nimport { commify, commifyOptional, Decimal } from \"@orderly.network/utils\";\n\nexport const ConfirmHeader: FC<{\n onClose?: () => void;\n title: string;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { hideCloseIcon = false } = props;\n return (\n <div className=\"oui-relative oui-w-full oui-border-b oui-border-line-4 oui-pb-3\">\n <Text size={\"base\"}>{props.title}</Text>\n {!hideCloseIcon && (\n <button\n onClick={props.onClose}\n className=\"oui-absolute oui-right-0 oui-top-0 oui-p-2 oui-text-base-contrast-54 hover:oui-text-base-contrast-80\"\n >\n <CloseIcon size={18} color=\"white\" />\n </button>\n )}\n </div>\n );\n};\n\nexport const ConfirmFooter: FC<{\n onConfirm?: () => Promise<any>;\n onCancel?: () => void;\n submitting?: boolean;\n disabled?: boolean;\n}> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n id=\"oui-positions-confirm-footer\"\n gap={2}\n width={\"100%\"}\n className=\"oui-mt-3 oui-pb-1\"\n >\n <Button\n id=\"oui-positions-confirm-footer-cancel-button\"\n color={\"secondary\"}\n fullWidth\n onClick={props.onCancel}\n size=\"md\"\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton\n id=\"oui-positions-confirm-footer-confirm-button\"\n onClick={props.onConfirm}\n fullWidth\n loading={props.submitting}\n disabled={props.disabled}\n size=\"md\"\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n );\n};\n\nexport const OrderDetail = (props: {\n quantity: any;\n price: any;\n side: OrderSide;\n quoteDp: number;\n className?: string;\n}) => {\n const { quantity, price, quoteDp, side } = props;\n const { t } = useTranslation();\n\n const total = useMemo(() => {\n if (price && quantity) {\n return new Decimal(price)\n .mul(quantity)\n .toFixed(quoteDp, Decimal.ROUND_DOWN);\n }\n return \"--\";\n }, [price, quantity]);\n\n return (\n <Flex\n direction={\"column\"}\n gap={1}\n width={\"100%\"}\n className=\"oui-text-sm oui-text-base-contrast-54\"\n py={5}\n >\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.qty\")}</Text>\n <Text color={side === OrderSide.BUY ? \"success\" : \"danger\"}>\n {quantity}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.price\")}</Text>\n <Text.formatted\n intensity={98}\n suffix={<Text intensity={54}>USDC</Text>}\n >\n {price}\n </Text.formatted>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.notional\")}</Text>\n <Text.formatted\n intensity={98}\n suffix={<Text intensity={54}>USDC</Text>}\n >\n {total}\n </Text.formatted>\n </Flex>\n </Flex>\n );\n};\n\nexport const MarketCloseConfirm: FC<{\n base?: string;\n quantity?: string;\n onClose?: () => void;\n close?: () => void;\n onConfirm?: () => Promise<any>;\n submitting?: boolean;\n hideCloseIcon?: boolean;\n classNames?: {\n root?: string;\n };\n}> = (props) => {\n const { t } = useTranslation();\n\n const onCancel = () => {\n const func = props?.onClose ?? props.close;\n func?.();\n };\n return (\n <Flex direction={\"column\"} className={props.classNames?.root}>\n <ConfirmHeader\n onClose={onCancel}\n title={t(\"positions.marketClose\")}\n hideCloseIcon={props.hideCloseIcon}\n />\n <Text intensity={54} size=\"sm\" className=\"oui-my-5\">\n {t(\"positions.marketClose.description\", {\n quantity: commifyOptional(props.quantity),\n base: props.base,\n })}\n </Text>\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={async () => {\n await props.onConfirm?.();\n onCancel();\n }}\n submitting={props.submitting}\n />\n </Flex>\n );\n};\n\nexport const LimitConfirmDialog: FC<{\n base: string;\n quantity: string;\n price: string;\n onClose?: () => void;\n onConfirm: () => Promise<any>;\n order: OrderEntity;\n submitting: boolean;\n quoteDp?: number;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { order, quoteDp, quantity, price } = props;\n const { side } = order;\n const { t } = useTranslation();\n\n const onCancel = () => {\n props.onClose?.();\n };\n\n return (\n <>\n <ConfirmHeader\n onClose={onCancel}\n title={t(\"positions.limitClose\")}\n hideCloseIcon={props.hideCloseIcon}\n />\n <Box mt={5}>\n <Text intensity={54} size=\"sm\">\n {t(\"positions.limitClose.description\", {\n quantity: commify(props.quantity),\n base: props.base,\n })}\n </Text>\n </Box>\n\n <Flex gap={2} mb={4} mt={5} justify={\"between\"}>\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"base\"\n showIcon\n >\n {order.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n {t(\"orderEntry.orderType.limit\")}\n </Badge>\n <Badge\n color={side === OrderSide.BUY ? \"success\" : \"danger\"}\n size=\"xs\"\n >\n {side === OrderSide.BUY ? t(\"common.buy\") : t(\"common.sell\")}\n </Badge>\n </Flex>\n </Flex>\n\n <Divider className=\"oui-w-full\" />\n\n <OrderDetail\n className=\"oui-text-sm\"\n price={price}\n quantity={quantity}\n side={order.side}\n quoteDp={quoteDp ?? 2}\n />\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={props.onConfirm}\n submitting={props.submitting}\n />\n </>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { API, OrderSide, OrderType } from \"@orderly.network/types\";\n\nexport interface PositionsRowContextState {\n quantity: string;\n price: string;\n type: OrderType;\n side: OrderSide;\n position: API.PositionExt | API.PositionTPSLExt;\n updateQuantity: (value: string) => void;\n updatePriceChange: (value: string) => void;\n updateOrderType: (value: OrderType) => void;\n\n closeOrderData: any;\n\n onSubmit: () => Promise<any>;\n submitting: boolean;\n tpslOrder?: API.AlgoOrder;\n partialTPSLOrder?: API.AlgoOrder;\n quoteDp?: number;\n baseDp?: number;\n baseTick?: number;\n errors: any | undefined;\n}\n\nexport const PositionsRowContext = createContext(\n {} as PositionsRowContextState,\n);\n\nexport const usePositionsRowContext = () => {\n return useContext(PositionsRowContext);\n};\n","import { FC, useCallback, useMemo } from \"react\";\nimport { usePrivateInfiniteQuery } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { EMPTY_LIST } from \"@orderly.network/types\";\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 ?? EMPTY_LIST}\n isLoading={isLoading}\n loadMore={loadMore}\n />\n );\n }\n return (\n <HistoryDataListView\n data={flattenData ?? EMPTY_LIST}\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 ?? EMPTY_LIST}\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 \"../../provider/symbolProvider\";\nimport type { PositionsProps } from \"../../types/types\";\nimport type { CombinePositionsState } from \"./combinePositions.script\";\nimport { useColumn } from \"./desktop/useColumn\";\nimport { PositionCellWidget } from \"./mobile/positionCell\";\nimport type { PositionsState } from \"./positions.script\";\nimport { PositionsRowProvider } from \"./positionsRowProvider\";\n\nexport const Positions: React.FC<Readonly<PositionsState>> = (props) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n pagination,\n isLoading,\n dataSource,\n onSymbolChange,\n } = props;\n\n const columns = useColumn({\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange: onSymbolChange,\n });\n\n return (\n <AuthGuardDataTable<API.PositionTPSLExt>\n loading={isLoading}\n id=\"oui-desktop-positions-content\"\n columns={columns}\n bordered\n dataSource={dataSource}\n generatedRowKey={(record: any) => record.symbol}\n renderRowContainer={(record: any, index: number, children: any) => {\n return (\n <SymbolProvider symbol={record.symbol}>\n <PositionsRowProvider position={record}>\n {children}\n </PositionsRowProvider>\n </SymbolProvider>\n );\n }}\n manualPagination={false}\n pagination={pagination}\n testIds={{\n body: \"oui-testid-dataList-position-tab-body\",\n }}\n />\n );\n};\n\nexport const MobilePositions: React.FC<\n Readonly<PositionsState & PositionsProps>\n> = (props) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n dataSource,\n onSymbolChange,\n } = props;\n return (\n <ListView\n className=\"oui-hide-scrollbar oui-w-full oui-space-y-0 oui-overflow-y-hidden\"\n contentClassName=\"!oui-space-y-1\"\n dataSource={dataSource}\n renderItem={(item, index) => (\n <SymbolProvider symbol={item.symbol}>\n <PositionsRowProvider position={item}>\n <PositionCellWidget\n item={item}\n index={index}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n sharePnLConfig={sharePnLConfig}\n onSymbolChange={onSymbolChange}\n />\n </PositionsRowProvider>\n </SymbolProvider>\n )}\n />\n );\n};\n\nexport const CombinePositions: React.FC<Readonly<CombinePositionsState>> = (\n props,\n) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n pagination,\n isLoading,\n tableData,\n onSymbolChange,\n mutatePositions,\n } = props;\n\n const columns = useColumn({\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange: onSymbolChange,\n });\n\n const { dataSource = [] } = tableData;\n\n return (\n <AuthGuardDataTable<any>\n bordered\n loading={isLoading}\n id=\"oui-desktop-positions-content\"\n columns={columns}\n dataSource={dataSource}\n expanded\n getSubRows={(row) => row.children}\n generatedRowKey={(record) => record.id}\n onCell={(column, record) => {\n const isGroup = (record.children ?? []).length > 0;\n if (isGroup) {\n return {\n children:\n column.id === \"symbol\" ? (\n <Badge color=\"neutral\" size=\"xs\">\n {record?.description || formatAddress(record?.id)}\n </Badge>\n ) : null,\n };\n }\n }}\n renderRowContainer={(record: any, index: number, children: any) => {\n if (record.symbol) {\n return (\n <SymbolProvider symbol={record.symbol}>\n <PositionsRowProvider\n position={record}\n mutatePositions={mutatePositions}\n >\n {children}\n </PositionsRowProvider>\n </SymbolProvider>\n );\n }\n return children;\n }}\n manualPagination={false}\n pagination={pagination}\n testIds={{\n body: \"oui-testid-dataList-position-tab-body\",\n }}\n />\n );\n};\n","import { FC, PropsWithChildren, useMemo } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { SymbolContext, SymbolContextState } from \"./symbolContext\";\n\ninterface FormatterProviderProps {\n symbol: string;\n}\n\nexport const SymbolProvider: FC<PropsWithChildren<FormatterProviderProps>> = (\n props,\n) => {\n const { symbol, children } = props;\n const symbolInfo = useSymbolsInfo()[symbol];\n const memoizedValue = useMemo<SymbolContextState>(() => {\n return {\n symbol: symbol,\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n base_tick: symbolInfo(\"base_tick\"),\n quote_tick: symbolInfo(\"quote_tick\"),\n base: symbolInfo(\"base\"),\n quote: symbolInfo(\"quote\"),\n origin: symbolInfo(),\n quote_max: symbolInfo(\"quote_max\"),\n quote_min: symbolInfo(\"quote_min\"),\n };\n }, [symbol, symbolInfo]);\n return (\n <SymbolContext.Provider value={memoizedValue}>\n {children}\n </SymbolContext.Provider>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport type { 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<SymbolContextState>(\n {} as SymbolContextState,\n);\n\nexport const useSymbolContext = () => {\n return useContext(SymbolContext);\n};\n","import { useMemo, useRef } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Box,\n cn,\n Divider,\n Flex,\n HoverCard,\n Column,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { SharePnLOptions, SharePnLDialogId } from \"@orderly.network/ui-share\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FundingFeeButton } from \"../../fundingFeeHistory/fundingFeeButton\";\nimport { ClosePositionWidget } from \"../closePosition\";\nimport { TPSLButton, LeverageBadge } from \"./components\";\nimport {\n renderPriceInput,\n renderQuantity,\n renderQuantityInput,\n} from \"./listElement\";\nimport { NumeralWithCtx } from \"./numeralWithCtx\";\nimport { PartialTPSL } from \"./partialTPSL\";\nimport { ShareButtonWidget } from \"./shareButton\";\nimport { TriggerPrice } from \"./triggerPrice\";\nimport { UnrealizedPnLPopoverCard } from \"./unrealPnLHover\";\n\ninterface ColumnConfig {\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLOptions;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}\n\nexport const useColumn = (config: ColumnConfig) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig, onSymbolChange } =\n config;\n const { t } = useTranslation();\n const fundingFeeEndTime = useRef(Date.now().toString());\n const column = useMemo<Column<API.PositionTPSLExt>[]>(\n () => [\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 140,\n onSort: (r1, r2) => {\n return r1.symbol.localeCompare(r2.symbol);\n // if (sortOrder === \"asc\") {\n // return r1.symbol.localeCompare(r2.symbol);\n // }\n // return r2.symbol.localeCompare(r1.symbol);\n },\n render: (value: string, record) => (\n <Flex gap={2}>\n <Box\n width={4}\n height={20}\n className={cn(\n \"oui-h-[38px] oui-rounded-[1px]\",\n record.position_qty > 0\n ? \"oui-bg-trade-profit\"\n : \"oui-bg-trade-loss\",\n )}\n />\n <Flex direction=\"column\" itemAlign=\"start\">\n <Text.formatted\n // rule={\"symbol\"}\n formatString=\"base-type\"\n className=\"oui-cursor-pointer\"\n onClick={(e) => {\n onSymbolChange?.({ symbol: value } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${value.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n <LeverageBadge symbol={value} />\n </Flex>\n </Flex>\n ),\n },\n {\n title: t(\"common.quantity\"),\n dataIndex: \"position_qty\",\n // onSort: true,\n onSort: (a, b) => {\n return a.position_qty - b.position_qty;\n },\n width: 120,\n className: \"oui-pl-6\",\n // rule: \"price\",\n // numeralProps: {\n // coloring: true,\n // // tick: \"base_dp\",\n // },\n render: renderQuantity,\n // render: (value: string) => (\n // <NumeralWithCtx\n // coloring\n // className=\"oui-font-semibold\"\n // tick=\"base_dp\"\n // >\n // {value}\n // </NumeralWithCtx>\n // ),\n },\n {\n title: t(\"common.avgOpen\"),\n className: \"oui-h-[48px]\",\n width: 120,\n onSort: true,\n dataIndex: \"average_open_price\",\n render: (value: string) => {\n // const ctx = usePositionsRowContext();\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: t(\"common.markPrice\"),\n dataIndex: \"mark_price\",\n width: 120,\n onSort: true,\n className: \"oui-h-[48px]\",\n render: (value: string) => {\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast-54\"\n content={t(\"positions.column.liqPrice.tooltip\")}\n >\n <Text>{t(\"positions.column.liqPrice\")}</Text>\n </Tooltip>\n ),\n width: 100,\n onSort: true,\n dataIndex: \"est_liq_price\",\n render: (value: string) => {\n return Number(value) === 0 ? (\n \"--\"\n ) : (\n <NumeralWithCtx\n rm={Decimal.ROUND_DOWN}\n className={Number(value) > 0 ? \"oui-text-warning-light\" : \"\"}\n >\n {value ?? \"--\"}\n </NumeralWithCtx>\n );\n },\n },\n {\n title: (\n <HoverCard\n content={<UnrealizedPnLPopoverCard />}\n side=\"top\"\n align=\"center\"\n className=\"oui-max-w-[280px] oui-text-2xs\"\n >\n <Text>{t(\"common.unrealizedPnl\")}</Text>\n </HoverCard>\n ),\n dataIndex: \"unrealized_pnl\",\n width: 180,\n onSort: true,\n rule: \"price\",\n numeralProps: {\n coloring: true,\n // tick: \"base_dp\",\n },\n // hint: <UnrealizedPnLPopoverCard />,\n render: (value: string, record) => {\n return (\n <Flex gap={2}>\n <Flex>\n <Text.numeral\n dp={pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"oui-font-semibold\"\n >\n {value}\n </Text.numeral>\n <Text.numeral\n rule=\"percentages\"\n dp={pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"oui-font-semibold\"\n prefix=\"(\"\n suffix=\")\"\n >\n {record.unrealized_pnl_ROI}\n </Text.numeral>\n </Flex>\n <ShareButtonWidget\n position={record}\n sharePnLConfig={sharePnLConfig}\n modalId={SharePnLDialogId}\n />\n </Flex>\n );\n },\n },\n {\n title: t(\"common.fullTPSL\"),\n dataIndex: \"full_tpsl\",\n width: 150,\n render: (_: string, record) => {\n return (\n <TriggerPrice\n stopLossPrice={record.full_tp_sl?.sl_trigger_price}\n takeProfitPrice={record.full_tp_sl?.tp_trigger_price}\n />\n );\n },\n },\n\n {\n title: t(\"common.partialTPSL\"),\n dataIndex: \"partial_tpsl\",\n width: 150,\n render: (_: string, record) => (\n <PartialTPSL\n orderNum={record.partial_tp_sl?.order_num}\n tpTriggerPrice={record.partial_tp_sl?.tp_trigger_price}\n slTriggerPrice={record.partial_tp_sl?.sl_trigger_price}\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: 70,\n fixed: \"right\",\n render() {\n return (\n <Flex gapX={2} justify={\"end\"}>\n <ClosePositionWidget />\n </Flex>\n );\n },\n },\n ],\n [pnlNotionalDecimalPrecision, sharePnLConfig, t],\n );\n return column;\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Badge,\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n SimpleDialog,\n SimpleSheet,\n Text,\n ThrottledButton,\n} from \"@orderly.network/ui\";\nimport { ClosePositionScriptReturn } from \"./closePosition.script\";\nimport {\n LimitConfirmDialog,\n MarketCloseConfirm,\n} from \"./components/confirmDialog\";\nimport { QuantitySlider } from \"./components/quantitySlider\";\n\nexport const MobileClosePosition: FC<ClosePositionScriptReturn> = (props) => {\n const {\n base,\n base_dp,\n quote,\n quote_dp,\n sheetOpen,\n setSheetOpen,\n dialogOpen,\n setDialogOpen,\n quantity,\n price,\n submitting,\n priceErrorMsg,\n quantityErrorMsg,\n disabled,\n isMarketClose,\n position,\n maxQty,\n isBuy,\n } = props;\n const { t } = useTranslation();\n\n const title = isMarketClose\n ? t(\"positions.marketClose\")\n : t(\"positions.limitClose\");\n\n const orderType = isMarketClose\n ? t(\"orderEntry.orderType.market\")\n : t(\"orderEntry.orderType.limit\");\n\n const orderSide = isBuy ? (\n <Badge color=\"success\" size=\"xs\">\n {t(\"common.buy\")}\n </Badge>\n ) : (\n <Badge color=\"danger\" size=\"xs\">\n {t(\"common.sell\")}\n </Badge>\n );\n\n const header = (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text.formatted rule={\"symbol\"} showIcon>\n {position.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n {orderType}\n </Badge>\n {orderSide}\n </Flex>\n </Flex>\n );\n\n const lastPrice = (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text intensity={54}>{t(\"common.lastPrice\")}</Text>\n <Text.numeral dp={quote_dp} suffix={<Text intensity={36}> {quote}</Text>}>\n {position.mark_price}\n </Text.numeral>\n </Flex>\n );\n\n const inputForm = !isMarketClose && (\n <>\n <Flex width={\"100%\"} direction={\"column\"} gap={2}>\n <Input.tooltip\n prefix={t(\"common.price\")}\n suffix={quote}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(quote_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={priceErrorMsg}\n color={priceErrorMsg ? \"danger\" : undefined}\n value={price}\n onValueChange={props.updatePriceChange}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n priceErrorMsg ? \"oui-outline-danger\" : undefined,\n ),\n }}\n />\n <Input.tooltip\n prefix={t(\"common.quantity\")}\n suffix={base}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(base_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={quantityErrorMsg}\n color={quantityErrorMsg ? \"danger\" : undefined}\n value={quantity}\n onBlur={() => props.formatQuantityToBaseTick(quantity)}\n onValueChange={props.updateQuantity}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n quantityErrorMsg ? \"oui-outline-danger\" : undefined,\n ),\n }}\n />\n </Flex>\n </>\n );\n\n const slider = (\n <QuantitySlider\n value={props.sliderValue}\n onValueChange={props.onSliderValueChange}\n base_dp={base_dp}\n max={maxQty}\n onMax={props.onMax}\n />\n );\n\n const footer = (\n <Flex width={\"100%\"} gap={3} mt={2}>\n <Button fullWidth color=\"secondary\" onClick={props.onCloseSheet}>\n {t(\"common.cancel\")}\n </Button>\n\n <ThrottledButton\n fullWidth\n disabled={submitting || disabled}\n loading={submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.onDoubleConfirm();\n }}\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n );\n\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n setSheetOpen(true);\n }}\n >\n {title}\n </Button>\n\n <SimpleSheet title={title} open={sheetOpen} onOpenChange={setSheetOpen}>\n <Flex\n direction={\"column\"}\n gap={3}\n width={\"100%\"}\n itemAlign={\"start\"}\n className=\"oui-text-sm\"\n >\n {header}\n <Divider className=\"oui-w-full\" />\n {lastPrice}\n {inputForm}\n {slider}\n {footer}\n </Flex>\n </SimpleSheet>\n\n <SimpleDialog open={dialogOpen} onOpenChange={setDialogOpen} size=\"xs\">\n {isMarketClose ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n submitting={submitting}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n hideCloseIcon\n />\n ) : (\n <LimitConfirmDialog\n base={base}\n quoteDp={quote_dp}\n quantity={quantity}\n price={price}\n submitting={submitting}\n order={props.closeOrderData}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n hideCloseIcon\n />\n )}\n </SimpleDialog>\n </>\n );\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { Flex, Slider, Text } from \"@orderly.network/ui\";\n\ntype QuantitySliderProps = {\n value: number;\n onValueChange: (value: number) => void;\n base_dp: number;\n max: number;\n onMax: () => void;\n};\n\nexport const QuantitySlider = (props: QuantitySliderProps) => {\n const { t } = useTranslation();\n\n return (\n <>\n <Slider\n showTip\n markCount={4}\n value={[props.value]}\n color=\"primary\"\n onValueChange={(value) => {\n props.onValueChange(value[0]);\n }}\n />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text color=\"primary\" size=\"2xs\">{`${props.value}%`}</Text>\n <Flex gap={1} onClick={props.onMax} className=\"oui-cursor-pointer\">\n <Text size=\"2xs\" color=\"primary\">\n {t(\"common.max\")}\n </Text>\n <Text.numeral\n intensity={54}\n size=\"2xs\"\n dp={props.base_dp}\n padding={false}\n >\n {props.max}\n </Text.numeral>\n </Flex>\n </Flex>\n </>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { OrderType } from \"@orderly.network/types\";\nimport {\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n PopoverContent,\n PopoverRoot,\n PopoverTrigger,\n Select,\n SimpleDialog,\n Text,\n} from \"@orderly.network/ui\";\nimport { ClosePositionScriptReturn } from \"./closePosition.script\";\nimport {\n ConfirmFooter,\n LimitConfirmDialog,\n MarketCloseConfirm,\n} from \"./components/confirmDialog\";\nimport { QuantitySlider } from \"./components/quantitySlider\";\n\nexport const DesktopClosePosition: FC<ClosePositionScriptReturn> = (props) => {\n const {\n position,\n base,\n base_dp,\n quote_dp,\n price,\n quantity,\n submitting,\n dialogOpen,\n setDialogOpen,\n isMarketClose,\n popoverOpen,\n setPopoverOpen,\n maxQty,\n quantityErrorMsg,\n priceErrorMsg,\n isEntirePosition,\n } = props;\n\n const { t } = useTranslation();\n\n // const disabled = isMarketClose ? !quantity : !price || !quantity;\n\n const quantityForm = (\n <Flex width=\"100%\" gap={2} mb={1}>\n <Input.tooltip\n ref={props.quantityInputRef}\n prefix={t(\"common.quantity\")}\n suffix={\n isEntirePosition ? (\n <Text\n size=\"2xs\"\n intensity={54}\n className=\"oui-cursor-pointer oui-px-3\"\n onClick={props.onEntirePosition}\n >\n {t(\"tpsl.entirePosition\")}\n </Text>\n ) : (\n base\n )\n }\n align=\"right\"\n size=\"md\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(base_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={quantityErrorMsg}\n color={quantityErrorMsg ? \"danger\" : undefined}\n value={isEntirePosition ? \"\" : quantity}\n onBlur={() => props.formatQuantityToBaseTick(quantity)}\n onValueChange={props.updateQuantity}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n quantityErrorMsg ? \"oui-outline-danger\" : undefined,\n ),\n }}\n />\n <Button\n onClick={props.onMax}\n size=\"md\"\n variant=\"outlined\"\n className={cn(\n \"oui-text-2xs\",\n isEntirePosition\n ? \"oui-border-primary-light oui-text-primary-light hover:oui-bg-primary-light/20\"\n : \"oui-border-line-12 oui-bg-base-6 oui-text-base-contrast-54 hover:oui-bg-base-5\",\n )}\n >\n {t(\"common.position\")}\n </Button>\n </Flex>\n );\n\n const suffix = (\n <Select.options\n variant=\"text\"\n size=\"md\"\n options={[\n {\n label: t(\"orderEntry.orderType.limit\"),\n value: OrderType.LIMIT,\n },\n {\n label: t(\"orderEntry.orderType.market\"),\n value: OrderType.MARKET,\n },\n ]}\n classNames={{\n // set the width of the trigger to the width of the content\n trigger: \"oui-w-[--radix-select-content-available-width]\",\n }}\n value={props.type}\n onValueChange={(value) => {\n props.updateOrderType(value as OrderType);\n }}\n contentProps={{\n align: \"end\",\n className: \"oui-border oui-border-line-6\",\n }}\n />\n );\n\n const disabledInput = isMarketClose;\n\n const priceForm = (\n <Input.tooltip\n suffix={suffix}\n size=\"md\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(quote_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={priceErrorMsg}\n color={priceErrorMsg ? \"danger\" : undefined}\n value={price}\n onValueChange={props.updatePriceChange}\n placeholder={disabledInput ? \"--\" : \"\"}\n disabled={disabledInput}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n priceErrorMsg ? \"oui-outline-danger\" : undefined,\n // when disabled, override the outline color\n disabledInput ? \"focus-within:oui-outline-line-12\" : undefined,\n ),\n }}\n />\n );\n\n return (\n <>\n <PopoverRoot open={popoverOpen} onOpenChange={setPopoverOpen}>\n <PopoverTrigger\n asChild\n onClick={() => {\n setPopoverOpen(true);\n }}\n >\n <Button variant=\"outlined\" size=\"sm\" color=\"secondary\">\n {t(\"positions.column.close\")}\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className={cn(\n \"oui-w-[360px] oui-p-5\",\n popoverOpen ? \"oui-visible\" : \"oui-invisible\",\n )}\n align=\"end\"\n side=\"top\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <Flex gapY={2} direction=\"column\">\n {quantityForm}\n <QuantitySlider\n value={props.sliderValue}\n onValueChange={props.onSliderValueChange}\n base_dp={base_dp}\n max={maxQty}\n onMax={props.onMax}\n />\n <Divider my={2} intensity={8} className=\"oui-w-full\" />\n {priceForm}\n <ConfirmFooter\n onConfirm={props.onDoubleConfirm}\n onCancel={props.onClosePopover}\n submitting={submitting}\n disabled={props.disabled}\n />\n </Flex>\n </PopoverContent>\n </PopoverRoot>\n\n <SimpleDialog open={dialogOpen} onOpenChange={setDialogOpen} size=\"sm\">\n {isMarketClose ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n submitting={submitting}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n classNames={{\n root: \"oui-items-start\",\n }}\n hideCloseIcon\n />\n ) : (\n <LimitConfirmDialog\n base={base}\n quoteDp={quote_dp}\n quantity={quantity}\n price={price}\n submitting={submitting}\n order={props.closeOrderData}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n hideCloseIcon\n />\n )}\n </SimpleDialog>\n </>\n );\n};\n","import { useScreen } from \"@orderly.network/ui\";\nimport {\n ClosePositionScriptProps,\n useClosePositionScript,\n} from \"./closePosition.script\";\nimport { DesktopClosePosition } from \"./closePosition.ui\";\nimport { MobileClosePosition } from \"./closePositions.mobile.ui\";\n\ntype ClosePositionWidgetProps = Pick<ClosePositionScriptProps, \"type\">;\n\nexport const ClosePositionWidget = (props: ClosePositionWidgetProps) => {\n const state = useClosePositionScript(props);\n const { isMobile } = useScreen();\n\n if (isMobile) {\n return <MobileClosePosition {...state} />;\n }\n\n return <DesktopClosePosition {...state} />;\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useLocalStorage, utils } from \"@orderly.network/hooks\";\nimport { useOrderEntryFormErrorMsg } from \"@orderly.network/react-app\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\nexport type ClosePositionScriptProps = {\n type?: OrderType.MARKET | OrderType.LIMIT;\n};\n\nexport type ClosePositionScriptReturn = ReturnType<\n typeof useClosePositionScript\n>;\n\nexport const useClosePositionScript = (props: ClosePositionScriptProps) => {\n const [sheetOpen, setSheetOpen] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [popoverOpen, setPopoverOpen] = useState(false);\n const [sliderValue, setSliderValue] = useState(100);\n const quantityInputRef = useRef<HTMLInputElement>(null);\n const [orderConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n\n const {\n position,\n onSubmit,\n price,\n quantity,\n closeOrderData,\n submitting,\n updatePriceChange,\n updateOrderType,\n updateQuantity,\n errors,\n baseTick,\n type,\n } = usePositionsRowContext();\n const { quote_dp, base_dp, base, quote } = useSymbolContext();\n const { parseErrorMsg } = useOrderEntryFormErrorMsg(errors);\n\n // buy position quantity is positive, sell position quantity is negative\n const isBuy = position.position_qty > 0;\n\n // we need to use Math.abs to get the absolute value of the position quantity\n const maxQty = Math.abs(position.position_qty);\n\n // close position type: limit or market\n const closeType = props.type || type;\n\n const isMarketClose = closeType === OrderType.MARKET;\n\n const isEntirePosition = maxQty?.toString() === quantity.toString();\n\n useEffect(() => {\n // mobile sheet open, update order type\n if (sheetOpen) {\n updateOrderType(props.type as OrderType);\n }\n }, [props.type, sheetOpen]);\n\n // reset state when sheet is closed\n // useEffect(() => {\n // if (!sheetOpen || !popoverOpen) {\n // // set default slider value to 100 when table edit remove\n // updateQuantity(maxQty?.toString());\n // }\n // }, [sheetOpen, popoverOpen, maxQty]);\n\n const { priceErrorMsg, quantityErrorMsg } = useMemo(() => {\n return {\n priceErrorMsg: parseErrorMsg(\"order_price\"),\n quantityErrorMsg: parseErrorMsg(\"order_quantity\"),\n };\n // parseErrorMsg is changed when errors is changed\n }, [errors]);\n\n const disabled = !!(priceErrorMsg || quantityErrorMsg);\n\n const formatQuantityToBaseTick = useCallback(\n (value: string) => {\n if (baseTick && baseTick > 0) {\n // format quantity to baseTick\n const formatQty = utils.formatNumber(value, baseTick) ?? value;\n updateQuantity(formatQty);\n }\n },\n [baseTick, updateQuantity],\n );\n\n const onSliderValueChange = useCallback(\n (value: number) => {\n setSliderValue(value);\n\n // transform slider value to quantity\n const qty = new Decimal(value)\n .div(100)\n .mul(maxQty)\n .toFixed(base_dp, Decimal.ROUND_DOWN);\n\n formatQuantityToBaseTick(qty);\n },\n [maxQty, base_dp, formatQuantityToBaseTick],\n );\n\n useEffect(() => {\n const qty = Math.min(Number(quantity || 0), maxQty);\n // transform quantity to slider value\n const slider = new Decimal(qty)\n .div(maxQty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n\n setSliderValue(slider);\n }, [quantity]);\n\n const onMax = useCallback(() => {\n updateQuantity(maxQty?.toString());\n }, [maxQty, updateQuantity]);\n\n const onConfirm = useCallback(() => {\n return onSubmit().then((res) => {\n setSheetOpen(false);\n setDialogOpen(false);\n setPopoverOpen(false);\n });\n }, [onSubmit]);\n\n const onDoubleConfirm = useCallback(() => {\n if (!orderConfirm) {\n return onConfirm();\n }\n setDialogOpen(true);\n return Promise.resolve();\n }, [onConfirm, orderConfirm]);\n\n const onCloseSheet = useCallback(() => {\n setSheetOpen(false);\n }, []);\n\n const onCloseDialog = useCallback(() => {\n setDialogOpen(false);\n }, []);\n\n const onClosePopover = useCallback(() => {\n setPopoverOpen(false);\n }, []);\n\n // when click entire position button, set quantity to 0 and focus on input\n const onEntirePosition = useCallback(() => {\n updateQuantity(\"0\");\n quantityInputRef.current?.focus();\n\n setTimeout(() => {\n quantityInputRef.current?.setSelectionRange(0, 1);\n }, 0);\n }, [updateQuantity]);\n\n return {\n position,\n closeOrderData,\n quote_dp,\n base_dp,\n base,\n quote,\n price,\n quantity,\n submitting,\n\n onConfirm,\n onDoubleConfirm,\n updatePriceChange,\n updateQuantity,\n formatQuantityToBaseTick,\n updateOrderType,\n\n sliderValue,\n onSliderValueChange,\n\n priceErrorMsg,\n quantityErrorMsg,\n disabled,\n isMarketClose,\n\n maxQty,\n onMax,\n isBuy,\n isEntirePosition,\n type: closeType,\n quantityInputRef,\n onEntirePosition,\n\n sheetOpen,\n onCloseSheet,\n setSheetOpen,\n\n dialogOpen,\n setDialogOpen,\n onCloseDialog,\n\n popoverOpen,\n setPopoverOpen,\n onClosePopover,\n };\n};\n","import React from \"react\";\nimport { ComputedAlgoOrder, useLocalStorage } from \"@orderly.network/hooks\";\nimport { useSymbolLeverage } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { PositionType } from \"@orderly.network/types\";\nimport { cn, EditIcon, Text, toast, useScreen } from \"@orderly.network/ui\";\nimport { modal } from \"@orderly.network/ui\";\nimport {\n PositionTPSLPopover,\n TPSLDetailDialogId,\n TPSLDialogId,\n TPSLSheetId,\n TPSLDetailSheetId,\n} from \"@orderly.network/ui-tpsl\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\n// ------------ TP/SL Price input end------------\nexport const TPSLButton = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n const { t } = useTranslation();\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n label={t(\"common.tpsl\")}\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing={false}\n />\n );\n};\n\nexport const TPSLEditIcon = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n const { isMobile } = useScreen();\n\n const onEdit = () => {\n const dialogId = isMobile ? TPSLDetailSheetId : TPSLDetailDialogId;\n modal.show(dialogId, {\n order: tpslOrder,\n position: position,\n baseDP: baseDp,\n quoteDP: quoteDp,\n });\n };\n\n return (\n // <PositionTPSLPopover\n // position={position}\n // order={tpslOrder}\n // baseDP={baseDp}\n // quoteDP={quoteDp}\n // isEditing\n // >\n <EditIcon\n onClick={onEdit}\n opacity={1}\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={16}\n />\n // </PositionTPSLPopover>\n );\n};\n\nexport const AddIcon = (props: { positionType: PositionType }) => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n const onAdd = () => {\n const dialogId = isMobile ? TPSLSheetId : TPSLDialogId;\n const modalParams = {\n symbol: position.symbol,\n baseDP: baseDp,\n quoteDP: quoteDp,\n isEditing: false,\n positionType: props.positionType,\n };\n modal.show(dialogId, modalParams);\n };\n return (\n <Text\n className={cn(\n \"oui-text-base-contrast oui-cursor-pointer\",\n isMobile && \"oui-text-base-contrast-80\",\n )}\n onClick={onAdd}\n >\n {t(\"tpsl.add\")}\n </Text>\n );\n};\n\nexport const LeverageBadge = ({ symbol }: { symbol: string }) => {\n if (!symbol) return null;\n return (\n <div className=\"oui-flex oui-h-[18px] oui-items-center oui-gap-1 oui-rounded oui-bg-white/[0.06] oui-px-2 oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n <Text>Cross</Text>\n <LeverageDisplay symbol={symbol} />\n </div>\n );\n};\n\nexport const LeverageDisplay = ({ symbol }: { symbol: string }) => {\n const leverage = useSymbolLeverage(symbol);\n\n return (\n <Text.numeral dp={0} size=\"2xs\" unit=\"X\">\n {leverage !== \"-\" ? leverage : \"--\"}\n </Text.numeral>\n );\n};\n","import { Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\nimport { PriceInput } from \"./priceInput\";\nimport { QuantityInput } from \"./quantityInput\";\n\nexport const renderQuantity = (value: number) => {\n const symbolInfo = useSymbolContext();\n return (\n <Text.numeral\n dp={symbolInfo.base_dp}\n rm={Decimal.ROUND_DOWN}\n padding={false}\n coloring\n >\n {value}\n </Text.numeral>\n );\n};\n\nexport const renderQuantityInput = (value: number, record: any) => {\n return <QuantityInput value={record[\"position_qty\"]} />;\n};\n\nexport const renderPriceInput = (value: number) => {\n return <PriceInput />;\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { OrderType } from \"@orderly.network/types\";\nimport {\n CaretDownIcon,\n cn,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Input,\n inputFormatter,\n} from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\nexport const PriceInput = () => {\n const { type, quoteDp, price, updatePriceChange, updateOrderType } =\n usePositionsRowContext();\n const { t } = useTranslation();\n\n return (\n <DropdownMenuRoot>\n <Input\n size=\"sm\"\n value={\n type === OrderType.LIMIT ? price : t(\"orderEntry.orderType.market\")\n }\n onValueChange={(e) => updatePriceChange(e)}\n formatters={[\n inputFormatter.numberFormatter,\n ...(quoteDp ? [inputFormatter.dpFormatter(quoteDp)] : []),\n ]}\n onFocus={() => {\n if (type === OrderType.MARKET) {\n updateOrderType(OrderType.LIMIT);\n }\n }}\n suffix={\n <DropdownMenuTrigger asChild>\n <button className=\"oui-h-full oui-px-1\">\n <CaretDownIcon size={12} color=\"white\" />\n </button>\n </DropdownMenuTrigger>\n }\n classNames={{\n root: cn(\n \"oui-border oui-border-solid oui-border-white/[0.12] oui-outline-none focus-within:oui-outline-primary-light\",\n ),\n }}\n />\n <DropdownMenuContent\n align=\"end\"\n className=\"oui-w-[96px] oui-min-w-[96px]\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DropdownMenuGroup>\n <DropdownMenuItem\n size=\"xs\"\n onSelect={() => {\n updateOrderType(OrderType.MARKET);\n }}\n >\n <span>{t(\"common.marketPrice\")}</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenuRoot>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { utils } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n PopoverRoot,\n PopoverContent,\n PopoverTrigger,\n Flex,\n Text,\n Slider,\n Button,\n inputFormatter,\n} from \"@orderly.network/ui\";\nimport { Input } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\nexport const QuantityInput = (props: { value: number }) => {\n const [sliderValue, setSliderValue] = useState<number>(100);\n const { baseDp, updateQuantity, quantity, baseTick } =\n usePositionsRowContext();\n\n const resetQuantity = (percent: number) => {\n formatQuantityToBaseTick(`${props.value * percent}`);\n };\n\n const formatQuantityToBaseTick = (value: string) => {\n if (baseTick && baseTick > 0) {\n // format quantity to baseTick\n const formatQty = utils.formatNumber(value, baseTick) ?? value;\n updateQuantity(formatQty);\n }\n };\n\n useEffect(() => {\n const maxQty = Math.abs(props.value);\n const qty = Math.min(Number(quantity || 0), maxQty);\n\n // transform quantity to slider value\n const slider = new Decimal(qty)\n .div(maxQty)\n .mul(100)\n .todp(2, Decimal.ROUND_DOWN)\n .toNumber();\n\n setSliderValue(slider);\n }, [quantity, props.value]);\n\n return (\n <PopoverRoot>\n <PopoverTrigger>\n <Input\n size=\"sm\"\n classNames={{\n root: \"oui-outline-none oui-border oui-border-solid oui-border-white/[0.12] focus-within:oui-outline-primary-light\",\n }}\n formatters={[\n inputFormatter.numberFormatter,\n ...(baseDp ? [inputFormatter.dpFormatter(baseDp)] : []),\n ]}\n value={quantity}\n onBlur={(event) => formatQuantityToBaseTick(event.target.value)}\n onValueChange={updateQuantity}\n />\n </PopoverTrigger>\n <PopoverContent\n className=\"oui-w-[360px] oui-rounded-xl\"\n align=\"start\"\n side=\"bottom\"\n onOpenAutoFocus={(event) => {\n event.preventDefault();\n }}\n >\n <Flex p={1} gap={2} width={\"100%\"} itemAlign={\"start\"}>\n <Text size=\"xs\" intensity={98} className=\"oui-min-w-[40px]\">\n {`${sliderValue}%`}\n </Text>\n <Flex direction={\"column\"} width={\"100%\"} gap={2}>\n <Slider\n markCount={4}\n value={[sliderValue]}\n onValueChange={(values) => {\n resetQuantity(values[0] / 100);\n }}\n />\n <PercentButtons onClick={resetQuantity} />\n </Flex>\n </Flex>\n </PopoverContent>\n </PopoverRoot>\n );\n};\n\nconst PercentButtons = (props: { onClick: (value: number) => void }) => {\n const { t } = useTranslation();\n const list = [\n {\n label: \"0%\",\n value: 0,\n },\n {\n label: \"25%\",\n value: 0.25,\n },\n {\n label: \"50%\",\n value: 0.5,\n },\n {\n label: \"75%\",\n value: 0.75,\n },\n {\n label: t(\"common.max\"),\n value: 1,\n },\n ];\n\n return (\n <Flex gap={2} width={\"100%\"}>\n {list.map((item, index) => {\n return (\n <Button\n key={index}\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n onClick={(e) => {\n e.stopPropagation();\n props.onClick(item.value);\n }}\n className=\"oui-w-1/5\"\n >\n {item.label}\n </Button>\n );\n })}\n </Flex>\n );\n};\n","import React from \"react\";\nimport { NumeralProps, Text } from \"@orderly.network/ui\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\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, useMemo } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { PositionType } from \"@orderly.network/types\";\nimport { cn, Flex, Text } from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\nimport { AddIcon, TPSLEditIcon } from \"./components\";\n\nexport const PartialTPSL: FC<{\n orderNum?: number;\n tpTriggerPrice?: number;\n slTriggerPrice?: number;\n direction?: \"column\" | \"row\";\n}> = (props) => {\n const {\n orderNum,\n tpTriggerPrice,\n slTriggerPrice,\n direction = \"column\",\n } = props;\n const { partialTPSLOrder: order, quoteDp, baseDp } = usePositionsRowContext();\n const symbolInfo = useSymbolsInfo();\n const { t } = useTranslation();\n\n const child = useMemo(() => {\n const children = [];\n\n if (!order?.symbol) return <AddIcon positionType={PositionType.PARTIAL} />;\n\n if (tpTriggerPrice) {\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={tpTriggerPrice}\n prefix={\n !slTriggerPrice || direction === \"column\" ? (\n <Text intensity={54}>{`${t(\"tpsl.tp\")} - `}</Text>\n ) : (\n \"\"\n )\n }\n />,\n );\n }\n if (slTriggerPrice) {\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 prefix={<Text intensity={54}>{`${t(\"tpsl.sl\")} - `}</Text>}\n >\n {slTriggerPrice}\n </Text.formatted>,\n );\n }\n if (children.length === 0)\n return <AddIcon positionType={PositionType.PARTIAL} />;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <Text key={\"split\"}>/</Text>);\n }\n\n return children;\n }, [tpTriggerPrice, slTriggerPrice, order?.symbol, t]);\n const hasTPSL = Array.isArray(child) ? !!child.length : !child;\n return (\n <Flex className=\"oui-gap-[6px]\">\n <div\n className={cn(\n \"oui-inline-flex oui-text-base-contrast-36\",\n direction === \"column\" ? \"oui-flex-col\" : \"oui-flex-row oui-gap-1\",\n )}\n >\n {child}\n </div>\n {hasTPSL && (\n <>\n <Text className=\"oui-text-base-contrast-54\">({orderNum})</Text>\n <TPSLEditIcon />\n </>\n )}\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { useSymbolsInfo, useAccountInfo } from \"@orderly.network/hooks\";\nimport { positions, account } from \"@orderly.network/perp\";\nimport { modal, ShareIcon } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { ShareButtonState } from \"./shareButton.script\";\n\nexport const ShareButton: FC<ShareButtonState> = (props) => {\n if (props.sharePnLConfig == null) return <></>;\n\n const { position } = props;\n const symbolsInfo = useSymbolsInfo();\n const { data: accountInfo } = useAccountInfo();\n\n const showModal = () => {\n const entity = props.isPositionHistory\n ? (() => {\n // Calculate ROI for position history\n const netPnL = position.netPnL || 0;\n const openPrice = Math.abs(position.avg_open_price);\n const quantity = Math.abs(position.closed_position_qty);\n\n let roi = undefined;\n\n if (\n netPnL !== 0 &&\n quantity !== 0 &&\n openPrice !== 0 &&\n accountInfo &&\n typeof props.leverage === \"number\"\n ) {\n // Calculate IMR for ROI calculation\n const symbolInfo = symbolsInfo[position.symbol];\n const baseIMR = symbolInfo(\"base_imr\");\n const IMR_Factor = accountInfo.imr_factor[position.symbol] || 1;\n\n if (baseIMR) {\n const notional = positions.notional(quantity, openPrice);\n const imr = account.IMR({\n maxLeverage: accountInfo.max_leverage,\n baseIMR: baseIMR,\n IMR_Factor: IMR_Factor,\n positionNotional: notional,\n ordersNotional: 0,\n IMR_factor_power: 4 / 5,\n });\n\n const roiValue = positions.unrealizedPnLROI({\n positionQty: quantity,\n openPrice: openPrice,\n IMR: imr,\n unrealizedPnL: netPnL,\n });\n\n roi = new Decimal(roiValue * 100).toFixed(2, Decimal.ROUND_DOWN);\n }\n }\n\n return {\n side: position.side,\n pnl: netPnL,\n roi: roi,\n openPrice: openPrice,\n closePrice: Math.abs(position.avg_close_price),\n openTime: position.open_timestamp,\n closeTime: position.close_timestamp,\n quantity: position.closed_position_qty,\n };\n })()\n : {\n side: position.position_qty > 0 ? \"LONG\" : \"SHORT\",\n pnl: position.unrealized_pnl,\n roi: new Decimal(position.unrealized_pnl_ROI * 100).toFixed(\n 2,\n Decimal.ROUND_DOWN,\n ),\n openPrice: Math.abs(position.average_open_price),\n markPrice: position.mark_price,\n openTime: position.timestamp,\n quantity: position.position_qty,\n };\n\n modal.show(props.modalId, {\n pnl: {\n entity: {\n symbol: position.symbol,\n ...entity,\n },\n refCode: props.refCode,\n ...props.sharePnLConfig,\n },\n });\n };\n return (\n <button\n type=\"button\"\n onClick={(e: any) => {\n e.stopPropagation();\n showModal();\n }}\n >\n <ShareIcon color=\"white\" opacity={0.54} size={props.iconSize ?? 16} />\n </button>\n );\n};\n","import { useMemo } from \"react\";\nimport { useReferralInfo, useSymbolLeverage } from \"@orderly.network/hooks\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport type UseShareButtonScriptOptions = {\n position: any;\n sharePnLConfig?: SharePnLConfig;\n modalId: string;\n iconSize?: number;\n isPositionHistory?: boolean;\n};\n\nexport const useShareButtonScript = (props: UseShareButtonScriptOptions) => {\n const { sharePnLConfig, position, modalId, iconSize, isPositionHistory } =\n props;\n const { getFirstRefCode } = useReferralInfo();\n const refCode = useMemo(() => {\n return getFirstRefCode()?.code;\n }, [getFirstRefCode]);\n const leverage = useSymbolLeverage(props.position.symbol);\n return {\n iconSize,\n position,\n refCode,\n leverage,\n sharePnLConfig,\n modalId,\n isPositionHistory,\n };\n};\n\nexport type ShareButtonState = ReturnType<typeof useShareButtonScript>;\n","import {\n useShareButtonScript,\n UseShareButtonScriptOptions,\n} from \"./shareButton.script\";\nimport { ShareButton } from \"./shareButton.ui\";\n\nexport type ShareButtonWidgetProps = UseShareButtonScriptOptions;\n\nexport const ShareButtonWidget = (props: ShareButtonWidgetProps) => {\n const state = useShareButtonScript(props);\n return <ShareButton {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { useSymbolsInfo, utils } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n AlgoOrderType,\n API,\n OrderSide,\n PositionType,\n} from \"@orderly.network/types\";\nimport { cn, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\nimport { TPSLEditIcon, AddIcon } from \"./components\";\n\nexport const TriggerPrice: FC<{\n stopLossPrice?: number;\n takeProfitPrice?: number;\n}> = (props) => {\n const { stopLossPrice, takeProfitPrice } = props;\n const { tpslOrder, position } = usePositionsRowContext();\n\n return (\n <TPSLTriggerPrice\n stopLossPrice={stopLossPrice}\n takeProfitPrice={takeProfitPrice}\n direction={\"column\"}\n order={tpslOrder}\n position={position}\n tooltip\n />\n );\n};\n\nexport const TriggerPriceItem: FC<{\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n symbolInfo: API.SymbolExt;\n}> = (props) => {\n const { qty, price, entryPrice, orderSide, orderType, symbolInfo } = props;\n const pnl = utils.priceToPnl(\n {\n qty,\n price,\n entryPrice,\n orderSide,\n orderType,\n },\n {\n symbol: symbolInfo,\n },\n );\n\n const type = orderType === AlgoOrderType.TAKE_PROFIT ? \"TP\" : \"SL\";\n\n return (\n <Flex>\n <Text intensity={54} className=\"oui-mr-1\">{`${type} PnL:`}</Text>\n <Text.formatted\n rule=\"price\"\n className={\n pnl === 0\n ? \"oui-text-base-contrast-36\"\n : pnl > 0\n ? \"oui-text-trade-profit oui-gap-0\"\n : \"oui-text-trade-loss oui-gap-0\"\n }\n prefix={<Text>{pnl === 0 ? \"\" : pnl > 0 ? \"+\" : \"-\"}</Text>}\n suffix={\n <Text intensity={36} className=\"oui-ml-1\">\n USDC\n </Text>\n }\n >{`${Math.abs(pnl)}`}</Text.formatted>\n </Flex>\n );\n};\n\nexport const TPSLTriggerPrice: FC<{\n takeProfitPrice: number | undefined;\n stopLossPrice: number | undefined;\n className?: string;\n direction?: \"row\" | \"column\";\n tooltip?: boolean;\n order?: API.AlgoOrder;\n position?: API.PositionTPSLExt;\n}> = (props) => {\n const { direction = \"row\", order, position } = props;\n // const symbolInfo = useSymbolsInfo()[position?.symbol ?? \"\"]();\n const symbolInfo = useSymbolsInfo();\n const { t } = useTranslation();\n const pnl = useMemo(() => {\n const msgs = [];\n\n if (!props.tooltip || !order || !position) return;\n\n let quantity = order.quantity;\n\n if (quantity === 0) {\n if (order.child_orders[0].type === \"CLOSE_POSITION\") {\n quantity = position.position_qty;\n }\n }\n\n if (!!props.takeProfitPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"tp\"}\n qty={quantity}\n price={props.takeProfitPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.TAKE_PROFIT}\n symbolInfo={symbolInfo[order.symbol]()}\n />,\n );\n }\n\n if (!!props.stopLossPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"sl\"}\n qty={quantity}\n price={props.stopLossPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.STOP_LOSS}\n symbolInfo={symbolInfo[order.symbol]()}\n />,\n );\n }\n\n return <div>{msgs}</div>;\n }, [\n props.takeProfitPrice,\n props.stopLossPrice,\n position?.average_open_price,\n order?.side,\n order?.quantity,\n order?.algo_type,\n ]);\n\n const child = useMemo(() => {\n const children = [];\n\n if (!order?.symbol) return <AddIcon positionType={PositionType.FULL} />;\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)\n return <AddIcon positionType={PositionType.FULL} />;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <Text key={\"split\"}>/</Text>);\n }\n\n return children;\n }, [props.takeProfitPrice, props.stopLossPrice, order?.symbol, t]);\n\n const content = (\n <div\n className={cn(\n \"oui-inline-flex oui-text-base-contrast-36\",\n props.direction === \"column\"\n ? \"oui-flex-col\"\n : \"oui-flex-row oui-gap-1\",\n props.className,\n )}\n >\n {child}\n </div>\n );\n\n const showIcon = Array.isArray(child) ? !!child.length : !child;\n\n if (props.tooltip) {\n return (\n <Flex gapX={2}>\n <Tooltip content={pnl}>{content}</Tooltip>\n {showIcon && <TPSLEditIcon />}\n </Flex>\n );\n }\n\n return content;\n};\n","import { FC } from \"react\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { Divider, Flex, Text } from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const UnrealizedPnLPopoverCard: FC<{}> = (props) => {\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\"\n );\n const { t } = useTranslation();\n return (\n <Flex\n direction={\"column\"}\n gap={3}\n className=\"oui-text-base-contrast-54 oui-items-start\"\n >\n <Text>{t(\"positions.column.unrealPnl.tooltip\")}</Text>\n <Divider className=\"oui-w-full\" />\n <div className=\"oui-mb-0\">\n {t(\"positions.column.unrealPnl.priceBasis\")}\n </div>\n <UnPnlPriceBasisCheckBox\n value={unPnlPriceBasis}\n onValueChange={setUnPnlPriceBasic}\n />\n </Flex>\n );\n};\n\nconst UnPnlPriceBasisCheckBox = (props: {\n value: string;\n onValueChange: (value: string) => void;\n}) => {\n const { value, onValueChange } = props;\n const { t } = useTranslation();\n\n // \"markPrice\" | \"lastPrice\"\n return (\n <Flex gap={2}>\n <RadioButton\n sel={value === \"markPrice\"}\n label={t(\"common.markPrice\")}\n value={\"markPrice\"}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === \"lastPrice\"}\n label={t(\"common.lastPrice\")}\n value={\"lastPrice\"}\n onCheckChange={onValueChange}\n />\n </Flex>\n );\n};\n\nconst RadioButton = (props: {\n sel: boolean;\n label: any;\n value: any;\n onCheckChange: (value: any) => void;\n}) => {\n const { sel, label, value, onCheckChange } = props;\n return (\n <Flex\n onClick={(e) => {\n onCheckChange(value);\n e.stopPropagation();\n }}\n gap={1}\n className=\"oui-cursor-pointer\"\n >\n {sel ? <SelIcon /> : <UnselIcon />}\n <Text size=\"xs\" intensity={sel ? 98 : 54}>\n {label}\n </Text>\n </Flex>\n );\n};\n\nconst SelIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-fill-white\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".36\"\n />\n <circle cx=\"8\" cy=\"8\" r=\"3.333\" />\n </svg>\n );\n};\n\nconst UnselIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".54\"\n />\n </svg>\n );\n};\n","import { FC } from \"react\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { cn, Divider, Flex, Grid } from \"@orderly.network/ui\";\nimport { ClosePositionWidget } from \"../../closePosition\";\nimport { TpSLBtnWidget } from \"../tpSLBtn\";\nimport {\n UnrealPnL,\n SymbolToken,\n Qty,\n Margin,\n Notional,\n AvgOpen,\n MarkPrice,\n LiqPrice,\n TPSLPrice,\n FundingFee,\n} from \"./items\";\nimport { PositionCellState } from \"./positionCell.script\";\n\nexport const PositionCell: FC<\n PositionCellState & {\n className?: string;\n }\n> = (props) => {\n const { className, ...rest } = props;\n\n const header = (\n <Flex justify={\"between\"} width={\"100%\"}>\n <SymbolToken {...props} />\n <UnrealPnL {...props} />\n </Flex>\n );\n\n const body = (\n <Grid cols={3} rows={2} gap={2} width={\"100%\"}>\n <Qty {...props} />\n <Margin {...props} />\n <Notional {...props} />\n <AvgOpen {...props} />\n <MarkPrice {...props} />\n <LiqPrice {...props} />\n </Grid>\n );\n\n const buttons = (\n <Grid width={\"100%\"} gap={2} cols={2} rows={1}>\n <ClosePositionWidget type={OrderType.LIMIT} />\n <ClosePositionWidget type={OrderType.MARKET} />\n </Grid>\n );\n\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n p={2}\n r=\"xl\"\n itemAlign={\"start\"}\n className={cn(className, \"oui-bg-base-9\")}\n >\n {header}\n <Divider intensity={6} className=\"oui-w-full\" />\n {body}\n <TPSLPrice {...rest} />\n <FundingFee {...rest} />\n {buttons}\n </Flex>\n );\n};\n","import { FC, useMemo, useRef } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, PositionType } from \"@orderly.network/types\";\nimport {\n Badge,\n cn,\n EditIcon,\n Flex,\n Grid,\n Statistic,\n Text,\n} from \"@orderly.network/ui\";\nimport { SharePnLBottomSheetId } from \"@orderly.network/ui-share\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FundingFeeButton } from \"../../../fundingFeeHistory/fundingFeeButton\";\nimport { LeverageBadge } from \"../../desktop/components\";\nimport { AddIcon, TPSLEditIcon } from \"../../desktop/components\";\nimport { ShareButtonWidget } from \"../../desktop/shareButton\";\nimport { PositionCellState } from \"./positionCell.script\";\n\nexport const SymbolToken: FC<PositionCellState> = (props) => {\n const { item } = props;\n const isBuy = item.position_qty > 0;\n const { t } = useTranslation();\n return (\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"2xs\"\n suffix={\n <div className=\"oui-flex oui-items-center oui-gap-1\">\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? t(\"common.long\") : t(\"common.short\")}\n </Badge>\n <LeverageBadge symbol={item.symbol} />\n </div>\n }\n showIcon\n onClick={() => {\n props.onSymbolChange?.({ symbol: item.symbol } as API.Symbol);\n }}\n >\n {item.symbol}\n </Text.formatted>\n );\n};\n\nexport const UnrealPnL: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n return (\n <Flex gap={3}>\n <Flex direction={\"column\"} className=\"oui-text-2xs\" itemAlign={\"end\"}>\n <div>\n <Text intensity={36}>{t(\"common.unrealizedPnl\")}</Text>\n <Text intensity={20}>(USDC)</Text>\n </div>\n\n <Text.numeral\n size=\"xs\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"orderly-font-semibold\"\n suffix={\n <Text.numeral\n rule=\"percentages\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n prefix=\"(\"\n suffix=\")\"\n className={cn(\n \"oui-ml-1\",\n item.unrealized_pnl_ROI > 0\n ? \"oui-text-success-darken\"\n : \"oui-text-danger-darken\",\n )}\n >\n {item.unrealized_pnl_ROI}\n </Text.numeral>\n }\n >\n {item.unrealized_pnl}\n </Text.numeral>\n </Flex>\n <ShareButtonWidget\n position={item}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLBottomSheetId}\n iconSize={12}\n />\n </Flex>\n );\n};\n\nexport const Qty: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.qty\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring>\n {item.position_qty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Margin: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={\n <span>\n {t(\"positions.column.margin\")}\n <Text intensity={20}>(USDC)</Text>\n </span>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} intensity={80}>\n {item.mm}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Notional: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n align=\"end\"\n label={\n <span>\n {t(\"common.notional\")}\n <Text intensity={20}>(USDC)</Text>\n </span>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} intensity={80}>\n {item.notional}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.avgOpen\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} intensity={80}>\n {item.average_open_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MarkPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n return (\n <Statistic\n label={t(\"common.markPrice\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} intensity={80}>\n {item.mark_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const LiqPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n const liqPrice =\n item.est_liq_price && item.est_liq_price > 0 ? item.est_liq_price : \"-\";\n\n return (\n <Statistic\n label={t(\"positions.column.liqPrice\")}\n align=\"end\"\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} color=\"warning\">\n {liqPrice}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const TPSLPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const fullTPSL = useMemo(() => {\n if (\n item.full_tp_sl?.tp_trigger_price == null &&\n item.full_tp_sl?.sl_trigger_price == null\n )\n return <AddIcon positionType={PositionType.FULL} />;\n\n return (\n <Flex className=\"oui-gap-[2px]\">\n {item.full_tp_sl?.tp_trigger_price && (\n <Text.numeral color=\"buy\">\n {item.full_tp_sl.tp_trigger_price}\n </Text.numeral>\n )}\n {item.full_tp_sl?.sl_trigger_price && \"/\"}\n {item.full_tp_sl?.sl_trigger_price && (\n <Text.numeral color=\"sell\">\n {item.full_tp_sl.sl_trigger_price}\n </Text.numeral>\n )}\n <TPSLEditIcon />\n </Flex>\n );\n }, [item.full_tp_sl]);\n\n const partialTPSL = useMemo(() => {\n if (\n item.partial_tp_sl?.tp_trigger_price == null &&\n item.partial_tp_sl?.sl_trigger_price == null\n )\n return <AddIcon positionType={PositionType.PARTIAL} />;\n\n return (\n <Flex className=\"oui-gap-[2px]\" itemAlign={\"center\"}>\n {item.partial_tp_sl?.tp_trigger_price && (\n <Text.numeral color=\"buy\">\n {item.partial_tp_sl.tp_trigger_price}\n </Text.numeral>\n )}\n {item.partial_tp_sl?.sl_trigger_price && \"/\"}\n {item.partial_tp_sl?.sl_trigger_price && (\n <Text.numeral color=\"sell\">\n {item.partial_tp_sl.sl_trigger_price}\n </Text.numeral>\n )}\n <Text>{`(${item.partial_tp_sl?.order_num})`}</Text>\n <TPSLEditIcon />\n </Flex>\n );\n }, [item.partial_tp_sl]);\n\n return (\n <Grid cols={2} rows={1} gap={2} width={\"100%\"}>\n <Flex\n className=\"oui-text-2xs oui-text-base-contrast-36\"\n direction={\"column\"}\n itemAlign={\"start\"}\n >\n <Text>{t(\"common.fullTPSL\")}: </Text>\n {fullTPSL}\n </Flex>\n <Flex\n className=\"oui-text-2xs oui-text-base-contrast-36 oui-grid-cols-end\"\n direction={\"column\"}\n itemAlign={\"end\"}\n >\n <Text>{t(\"common.partialTPSL\")}: </Text>\n {partialTPSL}\n </Flex>\n </Grid>\n );\n};\n\nexport const FundingFee: FC<PositionCellState> = (props) => {\n const { t } = useTranslation();\n const fundingFeeEndTime = useRef(Date.now().toString());\n return (\n <Flex justify={\"end\"} className=\"oui-w-full oui-text-2xs\">\n <Text intensity={36}>{t(\"funding.fundingFee\")}: </Text>\n <FundingFeeButton\n fee={props.item.fundingFee!}\n symbol={props.item.symbol}\n start_t={props.item.timestamp.toString()}\n end_t={fundingFeeEndTime.current}\n />\n </Flex>\n );\n};\n","import { API } from \"@orderly.network/types\";\nimport { useSymbolContext } from \"../../../../provider/symbolContext\";\nimport { PositionsProps } from \"../../../../types/types\";\n\ntype PositionCellScriptProps = {\n item: API.PositionTPSLExt;\n index: number;\n} & PositionsProps;\n\nexport type PositionCellState = ReturnType<typeof usePositionCellScript>;\n\nexport const usePositionCellScript = (props: PositionCellScriptProps) => {\n const symbolInfo = useSymbolContext();\n return {\n ...props,\n ...symbolInfo,\n };\n};\n","import { FC } from \"react\";\nimport { usePositionCellScript } from \"./positionCell.script\";\nimport { PositionCell } from \"./positionCell.ui\";\nimport { API } from \"@orderly.network/types\";\nimport { PositionsProps } from \"../../../../types/types\";\n\nexport const PositionCellWidget: FC<\n {\n item: API.PositionTPSLExt;\n index: number;\n className?: string;\n shareIconSize?: number;\n } & PositionsProps\n> = (props) => {\n const state = usePositionCellScript(props);\n return <PositionCell {...state} className={props.className} />;\n};\n","import {\n createContext,\n FC,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useMemo,\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, OrderSide, OrderType } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { PositionsRowContext } from \"./positionsRowContext\";\nimport type { PositionsRowContextState } from \"./positionsRowContext\";\n\n// export 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// partialTPSLOrder?: API.AlgoOrder;\n// quoteDp?: number;\n// baseDp?: number;\n// baseTick?: number;\n// errors: any | undefined;\n// }\n\n// export const PositionsRowContext = createContext(\n// {} as PositionsRowContextState,\n// );\n\n// export 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, children, mutatePositions } = props;\n const { t } = useTranslation();\n const [quantity, setQuantity] = useState<string>(\n Math.abs(position.position_qty).toString(),\n );\n const [price, setPrice] = useState<string>(\"\");\n const [type, setType] = useState<OrderType>(OrderType.MARKET);\n\n useEffect(() => {\n setQuantity(Math.abs(position.position_qty).toString());\n }, [position.position_qty]);\n\n const symbol = position.symbol;\n const symbolsInfo = useSymbolsInfo();\n const symbolInfo = symbolsInfo?.[symbol];\n const quoteDp = symbolInfo(\"quote_dp\");\n const baseDp = symbolInfo(\"base_dp\");\n const baseTick = symbolInfo(\"base_tick\");\n\n const {\n side,\n closeOrderData,\n submit,\n isMutating: submitting,\n errors,\n calculate,\n } = usePositionClose({\n position,\n order: {\n type,\n quantity,\n price,\n },\n });\n\n const updateQuantity = useCallback(\n (value: string) => {\n const newValues = calculate(\n {},\n \"order_quantity\",\n value,\n position.mark_price,\n symbolInfo(),\n );\n setQuantity(newValues.order_quantity!);\n },\n [calculate, symbolsInfo, position.mark_price],\n );\n\n const updatePriceChange = useCallback(\n (value: string) => {\n const newValues = calculate(\n {},\n \"order_price\",\n value,\n position.mark_price,\n symbolInfo(),\n );\n setPrice(newValues.order_price!);\n },\n [calculate, symbolsInfo, position.mark_price],\n );\n\n const updateOrderType = useCallback(\n (type: OrderType) => {\n setType(type);\n // when type is Limit, set price to mark price\n // when type is Market, set price to empty string\n setPrice(type === OrderType.LIMIT ? position.mark_price?.toString() : \"\");\n },\n [position.mark_price],\n );\n\n const onSubmit = useCallback(async () => {\n if (Number(quantity) > symbolInfo(\"base_max\")) {\n toast.error(\n <div>\n {t(\"positions.limitClose.errors.exceed.title\")}\n <br />\n <div className=\"oui-break-normal\">\n {t(\"positions.limitClose.errors.exceed.description\", {\n quantity: quantity,\n symbol: transSymbolformString(symbol, \"base\"),\n maxQuantity: symbolInfo(\"base_max\"),\n })}\n </div>\n </div>,\n );\n return;\n }\n\n return submit()\n .then((res) => {\n if (res.success) {\n 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 const memoizedValue = useMemo<PositionsRowContextState>(() => {\n return {\n quantity,\n price,\n type,\n side,\n position,\n updatePriceChange,\n updateQuantity,\n updateOrderType,\n tpslOrder: (position as API.PositionTPSLExt).full_tp_sl?.algo_order,\n partialTPSLOrder: (position as API.PositionTPSLExt).partial_tp_sl\n ?.algo_order,\n onSubmit,\n submitting,\n closeOrderData,\n quoteDp,\n baseDp,\n baseTick,\n errors,\n };\n }, [\n quantity,\n price,\n type,\n side,\n position,\n updatePriceChange,\n updateQuantity,\n updateOrderType,\n onSubmit,\n submitting,\n closeOrderData,\n quoteDp,\n baseDp,\n baseTick,\n errors,\n ]);\n\n return (\n <PositionsRowContext.Provider value={memoizedValue}>\n {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 return (formatString ?? \"base-quote\")\n .replace(\"type\", type)\n .replace(\"base\", base)\n .replace(\"quote\", quote);\n}\n","import React from \"react\";\nimport type { PositionsProps } from \"../../types/types\";\nimport { useCombinePositionsScript } from \"./combinePositions.script\";\nimport { usePositionsScript } from \"./positions.script\";\nimport { MobilePositions, Positions, CombinePositions } from \"./positions.ui\";\n\nexport const PositionsWidget: React.FC<PositionsProps> = (props) => {\n const state = usePositionsScript(props);\n return <Positions {...state} />;\n};\n\nexport const MobilePositionsWidget: React.FC<PositionsProps> = (props) => {\n const state = usePositionsScript(props);\n return <MobilePositions {...state} />;\n};\n\nexport const CombinePositionsWidget: React.FC<PositionsProps> = (props) => {\n const state = useCombinePositionsScript(props);\n return <CombinePositions {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n} from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { SymbolProvider } from \"../../provider/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 \"../../../provider/symbolContext\";\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 { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\n\nexport const usePositionHistoryCellScript = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const symbolInfo = useSymbolContext();\n\n return {\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type PositionHistoryCellState = ReturnType<\n typeof usePositionHistoryCellScript\n>;\n","import { API } from \"@orderly.network/types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { usePositionHistoryCellScript } from \"./positionHistoryCell.script\";\nimport { PositionHistoryCell } from \"./positionHistoryCell.ui\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const PositionHistoryCellWidget = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const state = usePositionHistoryCellScript(props);\n return <PositionHistoryCell {...state} />;\n};\n","import { API } from \"@orderly.network/types\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { usePositionHistoryScript } from \"./positionHistory.script\";\nimport { MobilePositionHistory, PositionHistory } from \"./positionHistory.ui\";\n\nexport type PositionHistoryProps = {\n onSymbolChange?: (symbol: API.Symbol) => void;\n symbol?: string;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n};\n\nexport const PositionHistoryWidget = (props: PositionHistoryProps) => {\n const state = usePositionHistoryScript(props);\n return <PositionHistory {...state} sharePnLConfig={props.sharePnLConfig} />;\n};\n\nexport const MobilePositionHistoryWidget = (\n props: PositionHistoryProps & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n },\n) => {\n const { classNames, ...rest } = props;\n const state = usePositionHistoryScript(rest);\n return (\n <MobilePositionHistory\n {...state}\n classNames={classNames}\n sharePnLConfig={props.sharePnLConfig}\n />\n );\n};\n","import { FC } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport {\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n} from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { useLiquidationColumn } from \"./desktop/useLiquidationColumn\";\nimport { LiquidationState } from \"./liquidation.script\";\nimport { LiquidationCellWidget } from \"./mobile\";\n\nexport const Liquidation: FC<LiquidationState> = (props) => {\n const column = useLiquidationColumn({});\n\n return (\n <Flex direction=\"column\" width=\"100%\" height=\"100%\" itemAlign=\"start\">\n {/* <Divider className=\"oui-w-full\" /> */}\n <Flex gap={3}>\n {props.filterItems.length > 0 && (\n <DataFilter\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n )}\n {[1, 7, 30, 90].map((value) => {\n return (\n <button\n key={`item-${value}`}\n className=\"oui-relative oui-px-2 oui-py-[2px] oui-text-sm\"\n >\n <div className=\"oui-z-10\">\n <Text.gradient\n color={props.filterDays === value ? \"brand\" : undefined}\n className={\n props.filterDays !== value\n ? \"oui-text-base-contrast-54\"\n : \"\"\n }\n >\n {`${value}D`}\n </Text.gradient>\n </div>\n <div\n className=\"oui-absolute oui-inset-0 oui-rounded oui-opacity-[.12] oui-gradient-primary\"\n onClick={() => {\n props.updateFilterDays(value as any);\n }}\n ></div>\n </button>\n );\n })}\n </Flex>\n\n <AuthGuardDataTable<API.Liquidation>\n loading={props.isLoading}\n id=\"oui-desktop-liquidation-content\"\n columns={column}\n bordered\n dataSource={props.dataSource}\n generatedRowKey={(record: API.Liquidation) =>\n `${record.liquidation_id}`\n }\n // manualPagination={false}\n pagination={props.pagination}\n testIds={{\n body: \"oui-testid-dataList-liquidation-tab-body\",\n }}\n classNames={{\n root: \"!oui-h-[calc(100%_-_49px)]\",\n }}\n />\n </Flex>\n );\n};\n\nexport const MobileLiquidation: FC<\n LiquidationState & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }\n> = (props) => {\n return (\n <Grid\n cols={1}\n rows={2}\n className=\"oui-w-full oui-grid-rows-[auto,1fr]\"\n gap={1}\n >\n <Flex gap={2} p={2} className=\"oui-rounded-b-xl oui-bg-base-9\">\n <DataFilter\n className=\"oui-border-none oui-py-0\"\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n </Flex>\n <ListView\n className={cn(\n \"oui-hide-scrollbar oui-w-full oui-space-y-0 oui-overflow-y-hidden\",\n props.classNames?.root,\n )}\n contentClassName={cn(\"!oui-space-y-1\", props.classNames?.content)}\n dataSource={props.dataSource}\n loadMore={props.loadMore}\n renderItem={(item, index) => (\n <LiquidationCellWidget\n item={item}\n index={index}\n classNames={{\n root: props.classNames?.cell,\n }}\n />\n )}\n />\n </Grid>\n );\n};\n","import { API } from \"@orderly.network/types\";\nimport { Column, Flex, Text } from \"@orderly.network/ui\";\nimport { FC, useMemo } from \"react\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const useLiquidationColumn = (props: {}) => {\n const { t } = useTranslation();\n\n const column = useMemo(\n () =>\n [\n // Time\n {\n title: t(\"common.time\"),\n dataIndex: \"timestamp\",\n fixed: \"left\",\n width: 202,\n render: (value: string) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {value}\n </Text.formatted>\n ),\n },\n // Liquidation id\n {\n title: t(\"positions.Liquidation.column.liquidationId\"),\n dataIndex: \"liquidation_id\",\n width: 202,\n render: (value) => <Text>{value}</Text>,\n },\n // net pnl\n {\n title: t(\"positions.Liquidation.column.insFundTransfer\"),\n dataIndex: \"transfer_amount_to_insurance_fund\",\n width: 202,\n render: (value) => {\n return <Text>{commifyOptional(value)}</Text>;\n },\n },\n // Symbol\n {\n title: t(\"common.symbol\"),\n dataIndex: \"Symbol\",\n width: 202,\n render: (_: any, record) => (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n <Text.formatted rule={\"symbol\"} formatString=\"base-quote\">\n {item.symbol}\n </Text.formatted>\n ))}\n </Flex>\n ),\n },\n // Price (USDC)\n {\n title: `${t(\"common.price\")} (USDC)`,\n dataIndex: \"Price_(USDC)\",\n width: 202,\n render: (_: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText value={item.transfer_price} type=\"quote\" />\n ))}\n </Flex>\n );\n },\n },\n // Quantity\n {\n title: t(\"common.quantity\"),\n dataIndex: \"Quantity\",\n width: 202,\n render: (_: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText value={item.position_qty} type=\"base\" />\n ))}\n </Flex>\n );\n },\n },\n // Liquidation Fee\n {\n title: t(\"positions.Liquidation.column.liquidationFee\"),\n dataIndex: \"abs_liquidation_fee\",\n width: 202,\n render: (abs_liquidation_fee: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText\n value={item.abs_liquidation_fee}\n type=\"quote\"\n />\n ))}\n </Flex>\n );\n },\n },\n ] as Column<API.Liquidation>[],\n [t]\n );\n\n return column;\n};\n\nconst FormattedText: FC<{ value?: string | number; type: \"base\" | \"quote\" }> = (\n props\n) => {\n // const { quote_dp, base_dp } = useSymbolContext();\n return <Text>{commifyOptional(props.value)}</Text>;\n};\n","import { FC } from \"react\";\nimport { cn, Flex, Grid, Text } from \"@orderly.network/ui\";\nimport { LiquidationCellState } from \"./liquidationCell.script\";\nimport { LiquidationFee, Price, Quantity } from \"./items\";\nimport { API } from \"@orderly.network/types\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const LiquidationCell: FC<\n LiquidationCellState & {\n classNames?: {\n root?: string;\n };\n }\n> = (props) => {\n return (\n <Flex\n key={props.item.timestamp}\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n itemAlign={\"start\"}\n className={props.classNames?.root}\n >\n <Header {...props} />\n <Body {...props} />\n </Flex>\n );\n};\n\nexport const Header: FC<LiquidationCellState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex gap={1} width={\"100%\"}>\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1\"\n gap={1}\n >\n <Text.formatted\n size=\"2xs\"\n intensity={36}\n rule={\"date\"}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n >\n {props.item.timestamp}\n </Text.formatted>\n <Flex gap={1}>\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"positions.Liquidation.column.liquidationId\")}:`}\n </Text>\n <Text\n size=\"2xs\"\n intensity={80}\n >{` ${props.item.liquidation_id}`}</Text>\n </Flex>\n </Flex>\n <Flex direction={\"column\"} itemAlign={\"end\"} className=\"oui-flex-1\">\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"positions.Liquidation.column.insFundTransfer\")}:`}\n </Text>\n <Text intensity={80} size=\"xs\">\n {commifyOptional(props.item.transfer_amount_to_insurance_fund)}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<LiquidationCellState> = (props) => {\n return (\n <Flex direction={\"column\"} width={\"100%\"}>\n {props.item.positions_by_perp?.map((item, index) => {\n return (\n <Cell\n key={`${index}-${item.symbol}`}\n isLast={index === props.item.positions_by_perp.length - 1}\n {...item}\n />\n );\n })}\n </Flex>\n );\n};\n\nconst Cell: FC<\n API.LiquidationPositionByPerp & {\n isLast: boolean;\n key: string;\n }\n> = (props) => {\n return (\n <Flex\n key={props.key}\n width={\"100%\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-border-t-[1px] oui-border-line-6 oui-pt-2\",\n !props.isLast && \"oui-pb-2\"\n )}\n >\n <Text.formatted\n rule={\"symbol\"}\n formatString=\"base-quote\"\n size=\"xs\"\n intensity={80}\n className=\"oui-flex-1\"\n >\n {props.symbol}\n </Text.formatted>\n <Grid cols={1} rows={3} width={\"100%\"} gap={1} className=\"oui-flex-1\">\n <Price {...props} />\n <Quantity {...props} />\n <LiquidationFee {...props} />\n </Grid>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const Price: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n const { t } = useTranslation();\n\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Flex gap={1}>\n <Text size=\"2xs\" intensity={36}>\n {t(\"common.price\")}\n </Text>\n <Text size=\"2xs\" intensity={20}>\n (USDC)\n </Text>\n </Flex>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.transfer_price}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.transfer_price)}\n </Text>\n </Flex>\n );\n};\nexport const Quantity: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n const { t } = useTranslation();\n\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n {t(\"common.quantity\")}\n </Text>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.position_qty}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.position_qty)}\n </Text>\n </Flex>\n );\n};\nexport const LiquidationFee: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n const { t } = useTranslation();\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n {t(\"positions.Liquidation.column.liquidationFee\")}\n </Text>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.abs_liquidation_fee}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.abs_liquidation_fee)}\n </Text>\n </Flex>\n );\n};\n","import { API } from \"@orderly.network/types\";\n\nexport const useLiquidationCellScript = (props: {\n item: API.Liquidation;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n}) => {\n\n return {\n ...props\n };\n};\n\nexport type LiquidationCellState = ReturnType<typeof useLiquidationCellScript>;\n","import { API } from \"@orderly.network/types\";\nimport { useLiquidationCellScript } from \"./liquidationCell.script\";\nimport { LiquidationCell } from \"./liquidationCell.ui\";\n\nexport const LiquidationCellWidget = (props: {\n item: API.Liquidation;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n}) => {\n const { classNames, ...rest } = props;\n const state = useLiquidationCellScript(rest);\n return <LiquidationCell classNames={classNames} {...state} />;\n};\n","import {\n usePrivateInfiniteQuery,\n usePrivateQuery,\n} from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { API } from \"@orderly.network/types\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n areDatesEqual,\n formatDatePickerRange,\n offsetEndOfDay,\n offsetStartOfDay,\n} from \"../../utils\";\nimport { differenceInDays, subDays } from \"date-fns\";\nimport { usePagination, useScreen } from \"@orderly.network/ui\";\nimport { LiquidationProps } from \"./liquidation.widget\";\n\nexport const useLiquidationScript = (props: LiquidationProps) => {\n const { symbol, enableLoadMore } = props;\n const { page, pageSize, setPage, pagination, parsePagination } =\n usePagination({\n pageSize: 10,\n });\n\n const { dateRange, filterDays, updateFilterDays, filterItems, onFilter } =\n useFilter();\n\n useEffect(() => {\n setPage(1);\n }, [symbol, dateRange, filterDays]);\n\n const [data, { meta, isLoading, loadMore }] = useLiquidation({\n page: enableLoadMore ? undefined : page,\n size: pageSize,\n symbol,\n start_t: dateRange.from != null ? dateRange.from.getTime() : undefined,\n end_t: dateRange.to != null ? dateRange.to.getTime() : undefined,\n });\n\n const dataSource = useDataTap(data, {\n fallbackData: [],\n });\n\n // useEffect(() => {\n // setPage(1);\n // }, [dateRange, filterDays]);\n\n // console.log(\"pagination\", pagination, meta);\n\n return {\n dataSource,\n isLoading,\n loadMore,\n\n pagination: parsePagination(meta),\n\n // filter\n dateRange,\n filterDays,\n updateFilterDays,\n filterItems,\n onFilter,\n };\n};\n\nexport type LiquidationState = ReturnType<typeof useLiquidationScript>;\n\n/**\n *\n * @param props size default is 100\n */\nconst useLiquidation = (props: {\n symbol?: string;\n start_t?: number;\n end_t?: number;\n page?: number;\n size?: number;\n}) => {\n const ordersResponse = usePrivateInfiniteQuery<API.Liquidation>(\n generateKeyFun(props),\n {\n initialSize: 1,\n formatter: (data) => data,\n revalidateOnFocus: true,\n }\n );\n\n const meta = useMemo(() => {\n // @ts-ignore\n return ordersResponse.data?.[0]?.meta;\n }, [ordersResponse.data?.[0]]);\n\n const data = useMemo(() => {\n return ordersResponse.data?.map((item: any) => item.rows)?.flat();\n }, [ordersResponse.data]);\n\n const isLoading = ordersResponse.isLoading;\n\n const loadMore = () => {\n ordersResponse.setSize(ordersResponse.size + 1);\n };\n\n return [data, { meta, isLoading, loadMore }] as const;\n};\n\nconst useFilter = () => {\n const defaultRange = formatDatePickerRange({\n to: offsetEndOfDay(new Date()),\n from: offsetStartOfDay(subDays(new Date(), 89)),\n });\n\n /// default is 90d\n const [filterDays, setFilterDays] = useState<1 | 7 | 30 | 90 | null>(90);\n\n const [dateRange, setDateRange] = useState<{\n from?: Date;\n to?: Date;\n }>(defaultRange);\n\n const updateFilterDays = (days: 1 | 7 | 30 | 90) => {\n setFilterDays(days);\n setDateRange({\n from: offsetStartOfDay(subDays(new Date(), days - 1)),\n to: offsetEndOfDay(new Date()),\n });\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"dateRange\") {\n const newDateRange = formatDatePickerRange(filter.value);\n setDateRange(newDateRange);\n if (newDateRange.from && newDateRange.to) {\n const diffDays =\n Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) + 1;\n const dateRangeMap: { [key: number]: { from: Date; to: Date } } = {\n 1: {\n from: offsetStartOfDay(new Date())!,\n to: offsetEndOfDay(new Date())!,\n },\n 7: {\n from: offsetStartOfDay(subDays(new Date(), 6))!,\n to: offsetEndOfDay(new Date())!,\n },\n 30: {\n from: offsetStartOfDay(subDays(new Date(), 29))!,\n to: offsetEndOfDay(new Date())!,\n },\n 90: {\n from: offsetStartOfDay(subDays(new Date(), 89))!,\n to: offsetEndOfDay(new Date())!,\n },\n };\n\n const dateRange = dateRangeMap[diffDays];\n if (\n dateRange &&\n areDatesEqual(dateRange.from, newDateRange.from) &&\n areDatesEqual(dateRange.to, newDateRange.to)\n ) {\n setFilterDays(diffDays as any);\n } else {\n setFilterDays(null);\n }\n }\n }\n };\n\n const { isMobile } = useScreen();\n\n const filterItems = useMemo((): any[] => {\n const dateRangeFilter = {\n type: \"range\",\n name: \"dateRange\",\n value: dateRange,\n fromDate: offsetStartOfDay(subDays(new Date(), 89)),\n toDate: offsetEndOfDay(new Date()),\n };\n\n if (isMobile) {\n return [dateRangeFilter];\n }\n return [dateRangeFilter];\n }, [dateRange]);\n\n return {\n filterItems,\n onFilter,\n dateRange,\n filterDays,\n updateFilterDays,\n };\n};\n\nconst generateKeyFun =\n (args: {\n symbol?: string;\n start_t?: number;\n end_t?: number;\n page?: number;\n size?: number;\n }) =>\n (pageIndex: number, previousPageData: any): string | null => {\n // reached the end\n if (previousPageData && !previousPageData.rows?.length) return null;\n\n const { symbol, size = 10, page, end_t, start_t } = args;\n\n const search = new URLSearchParams([\n [\"size\", size.toString()],\n [\"page\", `${pageIndex + 1}`],\n ]);\n\n if (page) {\n search.set(\"page\", `${page}`);\n }\n\n if (symbol) {\n search.set(`symbol`, symbol);\n }\n\n if (end_t) {\n search.set(`end_t`, `${end_t}`);\n }\n\n if (start_t) {\n search.set(`start_t`, `${start_t}`);\n }\n\n return `/v1/liquidations?${search.toString()}`;\n };\n","import { useLiquidationScript } from \"./liquidation.script\";\nimport { Liquidation, MobileLiquidation } from \"./liquidation.ui\";\n\nexport type LiquidationProps = {\n symbol?: string;\n enableLoadMore?: boolean;\n}\n\nexport const LiquidationWidget = (props: LiquidationProps) => {\n const state = useLiquidationScript(props);\n return (<Liquidation {...state} />);\n};\n\nexport const MobileLiquidationWidget = (props: LiquidationProps & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }) => {\n\n const { classNames, ...rest} = props;\n const state = useLiquidationScript(rest);\n return (<MobileLiquidation classNames={classNames} {...state} />);\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/positions/closePosition/components/confirmDialog.tsx","../src/components/positions/positionsRowContext.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/provider/symbolProvider.tsx","../src/provider/symbolContext.tsx","../src/components/positions/desktop/useColumn.tsx","../src/components/positions/closePosition/closePositions.mobile.ui.tsx","../src/components/positions/closePosition/components/quantitySlider.tsx","../src/components/positions/closePosition/closePosition.ui.tsx","../src/components/positions/closePosition/closePosition.widget.tsx","../src/components/positions/closePosition/closePosition.script.tsx","../src/components/positions/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/partialTPSL.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/positionCell/items.tsx","../src/components/positions/mobile/positionCell/positionCell.script.tsx","../src/components/positions/mobile/positionCell/positionCell.widget.tsx","../src/components/positions/positionsRowProvider.tsx","../src/components/positions/positions.widget.tsx","../src/components/positionHistory/positionHistory.ui.tsx","../src/components/positionHistory/desktop/usePositionHistoryColumn.tsx","../src/components/positionHistory/mobile/positionHistoryCell.ui.tsx","../src/components/positionHistory/mobile/items.tsx","../src/components/positionHistory/positionHistory.script.tsx","../src/utils/utils.ts","../src/components/positionHistory/mobile/positionHistoryCell.script.tsx","../src/components/positionHistory/mobile/positionHistoryCell.widget.tsx","../src/components/positionHistory/positionHistory.widget.tsx","../src/components/liquidation/liquidation.ui.tsx","../src/components/liquidation/desktop/useLiquidationColumn.tsx","../src/components/liquidation/mobile/liquidationCell.ui.tsx","../src/components/liquidation/mobile/liquidationCell.script.tsx","../src/components/liquidation/mobile/liquidationCell.widget.tsx","../src/components/liquidation/liquidation.script.tsx","../src/components/liquidation/liquidation.widget.tsx"],"names":["registerSimpleDialog","useMemo","useTranslation","OrderSide","Button","Text","CloseIcon","Flex","Divider","Badge","ThrottledButton","Box","commify","commifyOptional","Decimal","Fragment","jsx","jsxs","ConfirmHeader","props","hideCloseIcon","ConfirmFooter","t","OrderDetail","quantity","price","quoteDp","side","total","MarketCloseConfirm","onCancel","LimitConfirmDialog","order","createContext","useContext","PositionsRowContext","usePositionsRowContext","useCallback","usePrivateInfiniteQuery","EMPTY_LIST","Grid","Statistic","DataTable","ListView","useScreen","cn","useRef","useEffect","useEndReached","sentinelRef","onEndReached","observer","cb","options","handleObserver","entries","entry","EndReachedBox","FundingFeeHistoryUI","symbol","start_t","end_t","isMobile","isLoading","data","setSize","pageIndex","previousPageData","loadMore","prev","flattenData","item","listView","HistoryDataListViewSimple","HistoryDataListView","columns","value","renderItem","FundingFeeItem","useBoolean","SimpleDialog","SimpleSheet","FundingFeeButton","fee","isOpen","setTrue","setFalse","produce","useAccount","usePositionStream","usePrivateQuery","useSymbolsInfo","i18n","positions","_account","useDataTap","formatAddress","usePagination","useSWR","fetcher","useConfig","AccountStatusEnum","getTimestamp","signatureMiddleware","account","accountId","apiBaseUrl","useSWRNext","key","config","args","url","fullUrl","signer","payload","signature","ids","id","e","useSubAccountQuery","query","formatter","swrOptions","state","middleware","shouldFetch","init","useCombinePositionsScript","calcMode","includedPendingOrder","pnlNotionalDecimalPrecision","sharePnLConfig","onSymbolChange","selectedAccount","pagination","setPage","symbolsInfo","oldPositions","newPositions","isPositionLoading","mutatePositions","accountInfo","isAccountInfoLoading","processPositions","acc","draft","info","notional","MMR","mm","unrealPnl","imr","unrealPnlROI","unrealPnl_index","unrealPnlROI_index","dataSource","filtered","groupDataSource","groupDataByAccount","mergedLoading","mainAccountId","subAccounts","map","findSubAccount","React","usePositionsScript","AuthGuardDataTable","SymbolContext","useSymbolContext","SymbolProvider","children","symbolInfo","memoizedValue","HoverCard","Tooltip","SharePnLDialogId","Input","inputFormatter","Slider","QuantitySlider","MobileClosePosition","base","base_dp","quote","quote_dp","sheetOpen","setSheetOpen","dialogOpen","setDialogOpen","submitting","priceErrorMsg","quantityErrorMsg","disabled","isMarketClose","position","maxQty","isBuy","title","orderType","orderSide","header","lastPrice","inputForm","slider","footer","OrderType","PopoverContent","PopoverRoot","PopoverTrigger","Select","DesktopClosePosition","popoverOpen","setPopoverOpen","isEntirePosition","quantityForm","suffix","disabledInput","priceForm","useState","useLocalStorage","utils","useOrderEntryFormErrorMsg","useClosePositionScript","sliderValue","setSliderValue","quantityInputRef","orderConfirm","onSubmit","closeOrderData","updatePriceChange","updateOrderType","updateQuantity","errors","baseTick","type","getErrorMsg","closeType","formatQuantityToBaseTick","formatQty","onSliderValueChange","qty","onMax","onConfirm","res","onDoubleConfirm","onCloseSheet","onCloseDialog","onClosePopover","onEntirePosition","ClosePositionWidget","useSymbolLeverage","EditIcon","modal","PositionTPSLPopover","TPSLDetailDialogId","TPSLDialogId","TPSLSheetId","TPSLDetailSheetId","TPSLEditIcon","baseDp","tpslOrder","dialogId","AddIcon","needConfirm","onAdd","modalParams","LeverageBadge","LeverageDisplay","leverage","CaretDownIcon","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuRoot","DropdownMenuTrigger","renderQuantity","NumeralWithCtx","tick","rest","PositionType","PartialTPSL","orderNum","tpTriggerPrice","slTriggerPrice","direction","child","hasTPSL","useAccountInfo","ShareIcon","ShareButton","showModal","entity","netPnL","openPrice","roi","baseIMR","IMR_Factor","roiValue","useReferralInfo","useShareButtonScript","modalId","iconSize","isPositionHistory","getFirstRefCode","refCode","ShareButtonWidget","AlgoOrderType","TriggerPrice","stopLossPrice","takeProfitPrice","TPSLTriggerPrice","TriggerPriceItem","entryPrice","pnl","msgs","Label","content","showIcon","UnrealizedPnLPopoverCard","unPnlPriceBasis","setUnPnlPriceBasic","UnPnlPriceBasisCheckBox","onValueChange","RadioButton","sel","label","onCheckChange","SelIcon","UnselIcon","useColumn","fundingFeeEndTime","r1","r2","record","a","b","_","SharePnLBottomSheetId","SymbolToken","UnrealPnL","Qty","Margin","Notional","AvgOpen","MarkPrice","LiqPrice","liqPrice","TPSLPrice","fullTPSL","partialTPSL","FundingFee","PositionCell","className","body","buttons","usePositionCellScript","PositionCellWidget","usePositionClose","toast","PositionsRowProvider","setQuantity","setPrice","setType","submit","calculate","newValues","transSymbolformString","err","formatString","arr","Positions","index","MobilePositions","CombinePositions","tableData","row","column","PositionsWidget","MobilePositionsWidget","CombinePositionsWidget","DataFilter","capitalizeFirstLetter","usePositionHistoryColumn","SymbolInfo","Quantity","NetPnL","avgOpen","avgClose","tags","list","status","renderStatus","netPnl","text","differenceInDays","subDays","setHours","offsetStartOfDay","date","newDate","offsetEndOfDay","formatDatePickerRange","option","areDatesEqual","date1","date2","usePositionHistoryScript","dateRange","filterDays","updateFilterDays","filterItems","onFilter","useFilter","filterData","sideFilter","statusFilter","time","dateFilter","symbolFilter","setStatus","setSide","defaultRange","setFilterDays","setDateRange","days","filter","newDateRange","diffDays","dateRangeFilter","PositionHistoryType","showAlert","ClosedQty","closedQty","MaxClosedQty","maxClosedQty","AvgClosed","OpenTime","ClosedTime","PositionHistoryCell","Header","Body","usePositionHistoryCellScript","PositionHistoryCellWidget","PositionHistory","dayLabel","MobilePositionHistory","PositionHistoryWidget","MobilePositionHistoryWidget","classNames","TooltipButton","useLiquidationColumn","FormattedText","abs_liquidation_fee","ctx","isExpanded","ArrowIcon","LiquidationCell","mr","DataItem","align","useLiquidationCellScript","LiquidationCellWidget","Liquidation","expanded","setExpanded","LiquidationDetails","TooltipHeaderCell","margin_ratio","account_mmr","collateral_value","position_notional","MobileLiquidation","useLiquidationScript","enableLoadMore","page","pageSize","parsePagination","meta","useLiquidation","ordersResponse","generateKeyFun","liquidationFeeRate","firstPosition","size","search","LiquidationWidget","MobileLiquidationWidget","MarketCloseConfirmID"],"mappings":"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","sourcesContent":["import { registerSimpleDialog } from \"@orderly.network/ui\";\nimport { MarketCloseConfirm } from \"./components/positions/closePosition/components/confirmDialog\";\n\nexport { usePositionsRowContext } from \"./components/positions/positionsRowContext\";\n\nexport { FundingFeeHistoryUI } from \"./components/fundingFeeHistory/fundingFeeHistory.ui\";\nexport { FundingFeeButton } from \"./components/fundingFeeHistory/fundingFeeButton\";\n\nexport {\n PositionsWidget,\n MobilePositionsWidget,\n CombinePositionsWidget,\n} from \"./components/positions/positions.widget\";\n\nexport type { PositionsProps } from \"./types/types\";\n\nexport const MarketCloseConfirmID = \"MarketCloseConfirmID\";\n\nregisterSimpleDialog(MarketCloseConfirmID, MarketCloseConfirm, {\n size: \"md\",\n closable: false,\n});\n\nexport * from \"./components/positionHistory\";\nexport * from \"./components/liquidation\";\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { OrderEntity, OrderSide } from \"@orderly.network/types\";\nimport {\n Button,\n Text,\n CloseIcon,\n Flex,\n Divider,\n Badge,\n ThrottledButton,\n Box,\n} from \"@orderly.network/ui\";\nimport { commify, commifyOptional, Decimal } from \"@orderly.network/utils\";\n\nexport const ConfirmHeader: FC<{\n onClose?: () => void;\n title: string;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { hideCloseIcon = false } = props;\n return (\n <div className=\"oui-relative oui-w-full oui-border-b oui-border-line-4 oui-pb-3\">\n <Text size={\"base\"}>{props.title}</Text>\n {!hideCloseIcon && (\n <button\n onClick={props.onClose}\n className=\"oui-absolute oui-right-0 oui-top-0 oui-p-2 oui-text-base-contrast-54 hover:oui-text-base-contrast-80\"\n >\n <CloseIcon size={18} color=\"white\" />\n </button>\n )}\n </div>\n );\n};\n\nexport const ConfirmFooter: FC<{\n onConfirm?: () => Promise<any>;\n onCancel?: () => void;\n submitting?: boolean;\n disabled?: boolean;\n}> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n id=\"oui-positions-confirm-footer\"\n gap={2}\n width={\"100%\"}\n className=\"oui-mt-3 oui-pb-1\"\n >\n <Button\n id=\"oui-positions-confirm-footer-cancel-button\"\n color={\"secondary\"}\n fullWidth\n onClick={props.onCancel}\n size=\"md\"\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton\n id=\"oui-positions-confirm-footer-confirm-button\"\n onClick={props.onConfirm}\n fullWidth\n loading={props.submitting}\n disabled={props.disabled}\n size=\"md\"\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n );\n};\n\nexport const OrderDetail = (props: {\n quantity: any;\n price: any;\n side: OrderSide;\n quoteDp: number;\n className?: string;\n}) => {\n const { quantity, price, quoteDp, side } = props;\n const { t } = useTranslation();\n\n const total = useMemo(() => {\n if (price && quantity) {\n return new Decimal(price)\n .mul(quantity)\n .toFixed(quoteDp, Decimal.ROUND_DOWN);\n }\n return \"--\";\n }, [price, quantity]);\n\n return (\n <Flex\n direction={\"column\"}\n gap={1}\n width={\"100%\"}\n className=\"oui-text-sm oui-text-base-contrast-54\"\n py={5}\n >\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.qty\")}</Text>\n <Text color={side === OrderSide.BUY ? \"success\" : \"danger\"}>\n {quantity}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.price\")}</Text>\n <Text.formatted\n intensity={98}\n suffix={<Text intensity={54}>USDC</Text>}\n >\n {price}\n </Text.formatted>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.notional\")}</Text>\n <Text.formatted\n intensity={98}\n suffix={<Text intensity={54}>USDC</Text>}\n >\n {total}\n </Text.formatted>\n </Flex>\n </Flex>\n );\n};\n\nexport const MarketCloseConfirm: FC<{\n base?: string;\n quantity?: string;\n onClose?: () => void;\n close?: () => void;\n onConfirm?: () => Promise<any>;\n submitting?: boolean;\n hideCloseIcon?: boolean;\n classNames?: {\n root?: string;\n };\n}> = (props) => {\n const { t } = useTranslation();\n\n const onCancel = () => {\n const func = props?.onClose ?? props.close;\n func?.();\n };\n return (\n <Flex direction={\"column\"} className={props.classNames?.root}>\n <ConfirmHeader\n onClose={onCancel}\n title={t(\"positions.marketClose\")}\n hideCloseIcon={props.hideCloseIcon}\n />\n <Text intensity={54} size=\"sm\" className=\"oui-my-5\">\n {t(\"positions.marketClose.description\", {\n quantity: commifyOptional(props.quantity),\n base: props.base,\n })}\n </Text>\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={async () => {\n await props.onConfirm?.();\n onCancel();\n }}\n submitting={props.submitting}\n />\n </Flex>\n );\n};\n\nexport const LimitConfirmDialog: FC<{\n base: string;\n quantity: string;\n price: string;\n onClose?: () => void;\n onConfirm: () => Promise<any>;\n order: OrderEntity;\n submitting: boolean;\n quoteDp?: number;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { order, quoteDp, quantity, price } = props;\n const { side } = order;\n const { t } = useTranslation();\n\n const onCancel = () => {\n props.onClose?.();\n };\n\n return (\n <>\n <ConfirmHeader\n onClose={onCancel}\n title={t(\"positions.limitClose\")}\n hideCloseIcon={props.hideCloseIcon}\n />\n <Box mt={5}>\n <Text intensity={54} size=\"sm\">\n {t(\"positions.limitClose.description\", {\n quantity: commify(props.quantity),\n base: props.base,\n })}\n </Text>\n </Box>\n\n <Flex gap={2} mb={4} mt={5} justify={\"between\"}>\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"base\"\n showIcon\n >\n {order.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n {t(\"orderEntry.orderType.limit\")}\n </Badge>\n <Badge\n color={side === OrderSide.BUY ? \"success\" : \"danger\"}\n size=\"xs\"\n >\n {side === OrderSide.BUY ? t(\"common.buy\") : t(\"common.sell\")}\n </Badge>\n </Flex>\n </Flex>\n\n <Divider className=\"oui-w-full\" />\n\n <OrderDetail\n className=\"oui-text-sm\"\n price={price}\n quantity={quantity}\n side={order.side}\n quoteDp={quoteDp ?? 2}\n />\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={props.onConfirm}\n submitting={props.submitting}\n />\n </>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { API, OrderSide, OrderType } from \"@orderly.network/types\";\n\nexport interface PositionsRowContextState {\n quantity: string;\n price: string;\n type: OrderType;\n side: OrderSide;\n position: API.PositionExt | API.PositionTPSLExt;\n updateQuantity: (value: string) => void;\n updatePriceChange: (value: string) => void;\n updateOrderType: (value: OrderType) => void;\n\n closeOrderData: any;\n\n onSubmit: () => Promise<any>;\n submitting: boolean;\n tpslOrder?: API.AlgoOrder;\n partialTPSLOrder?: API.AlgoOrder;\n quoteDp?: number;\n baseDp?: number;\n baseTick?: number;\n errors: any | undefined;\n}\n\nexport const PositionsRowContext = createContext(\n {} as PositionsRowContextState,\n);\n\nexport const usePositionsRowContext = () => {\n return useContext(PositionsRowContext);\n};\n","import { FC, useCallback, useMemo } from \"react\";\nimport { usePrivateInfiniteQuery } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { EMPTY_LIST } from \"@orderly.network/types\";\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 ?? EMPTY_LIST}\n isLoading={isLoading}\n loadMore={loadMore}\n />\n );\n }\n return (\n <HistoryDataListView\n data={flattenData ?? EMPTY_LIST}\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 ?? EMPTY_LIST}\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 \"../../provider/symbolProvider\";\nimport type { PositionsProps } from \"../../types/types\";\nimport type { CombinePositionsState } from \"./combinePositions.script\";\nimport { useColumn } from \"./desktop/useColumn\";\nimport { PositionCellWidget } from \"./mobile/positionCell\";\nimport type { PositionsState } from \"./positions.script\";\nimport { PositionsRowProvider } from \"./positionsRowProvider\";\n\nexport const Positions: React.FC<Readonly<PositionsState>> = (props) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n pagination,\n isLoading,\n dataSource,\n onSymbolChange,\n } = props;\n\n const columns = useColumn({\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange: onSymbolChange,\n });\n\n return (\n <AuthGuardDataTable<API.PositionTPSLExt>\n loading={isLoading}\n id=\"oui-desktop-positions-content\"\n columns={columns}\n bordered\n dataSource={dataSource}\n generatedRowKey={(record: any) => record.symbol}\n renderRowContainer={(record: any, index: number, children: any) => {\n return (\n <SymbolProvider symbol={record.symbol}>\n <PositionsRowProvider position={record}>\n {children}\n </PositionsRowProvider>\n </SymbolProvider>\n );\n }}\n manualPagination={false}\n pagination={pagination}\n testIds={{\n body: \"oui-testid-dataList-position-tab-body\",\n }}\n />\n );\n};\n\nexport const MobilePositions: React.FC<\n Readonly<PositionsState & PositionsProps>\n> = (props) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n dataSource,\n onSymbolChange,\n } = props;\n return (\n <ListView\n className=\"oui-hide-scrollbar oui-w-full oui-space-y-0 oui-overflow-y-hidden\"\n contentClassName=\"!oui-space-y-1\"\n dataSource={dataSource}\n renderItem={(item, index) => (\n <SymbolProvider symbol={item.symbol}>\n <PositionsRowProvider position={item}>\n <PositionCellWidget\n item={item}\n index={index}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n sharePnLConfig={sharePnLConfig}\n onSymbolChange={onSymbolChange}\n />\n </PositionsRowProvider>\n </SymbolProvider>\n )}\n />\n );\n};\n\nexport const CombinePositions: React.FC<Readonly<CombinePositionsState>> = (\n props,\n) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n pagination,\n isLoading,\n tableData,\n onSymbolChange,\n mutatePositions,\n } = props;\n\n const columns = useColumn({\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange: onSymbolChange,\n });\n\n const { dataSource = [] } = tableData;\n\n return (\n <AuthGuardDataTable<any>\n bordered\n loading={isLoading}\n id=\"oui-desktop-positions-content\"\n columns={columns}\n dataSource={dataSource}\n expanded\n getSubRows={(row) => row.children}\n generatedRowKey={(record) => record.id}\n onCell={(column, record) => {\n const isGroup = (record.children ?? []).length > 0;\n if (isGroup) {\n return {\n children:\n column.id === \"symbol\" ? (\n <Badge color=\"neutral\" size=\"xs\">\n {record?.description || formatAddress(record?.id)}\n </Badge>\n ) : null,\n };\n }\n }}\n renderRowContainer={(record: any, index: number, children: any) => {\n if (record.symbol) {\n return (\n <SymbolProvider symbol={record.symbol}>\n <PositionsRowProvider\n position={record}\n mutatePositions={mutatePositions}\n >\n {children}\n </PositionsRowProvider>\n </SymbolProvider>\n );\n }\n return children;\n }}\n manualPagination={false}\n pagination={pagination}\n testIds={{\n body: \"oui-testid-dataList-position-tab-body\",\n }}\n />\n );\n};\n","import { FC, PropsWithChildren, useMemo } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { SymbolContext, SymbolContextState } from \"./symbolContext\";\n\ninterface FormatterProviderProps {\n symbol: string;\n}\n\nexport const SymbolProvider: FC<PropsWithChildren<FormatterProviderProps>> = (\n props,\n) => {\n const { symbol, children } = props;\n const symbolInfo = useSymbolsInfo()[symbol];\n const memoizedValue = useMemo<SymbolContextState>(() => {\n return {\n symbol: symbol,\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n base_tick: symbolInfo(\"base_tick\"),\n quote_tick: symbolInfo(\"quote_tick\"),\n base: symbolInfo(\"base\"),\n quote: symbolInfo(\"quote\"),\n origin: symbolInfo(),\n quote_max: symbolInfo(\"quote_max\"),\n quote_min: symbolInfo(\"quote_min\"),\n };\n }, [symbol, symbolInfo]);\n return (\n <SymbolContext.Provider value={memoizedValue}>\n {children}\n </SymbolContext.Provider>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport type { 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<SymbolContextState>(\n {} as SymbolContextState,\n);\n\nexport const useSymbolContext = () => {\n return useContext(SymbolContext);\n};\n","import { useMemo, useRef } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Box,\n cn,\n Divider,\n Flex,\n HoverCard,\n Column,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { SharePnLOptions, SharePnLDialogId } from \"@orderly.network/ui-share\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FundingFeeButton } from \"../../fundingFeeHistory/fundingFeeButton\";\nimport { ClosePositionWidget } from \"../closePosition\";\nimport { TPSLButton, LeverageBadge } from \"./components\";\nimport {\n renderPriceInput,\n renderQuantity,\n renderQuantityInput,\n} from \"./listElement\";\nimport { NumeralWithCtx } from \"./numeralWithCtx\";\nimport { PartialTPSL } from \"./partialTPSL\";\nimport { ShareButtonWidget } from \"./shareButton\";\nimport { TriggerPrice } from \"./triggerPrice\";\nimport { UnrealizedPnLPopoverCard } from \"./unrealPnLHover\";\n\ninterface ColumnConfig {\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLOptions;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}\n\nexport const useColumn = (config: ColumnConfig) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig, onSymbolChange } =\n config;\n const { t } = useTranslation();\n const fundingFeeEndTime = useRef(Date.now().toString());\n const column = useMemo<Column<API.PositionTPSLExt>[]>(\n () => [\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 140,\n onSort: (r1, r2) => {\n return r1.symbol.localeCompare(r2.symbol);\n // if (sortOrder === \"asc\") {\n // return r1.symbol.localeCompare(r2.symbol);\n // }\n // return r2.symbol.localeCompare(r1.symbol);\n },\n render: (value: string, record) => (\n <Flex gap={2}>\n <Box\n width={4}\n height={20}\n className={cn(\n \"oui-h-[38px] oui-rounded-[1px]\",\n record.position_qty > 0\n ? \"oui-bg-trade-profit\"\n : \"oui-bg-trade-loss\",\n )}\n />\n <Flex direction=\"column\" itemAlign=\"start\">\n <Text.formatted\n // rule={\"symbol\"}\n formatString=\"base-type\"\n className=\"oui-cursor-pointer\"\n onClick={(e) => {\n onSymbolChange?.({ symbol: value } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${value.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n <LeverageBadge symbol={value} />\n </Flex>\n </Flex>\n ),\n },\n {\n title: t(\"common.quantity\"),\n dataIndex: \"position_qty\",\n // onSort: true,\n onSort: (a, b) => {\n return a.position_qty - b.position_qty;\n },\n width: 120,\n className: \"oui-pl-6\",\n // rule: \"price\",\n // numeralProps: {\n // coloring: true,\n // // tick: \"base_dp\",\n // },\n render: renderQuantity,\n // render: (value: string) => (\n // <NumeralWithCtx\n // coloring\n // className=\"oui-font-semibold\"\n // tick=\"base_dp\"\n // >\n // {value}\n // </NumeralWithCtx>\n // ),\n },\n {\n title: t(\"common.avgOpen\"),\n className: \"oui-h-[48px]\",\n width: 120,\n onSort: true,\n dataIndex: \"average_open_price\",\n render: (value: string) => {\n // const ctx = usePositionsRowContext();\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: t(\"common.markPrice\"),\n dataIndex: \"mark_price\",\n width: 120,\n onSort: true,\n className: \"oui-h-[48px]\",\n render: (value: string) => {\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast-54\"\n content={t(\"positions.column.liqPrice.tooltip\")}\n >\n <Text>{t(\"positions.column.liqPrice\")}</Text>\n </Tooltip>\n ),\n width: 100,\n onSort: true,\n dataIndex: \"est_liq_price\",\n render: (value: string) => {\n return Number(value) === 0 ? (\n \"--\"\n ) : (\n <NumeralWithCtx\n rm={Decimal.ROUND_DOWN}\n className={Number(value) > 0 ? \"oui-text-warning-light\" : \"\"}\n >\n {value ?? \"--\"}\n </NumeralWithCtx>\n );\n },\n },\n {\n title: (\n <HoverCard\n content={<UnrealizedPnLPopoverCard />}\n side=\"top\"\n align=\"center\"\n className=\"oui-max-w-[280px] oui-text-2xs\"\n >\n <Text>{t(\"common.unrealizedPnl\")}</Text>\n </HoverCard>\n ),\n dataIndex: \"unrealized_pnl\",\n width: 180,\n onSort: true,\n rule: \"price\",\n numeralProps: {\n coloring: true,\n // tick: \"base_dp\",\n },\n // hint: <UnrealizedPnLPopoverCard />,\n render: (value: string, record) => {\n return (\n <Flex gap={2}>\n <Flex>\n <Text.numeral\n dp={pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"oui-font-semibold\"\n >\n {value}\n </Text.numeral>\n <Text.numeral\n rule=\"percentages\"\n dp={pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"oui-font-semibold\"\n prefix=\"(\"\n suffix=\")\"\n >\n {record.unrealized_pnl_ROI}\n </Text.numeral>\n </Flex>\n <ShareButtonWidget\n position={record}\n sharePnLConfig={sharePnLConfig}\n modalId={SharePnLDialogId}\n />\n </Flex>\n );\n },\n },\n {\n title: t(\"common.fullTPSL\"),\n dataIndex: \"full_tpsl\",\n width: 150,\n render: (_: string, record) => {\n return (\n <TriggerPrice\n stopLossPrice={record.full_tp_sl?.sl_trigger_price}\n takeProfitPrice={record.full_tp_sl?.tp_trigger_price}\n />\n );\n },\n },\n\n {\n title: t(\"common.partialTPSL\"),\n dataIndex: \"partial_tpsl\",\n width: 150,\n render: (_: string, record) => (\n <PartialTPSL\n orderNum={record.partial_tp_sl?.order_num}\n tpTriggerPrice={record.partial_tp_sl?.tp_trigger_price}\n slTriggerPrice={record.partial_tp_sl?.sl_trigger_price}\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: 70,\n fixed: \"right\",\n render() {\n return (\n <Flex gapX={2} justify={\"end\"}>\n <ClosePositionWidget />\n </Flex>\n );\n },\n },\n ],\n [pnlNotionalDecimalPrecision, sharePnLConfig, t],\n );\n return column;\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Badge,\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n SimpleDialog,\n SimpleSheet,\n Text,\n ThrottledButton,\n} from \"@orderly.network/ui\";\nimport { ClosePositionScriptReturn } from \"./closePosition.script\";\nimport {\n LimitConfirmDialog,\n MarketCloseConfirm,\n} from \"./components/confirmDialog\";\nimport { QuantitySlider } from \"./components/quantitySlider\";\n\nexport const MobileClosePosition: FC<ClosePositionScriptReturn> = (props) => {\n const {\n base,\n base_dp,\n quote,\n quote_dp,\n sheetOpen,\n setSheetOpen,\n dialogOpen,\n setDialogOpen,\n quantity,\n price,\n submitting,\n priceErrorMsg,\n quantityErrorMsg,\n disabled,\n isMarketClose,\n position,\n maxQty,\n isBuy,\n } = props;\n const { t } = useTranslation();\n\n const title = isMarketClose\n ? t(\"positions.marketClose\")\n : t(\"positions.limitClose\");\n\n const orderType = isMarketClose\n ? t(\"orderEntry.orderType.market\")\n : t(\"orderEntry.orderType.limit\");\n\n const orderSide = isBuy ? (\n <Badge color=\"success\" size=\"xs\">\n {t(\"common.buy\")}\n </Badge>\n ) : (\n <Badge color=\"danger\" size=\"xs\">\n {t(\"common.sell\")}\n </Badge>\n );\n\n const header = (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text.formatted rule={\"symbol\"} showIcon>\n {position.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n {orderType}\n </Badge>\n {orderSide}\n </Flex>\n </Flex>\n );\n\n const lastPrice = (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text intensity={54}>{t(\"common.lastPrice\")}</Text>\n <Text.numeral dp={quote_dp} suffix={<Text intensity={36}> {quote}</Text>}>\n {position.mark_price}\n </Text.numeral>\n </Flex>\n );\n\n const inputForm = !isMarketClose && (\n <>\n <Flex width={\"100%\"} direction={\"column\"} gap={2}>\n <Input.tooltip\n prefix={t(\"common.price\")}\n suffix={quote}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(quote_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={priceErrorMsg}\n color={priceErrorMsg ? \"danger\" : undefined}\n value={price}\n onValueChange={props.updatePriceChange}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n priceErrorMsg ? \"oui-outline-danger\" : undefined,\n ),\n }}\n />\n <Input.tooltip\n prefix={t(\"common.quantity\")}\n suffix={base}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(base_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={quantityErrorMsg}\n color={quantityErrorMsg ? \"danger\" : undefined}\n value={quantity}\n onBlur={() => props.formatQuantityToBaseTick(quantity)}\n onValueChange={props.updateQuantity}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n quantityErrorMsg ? \"oui-outline-danger\" : undefined,\n ),\n }}\n />\n </Flex>\n </>\n );\n\n const slider = (\n <QuantitySlider\n value={props.sliderValue}\n onValueChange={props.onSliderValueChange}\n base_dp={base_dp}\n max={maxQty}\n onMax={props.onMax}\n />\n );\n\n const footer = (\n <Flex width={\"100%\"} gap={3} mt={2}>\n <Button fullWidth color=\"secondary\" onClick={props.onCloseSheet}>\n {t(\"common.cancel\")}\n </Button>\n\n <ThrottledButton\n fullWidth\n disabled={submitting || disabled}\n loading={submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.onDoubleConfirm();\n }}\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n );\n\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n setSheetOpen(true);\n }}\n >\n {title}\n </Button>\n\n <SimpleSheet title={title} open={sheetOpen} onOpenChange={setSheetOpen}>\n <Flex\n direction={\"column\"}\n gap={3}\n width={\"100%\"}\n itemAlign={\"start\"}\n className=\"oui-text-sm\"\n >\n {header}\n <Divider className=\"oui-w-full\" />\n {lastPrice}\n {inputForm}\n {slider}\n {footer}\n </Flex>\n </SimpleSheet>\n\n <SimpleDialog open={dialogOpen} onOpenChange={setDialogOpen} size=\"xs\">\n {isMarketClose ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n submitting={submitting}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n hideCloseIcon\n />\n ) : (\n <LimitConfirmDialog\n base={base}\n quoteDp={quote_dp}\n quantity={quantity}\n price={price}\n submitting={submitting}\n order={props.closeOrderData}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n hideCloseIcon\n />\n )}\n </SimpleDialog>\n </>\n );\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { Flex, Slider, Text } from \"@orderly.network/ui\";\n\ntype QuantitySliderProps = {\n value: number;\n onValueChange: (value: number) => void;\n base_dp: number;\n max: number;\n onMax: () => void;\n};\n\nexport const QuantitySlider = (props: QuantitySliderProps) => {\n const { t } = useTranslation();\n\n return (\n <>\n <Slider\n showTip\n markCount={4}\n value={[props.value]}\n color=\"primary\"\n onValueChange={(value) => {\n props.onValueChange(value[0]);\n }}\n />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text color=\"primary\" size=\"2xs\">{`${props.value}%`}</Text>\n <Flex gap={1} onClick={props.onMax} className=\"oui-cursor-pointer\">\n <Text size=\"2xs\" color=\"primary\">\n {t(\"common.max\")}\n </Text>\n <Text.numeral\n intensity={54}\n size=\"2xs\"\n dp={props.base_dp}\n padding={false}\n >\n {props.max}\n </Text.numeral>\n </Flex>\n </Flex>\n </>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { OrderType } from \"@orderly.network/types\";\nimport {\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n PopoverContent,\n PopoverRoot,\n PopoverTrigger,\n Select,\n SimpleDialog,\n Text,\n} from \"@orderly.network/ui\";\nimport { ClosePositionScriptReturn } from \"./closePosition.script\";\nimport {\n ConfirmFooter,\n LimitConfirmDialog,\n MarketCloseConfirm,\n} from \"./components/confirmDialog\";\nimport { QuantitySlider } from \"./components/quantitySlider\";\n\nexport const DesktopClosePosition: FC<ClosePositionScriptReturn> = (props) => {\n const {\n position,\n base,\n base_dp,\n quote_dp,\n price,\n quantity,\n submitting,\n dialogOpen,\n setDialogOpen,\n isMarketClose,\n popoverOpen,\n setPopoverOpen,\n maxQty,\n quantityErrorMsg,\n priceErrorMsg,\n isEntirePosition,\n } = props;\n\n const { t } = useTranslation();\n\n // const disabled = isMarketClose ? !quantity : !price || !quantity;\n\n const quantityForm = (\n <Flex width=\"100%\" gap={2} mb={1}>\n <Input.tooltip\n ref={props.quantityInputRef}\n prefix={t(\"common.quantity\")}\n suffix={\n isEntirePosition ? (\n <Text\n size=\"2xs\"\n intensity={54}\n className=\"oui-cursor-pointer oui-px-3\"\n onClick={props.onEntirePosition}\n >\n {t(\"tpsl.entirePosition\")}\n </Text>\n ) : (\n base\n )\n }\n align=\"right\"\n size=\"md\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(base_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={quantityErrorMsg}\n color={quantityErrorMsg ? \"danger\" : undefined}\n value={isEntirePosition ? \"\" : quantity}\n onBlur={() => props.formatQuantityToBaseTick(quantity)}\n onValueChange={props.updateQuantity}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n quantityErrorMsg ? \"oui-outline-danger\" : undefined,\n ),\n }}\n />\n <Button\n onClick={props.onMax}\n size=\"md\"\n variant=\"outlined\"\n className={cn(\n \"oui-text-2xs\",\n isEntirePosition\n ? \"oui-border-primary-light oui-text-primary-light hover:oui-bg-primary-light/20\"\n : \"oui-border-line-12 oui-bg-base-6 oui-text-base-contrast-54 hover:oui-bg-base-5\",\n )}\n >\n {t(\"common.position\")}\n </Button>\n </Flex>\n );\n\n const suffix = (\n <Select.options\n variant=\"text\"\n size=\"md\"\n options={[\n {\n label: t(\"orderEntry.orderType.limit\"),\n value: OrderType.LIMIT,\n },\n {\n label: t(\"orderEntry.orderType.market\"),\n value: OrderType.MARKET,\n },\n ]}\n classNames={{\n // set the width of the trigger to the width of the content\n trigger: \"oui-w-[--radix-select-content-available-width]\",\n }}\n value={props.type}\n onValueChange={(value) => {\n props.updateOrderType(value as OrderType);\n }}\n contentProps={{\n align: \"end\",\n className: \"oui-border oui-border-line-6\",\n }}\n />\n );\n\n const disabledInput = isMarketClose;\n\n const priceForm = (\n <Input.tooltip\n suffix={suffix}\n size=\"md\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(quote_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={priceErrorMsg}\n color={priceErrorMsg ? \"danger\" : undefined}\n value={price}\n onValueChange={props.updatePriceChange}\n placeholder={disabledInput ? \"--\" : \"\"}\n disabled={disabledInput}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n priceErrorMsg ? \"oui-outline-danger\" : undefined,\n // when disabled, override the outline color\n disabledInput ? \"focus-within:oui-outline-line-12\" : undefined,\n ),\n }}\n />\n );\n\n return (\n <>\n <PopoverRoot open={popoverOpen} onOpenChange={setPopoverOpen}>\n <PopoverTrigger\n asChild\n onClick={() => {\n setPopoverOpen(true);\n }}\n >\n <Button variant=\"outlined\" size=\"sm\" color=\"secondary\">\n {t(\"positions.column.close\")}\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className={cn(\n \"oui-w-[360px] oui-p-5\",\n popoverOpen ? \"oui-visible\" : \"oui-invisible\",\n )}\n align=\"end\"\n side=\"top\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <Flex gapY={2} direction=\"column\">\n {quantityForm}\n <QuantitySlider\n value={props.sliderValue}\n onValueChange={props.onSliderValueChange}\n base_dp={base_dp}\n max={maxQty}\n onMax={props.onMax}\n />\n <Divider my={2} intensity={8} className=\"oui-w-full\" />\n {priceForm}\n <ConfirmFooter\n onConfirm={props.onDoubleConfirm}\n onCancel={props.onClosePopover}\n submitting={submitting}\n disabled={props.disabled}\n />\n </Flex>\n </PopoverContent>\n </PopoverRoot>\n\n <SimpleDialog open={dialogOpen} onOpenChange={setDialogOpen} size=\"sm\">\n {isMarketClose ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n submitting={submitting}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n classNames={{\n root: \"oui-items-start\",\n }}\n hideCloseIcon\n />\n ) : (\n <LimitConfirmDialog\n base={base}\n quoteDp={quote_dp}\n quantity={quantity}\n price={price}\n submitting={submitting}\n order={props.closeOrderData}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n hideCloseIcon\n />\n )}\n </SimpleDialog>\n </>\n );\n};\n","import { useScreen } from \"@orderly.network/ui\";\nimport {\n ClosePositionScriptProps,\n useClosePositionScript,\n} from \"./closePosition.script\";\nimport { DesktopClosePosition } from \"./closePosition.ui\";\nimport { MobileClosePosition } from \"./closePositions.mobile.ui\";\n\ntype ClosePositionWidgetProps = Pick<ClosePositionScriptProps, \"type\">;\n\nexport const ClosePositionWidget = (props: ClosePositionWidgetProps) => {\n const state = useClosePositionScript(props);\n const { isMobile } = useScreen();\n\n if (isMobile) {\n return <MobileClosePosition {...state} />;\n }\n\n return <DesktopClosePosition {...state} />;\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useLocalStorage, utils } from \"@orderly.network/hooks\";\nimport { useOrderEntryFormErrorMsg } from \"@orderly.network/react-app\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\nexport type ClosePositionScriptProps = {\n type?: OrderType.MARKET | OrderType.LIMIT;\n};\n\nexport type ClosePositionScriptReturn = ReturnType<\n typeof useClosePositionScript\n>;\n\nexport const useClosePositionScript = (props: ClosePositionScriptProps) => {\n const [sheetOpen, setSheetOpen] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [popoverOpen, setPopoverOpen] = useState(false);\n const [sliderValue, setSliderValue] = useState(100);\n const quantityInputRef = useRef<HTMLInputElement>(null);\n const [orderConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n\n const {\n position,\n onSubmit,\n price,\n quantity,\n closeOrderData,\n submitting,\n updatePriceChange,\n updateOrderType,\n updateQuantity,\n errors,\n baseTick,\n type,\n } = usePositionsRowContext();\n const { quote_dp, base_dp, base, quote } = useSymbolContext();\n const { getErrorMsg } = useOrderEntryFormErrorMsg(errors);\n\n // buy position quantity is positive, sell position quantity is negative\n const isBuy = position.position_qty > 0;\n\n // we need to use Math.abs to get the absolute value of the position quantity\n const maxQty = Math.abs(position.position_qty);\n\n // close position type: limit or market\n const closeType = props.type || type;\n\n const isMarketClose = closeType === OrderType.MARKET;\n\n const isEntirePosition = maxQty?.toString() === quantity.toString();\n\n useEffect(() => {\n // mobile sheet open, update order type\n if (sheetOpen) {\n updateOrderType(props.type as OrderType);\n }\n }, [props.type, sheetOpen]);\n\n // reset state when sheet is closed\n // useEffect(() => {\n // if (!sheetOpen || !popoverOpen) {\n // // set default slider value to 100 when table edit remove\n // updateQuantity(maxQty?.toString());\n // }\n // }, [sheetOpen, popoverOpen, maxQty]);\n\n const { priceErrorMsg, quantityErrorMsg } = useMemo(() => {\n return {\n priceErrorMsg: getErrorMsg(\"order_price\"),\n quantityErrorMsg: getErrorMsg(\"order_quantity\"),\n };\n // getErrorMsg is changed when errors is changed\n }, [errors]);\n\n const disabled = !!(priceErrorMsg || quantityErrorMsg);\n\n const formatQuantityToBaseTick = useCallback(\n (value: string) => {\n if (baseTick && baseTick > 0) {\n // format quantity to baseTick\n const formatQty = utils.formatNumber(value, baseTick) ?? value;\n updateQuantity(formatQty);\n }\n },\n [baseTick, updateQuantity],\n );\n\n const onSliderValueChange = useCallback(\n (value: number) => {\n setSliderValue(value);\n\n // transform slider value to quantity\n const qty = new Decimal(value)\n .div(100)\n .mul(maxQty)\n .toFixed(base_dp, Decimal.ROUND_DOWN);\n\n formatQuantityToBaseTick(qty);\n },\n [maxQty, base_dp, formatQuantityToBaseTick],\n );\n\n useEffect(() => {\n const qty = Math.min(Number(quantity || 0), maxQty);\n // transform quantity to slider value\n const slider = new Decimal(qty)\n .div(maxQty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n\n setSliderValue(slider);\n }, [quantity]);\n\n const onMax = useCallback(() => {\n updateQuantity(maxQty?.toString());\n }, [maxQty, updateQuantity]);\n\n const onConfirm = useCallback(() => {\n return onSubmit().then((res) => {\n setSheetOpen(false);\n setDialogOpen(false);\n setPopoverOpen(false);\n });\n }, [onSubmit]);\n\n const onDoubleConfirm = useCallback(() => {\n if (!orderConfirm) {\n return onConfirm();\n }\n setDialogOpen(true);\n return Promise.resolve();\n }, [onConfirm, orderConfirm]);\n\n const onCloseSheet = useCallback(() => {\n setSheetOpen(false);\n }, []);\n\n const onCloseDialog = useCallback(() => {\n setDialogOpen(false);\n }, []);\n\n const onClosePopover = useCallback(() => {\n setPopoverOpen(false);\n }, []);\n\n // when click entire position button, set quantity to 0 and focus on input\n const onEntirePosition = useCallback(() => {\n updateQuantity(\"0\");\n quantityInputRef.current?.focus();\n\n setTimeout(() => {\n quantityInputRef.current?.setSelectionRange(0, 1);\n }, 0);\n }, [updateQuantity]);\n\n return {\n position,\n closeOrderData,\n quote_dp,\n base_dp,\n base,\n quote,\n price,\n quantity,\n submitting,\n\n onConfirm,\n onDoubleConfirm,\n updatePriceChange,\n updateQuantity,\n formatQuantityToBaseTick,\n updateOrderType,\n\n sliderValue,\n onSliderValueChange,\n\n priceErrorMsg,\n quantityErrorMsg,\n disabled,\n isMarketClose,\n\n maxQty,\n onMax,\n isBuy,\n isEntirePosition,\n type: closeType,\n quantityInputRef,\n onEntirePosition,\n\n sheetOpen,\n onCloseSheet,\n setSheetOpen,\n\n dialogOpen,\n setDialogOpen,\n onCloseDialog,\n\n popoverOpen,\n setPopoverOpen,\n onClosePopover,\n };\n};\n","import React from \"react\";\nimport { ComputedAlgoOrder, useLocalStorage } from \"@orderly.network/hooks\";\nimport { useSymbolLeverage } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { PositionType } from \"@orderly.network/types\";\nimport { cn, EditIcon, Text, toast, useScreen } from \"@orderly.network/ui\";\nimport { modal } from \"@orderly.network/ui\";\nimport {\n PositionTPSLPopover,\n TPSLDetailDialogId,\n TPSLDialogId,\n TPSLSheetId,\n TPSLDetailSheetId,\n} from \"@orderly.network/ui-tpsl\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\n// ------------ TP/SL Price input end------------\nexport const TPSLButton = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n const { t } = useTranslation();\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n label={t(\"common.tpsl\")}\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing={false}\n />\n );\n};\n\nexport const TPSLEditIcon = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n const { isMobile } = useScreen();\n\n const onEdit = () => {\n const dialogId = isMobile ? TPSLDetailSheetId : TPSLDetailDialogId;\n modal.show(dialogId, {\n order: tpslOrder,\n position: position,\n baseDP: baseDp,\n quoteDP: quoteDp,\n });\n };\n\n return (\n // <PositionTPSLPopover\n // position={position}\n // order={tpslOrder}\n // baseDP={baseDp}\n // quoteDP={quoteDp}\n // isEditing\n // >\n <EditIcon\n onClick={onEdit}\n opacity={1}\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={16}\n />\n // </PositionTPSLPopover>\n );\n};\n\nexport const AddIcon = (props: { positionType: PositionType }) => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n const onAdd = () => {\n const dialogId = isMobile ? TPSLSheetId : TPSLDialogId;\n const modalParams = {\n symbol: position.symbol,\n baseDP: baseDp,\n quoteDP: quoteDp,\n isEditing: false,\n positionType: props.positionType,\n };\n modal.show(dialogId, modalParams);\n };\n return (\n <Text\n className={cn(\n \"oui-text-base-contrast oui-cursor-pointer\",\n isMobile && \"oui-text-base-contrast-80\",\n )}\n onClick={onAdd}\n >\n {t(\"tpsl.add\")}\n </Text>\n );\n};\n\nexport const LeverageBadge = ({ symbol }: { symbol: string }) => {\n if (!symbol) return null;\n return (\n <div className=\"oui-flex oui-h-[18px] oui-items-center oui-gap-1 oui-rounded oui-bg-white/[0.06] oui-px-2 oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n <Text>Cross</Text>\n <LeverageDisplay symbol={symbol} />\n </div>\n );\n};\n\nexport const LeverageDisplay = ({ symbol }: { symbol: string }) => {\n const leverage = useSymbolLeverage(symbol);\n\n return (\n <Text.numeral dp={0} size=\"2xs\" unit=\"X\">\n {leverage !== \"-\" ? leverage : \"--\"}\n </Text.numeral>\n );\n};\n","import { Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\nimport { PriceInput } from \"./priceInput\";\nimport { QuantityInput } from \"./quantityInput\";\n\nexport const renderQuantity = (value: number) => {\n const symbolInfo = useSymbolContext();\n return (\n <Text.numeral\n dp={symbolInfo.base_dp}\n rm={Decimal.ROUND_DOWN}\n padding={false}\n coloring\n >\n {value}\n </Text.numeral>\n );\n};\n\nexport const renderQuantityInput = (value: number, record: any) => {\n return <QuantityInput value={record[\"position_qty\"]} />;\n};\n\nexport const renderPriceInput = (value: number) => {\n return <PriceInput />;\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { OrderType } from \"@orderly.network/types\";\nimport {\n CaretDownIcon,\n cn,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Input,\n inputFormatter,\n} from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\nexport const PriceInput = () => {\n const { type, quoteDp, price, updatePriceChange, updateOrderType } =\n usePositionsRowContext();\n const { t } = useTranslation();\n\n return (\n <DropdownMenuRoot>\n <Input\n size=\"sm\"\n value={\n type === OrderType.LIMIT ? price : t(\"orderEntry.orderType.market\")\n }\n onValueChange={(e) => updatePriceChange(e)}\n formatters={[\n inputFormatter.numberFormatter,\n ...(quoteDp ? [inputFormatter.dpFormatter(quoteDp)] : []),\n ]}\n onFocus={() => {\n if (type === OrderType.MARKET) {\n updateOrderType(OrderType.LIMIT);\n }\n }}\n suffix={\n <DropdownMenuTrigger asChild>\n <button className=\"oui-h-full oui-px-1\">\n <CaretDownIcon size={12} color=\"white\" />\n </button>\n </DropdownMenuTrigger>\n }\n classNames={{\n root: cn(\n \"oui-border oui-border-solid oui-border-white/[0.12] oui-outline-none focus-within:oui-outline-primary-light\",\n ),\n }}\n />\n <DropdownMenuContent\n align=\"end\"\n className=\"oui-w-[96px] oui-min-w-[96px]\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DropdownMenuGroup>\n <DropdownMenuItem\n size=\"xs\"\n onSelect={() => {\n updateOrderType(OrderType.MARKET);\n }}\n >\n <span>{t(\"common.marketPrice\")}</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenuRoot>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { utils } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n PopoverRoot,\n PopoverContent,\n PopoverTrigger,\n Flex,\n Text,\n Slider,\n Button,\n inputFormatter,\n} from \"@orderly.network/ui\";\nimport { Input } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\nexport const QuantityInput = (props: { value: number }) => {\n const [sliderValue, setSliderValue] = useState<number>(100);\n const { baseDp, updateQuantity, quantity, baseTick } =\n usePositionsRowContext();\n\n const resetQuantity = (percent: number) => {\n formatQuantityToBaseTick(`${props.value * percent}`);\n };\n\n const formatQuantityToBaseTick = (value: string) => {\n if (baseTick && baseTick > 0) {\n // format quantity to baseTick\n const formatQty = utils.formatNumber(value, baseTick) ?? value;\n updateQuantity(formatQty);\n }\n };\n\n useEffect(() => {\n const maxQty = Math.abs(props.value);\n const qty = Math.min(Number(quantity || 0), maxQty);\n\n // transform quantity to slider value\n const slider = new Decimal(qty)\n .div(maxQty)\n .mul(100)\n .todp(2, Decimal.ROUND_DOWN)\n .toNumber();\n\n setSliderValue(slider);\n }, [quantity, props.value]);\n\n return (\n <PopoverRoot>\n <PopoverTrigger>\n <Input\n size=\"sm\"\n classNames={{\n root: \"oui-outline-none oui-border oui-border-solid oui-border-white/[0.12] focus-within:oui-outline-primary-light\",\n }}\n formatters={[\n inputFormatter.numberFormatter,\n ...(baseDp ? [inputFormatter.dpFormatter(baseDp)] : []),\n ]}\n value={quantity}\n onBlur={(event) => formatQuantityToBaseTick(event.target.value)}\n onValueChange={updateQuantity}\n />\n </PopoverTrigger>\n <PopoverContent\n className=\"oui-w-[360px] oui-rounded-xl\"\n align=\"start\"\n side=\"bottom\"\n onOpenAutoFocus={(event) => {\n event.preventDefault();\n }}\n >\n <Flex p={1} gap={2} width={\"100%\"} itemAlign={\"start\"}>\n <Text size=\"xs\" intensity={98} className=\"oui-min-w-[40px]\">\n {`${sliderValue}%`}\n </Text>\n <Flex direction={\"column\"} width={\"100%\"} gap={2}>\n <Slider\n markCount={4}\n value={[sliderValue]}\n onValueChange={(values) => {\n resetQuantity(values[0] / 100);\n }}\n />\n <PercentButtons onClick={resetQuantity} />\n </Flex>\n </Flex>\n </PopoverContent>\n </PopoverRoot>\n );\n};\n\nconst PercentButtons = (props: { onClick: (value: number) => void }) => {\n const { t } = useTranslation();\n const list = [\n {\n label: \"0%\",\n value: 0,\n },\n {\n label: \"25%\",\n value: 0.25,\n },\n {\n label: \"50%\",\n value: 0.5,\n },\n {\n label: \"75%\",\n value: 0.75,\n },\n {\n label: t(\"common.max\"),\n value: 1,\n },\n ];\n\n return (\n <Flex gap={2} width={\"100%\"}>\n {list.map((item, index) => {\n return (\n <Button\n key={index}\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n onClick={(e) => {\n e.stopPropagation();\n props.onClick(item.value);\n }}\n className=\"oui-w-1/5\"\n >\n {item.label}\n </Button>\n );\n })}\n </Flex>\n );\n};\n","import React from \"react\";\nimport { NumeralProps, Text } from \"@orderly.network/ui\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\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, useMemo } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { PositionType } from \"@orderly.network/types\";\nimport { cn, Flex, Text } from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\nimport { AddIcon, TPSLEditIcon } from \"./components\";\n\nexport const PartialTPSL: FC<{\n orderNum?: number;\n tpTriggerPrice?: number;\n slTriggerPrice?: number;\n direction?: \"column\" | \"row\";\n}> = (props) => {\n const {\n orderNum,\n tpTriggerPrice,\n slTriggerPrice,\n direction = \"column\",\n } = props;\n const { partialTPSLOrder: order, quoteDp, baseDp } = usePositionsRowContext();\n const symbolInfo = useSymbolsInfo();\n const { t } = useTranslation();\n\n const child = useMemo(() => {\n const children = [];\n\n if (!order?.symbol) return <AddIcon positionType={PositionType.PARTIAL} />;\n\n if (tpTriggerPrice) {\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={tpTriggerPrice}\n prefix={\n !slTriggerPrice || direction === \"column\" ? (\n <Text intensity={54}>{`${t(\"tpsl.tp\")} - `}</Text>\n ) : (\n \"\"\n )\n }\n />,\n );\n }\n if (slTriggerPrice) {\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 prefix={<Text intensity={54}>{`${t(\"tpsl.sl\")} - `}</Text>}\n >\n {slTriggerPrice}\n </Text.formatted>,\n );\n }\n if (children.length === 0)\n return <AddIcon positionType={PositionType.PARTIAL} />;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <Text key={\"split\"}>/</Text>);\n }\n\n return children;\n }, [tpTriggerPrice, slTriggerPrice, order?.symbol, t]);\n const hasTPSL = Array.isArray(child) ? !!child.length : !child;\n return (\n <Flex className=\"oui-gap-[6px]\">\n <div\n className={cn(\n \"oui-inline-flex oui-text-base-contrast-36\",\n direction === \"column\" ? \"oui-flex-col\" : \"oui-flex-row oui-gap-1\",\n )}\n >\n {child}\n </div>\n {hasTPSL && (\n <>\n <Text className=\"oui-text-base-contrast-54\">({orderNum})</Text>\n <TPSLEditIcon />\n </>\n )}\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { useSymbolsInfo, useAccountInfo } from \"@orderly.network/hooks\";\nimport { positions, account } from \"@orderly.network/perp\";\nimport { modal, ShareIcon } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { ShareButtonState } from \"./shareButton.script\";\n\nexport const ShareButton: FC<ShareButtonState> = (props) => {\n if (props.sharePnLConfig == null) return <></>;\n\n const { position } = props;\n const symbolsInfo = useSymbolsInfo();\n const { data: accountInfo } = useAccountInfo();\n\n const showModal = () => {\n const entity = props.isPositionHistory\n ? (() => {\n // Calculate ROI for position history\n const netPnL = position.netPnL || 0;\n const openPrice = Math.abs(position.avg_open_price);\n const quantity = Math.abs(position.closed_position_qty);\n\n let roi = undefined;\n\n if (\n netPnL !== 0 &&\n quantity !== 0 &&\n openPrice !== 0 &&\n accountInfo &&\n typeof props.leverage === \"number\"\n ) {\n // Calculate IMR for ROI calculation\n const symbolInfo = symbolsInfo[position.symbol];\n const baseIMR = symbolInfo(\"base_imr\");\n const IMR_Factor = accountInfo.imr_factor[position.symbol] || 1;\n\n if (baseIMR) {\n const notional = positions.notional(quantity, openPrice);\n const imr = account.IMR({\n maxLeverage: accountInfo.max_leverage,\n baseIMR: baseIMR,\n IMR_Factor: IMR_Factor,\n positionNotional: notional,\n ordersNotional: 0,\n IMR_factor_power: 4 / 5,\n });\n\n const roiValue = positions.unrealizedPnLROI({\n positionQty: quantity,\n openPrice: openPrice,\n IMR: imr,\n unrealizedPnL: netPnL,\n });\n\n roi = new Decimal(roiValue * 100).toFixed(2, Decimal.ROUND_DOWN);\n }\n }\n\n return {\n side: position.side,\n pnl: netPnL,\n roi: roi,\n openPrice: openPrice,\n closePrice: Math.abs(position.avg_close_price),\n openTime: position.open_timestamp,\n closeTime: position.close_timestamp,\n quantity: position.closed_position_qty,\n };\n })()\n : {\n side: position.position_qty > 0 ? \"LONG\" : \"SHORT\",\n pnl: position.unrealized_pnl,\n roi: new Decimal(position.unrealized_pnl_ROI * 100).toFixed(\n 2,\n Decimal.ROUND_DOWN,\n ),\n openPrice: Math.abs(position.average_open_price),\n markPrice: position.mark_price,\n openTime: position.timestamp,\n quantity: position.position_qty,\n };\n\n modal.show(props.modalId, {\n pnl: {\n entity: {\n symbol: position.symbol,\n ...entity,\n },\n refCode: props.refCode,\n ...props.sharePnLConfig,\n },\n });\n };\n return (\n <button\n type=\"button\"\n onClick={(e: any) => {\n e.stopPropagation();\n showModal();\n }}\n >\n <ShareIcon color=\"white\" opacity={0.54} size={props.iconSize ?? 16} />\n </button>\n );\n};\n","import { useMemo } from \"react\";\nimport { useReferralInfo, useSymbolLeverage } from \"@orderly.network/hooks\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport type UseShareButtonScriptOptions = {\n position: any;\n sharePnLConfig?: SharePnLConfig;\n modalId: string;\n iconSize?: number;\n isPositionHistory?: boolean;\n};\n\nexport const useShareButtonScript = (props: UseShareButtonScriptOptions) => {\n const { sharePnLConfig, position, modalId, iconSize, isPositionHistory } =\n props;\n const { getFirstRefCode } = useReferralInfo();\n const refCode = useMemo(() => {\n return getFirstRefCode()?.code;\n }, [getFirstRefCode]);\n const leverage = useSymbolLeverage(props.position.symbol);\n return {\n iconSize,\n position,\n refCode,\n leverage,\n sharePnLConfig,\n modalId,\n isPositionHistory,\n };\n};\n\nexport type ShareButtonState = ReturnType<typeof useShareButtonScript>;\n","import {\n useShareButtonScript,\n UseShareButtonScriptOptions,\n} from \"./shareButton.script\";\nimport { ShareButton } from \"./shareButton.ui\";\n\nexport type ShareButtonWidgetProps = UseShareButtonScriptOptions;\n\nexport const ShareButtonWidget = (props: ShareButtonWidgetProps) => {\n const state = useShareButtonScript(props);\n return <ShareButton {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { useSymbolsInfo, utils } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n AlgoOrderType,\n API,\n OrderSide,\n PositionType,\n} from \"@orderly.network/types\";\nimport { cn, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\nimport { TPSLEditIcon, AddIcon } from \"./components\";\n\nexport const TriggerPrice: FC<{\n stopLossPrice?: number;\n takeProfitPrice?: number;\n}> = (props) => {\n const { stopLossPrice, takeProfitPrice } = props;\n const { tpslOrder, position } = usePositionsRowContext();\n\n return (\n <TPSLTriggerPrice\n stopLossPrice={stopLossPrice}\n takeProfitPrice={takeProfitPrice}\n direction={\"column\"}\n order={tpslOrder}\n position={position}\n tooltip\n />\n );\n};\n\nexport const TriggerPriceItem: FC<{\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n symbolInfo: API.SymbolExt;\n}> = (props) => {\n const { qty, price, entryPrice, orderSide, orderType, symbolInfo } = props;\n const pnl = utils.priceToPnl(\n {\n qty,\n price,\n entryPrice,\n orderSide,\n orderType,\n },\n {\n symbol: symbolInfo,\n },\n );\n\n const type = orderType === AlgoOrderType.TAKE_PROFIT ? \"TP\" : \"SL\";\n\n return (\n <Flex>\n <Text intensity={54} className=\"oui-mr-1\">{`${type} PnL:`}</Text>\n <Text.formatted\n rule=\"price\"\n className={\n pnl === 0\n ? \"oui-text-base-contrast-36\"\n : pnl > 0\n ? \"oui-text-trade-profit oui-gap-0\"\n : \"oui-text-trade-loss oui-gap-0\"\n }\n prefix={<Text>{pnl === 0 ? \"\" : pnl > 0 ? \"+\" : \"-\"}</Text>}\n suffix={\n <Text intensity={36} className=\"oui-ml-1\">\n USDC\n </Text>\n }\n >{`${Math.abs(pnl)}`}</Text.formatted>\n </Flex>\n );\n};\n\nexport const TPSLTriggerPrice: FC<{\n takeProfitPrice: number | undefined;\n stopLossPrice: number | undefined;\n className?: string;\n direction?: \"row\" | \"column\";\n tooltip?: boolean;\n order?: API.AlgoOrder;\n position?: API.PositionTPSLExt;\n}> = (props) => {\n const { direction = \"row\", order, position } = props;\n // const symbolInfo = useSymbolsInfo()[position?.symbol ?? \"\"]();\n const symbolInfo = useSymbolsInfo();\n const { t } = useTranslation();\n const pnl = useMemo(() => {\n const msgs = [];\n\n if (!props.tooltip || !order || !position) return;\n\n let quantity = order.quantity;\n\n if (quantity === 0) {\n if (order.child_orders[0].type === \"CLOSE_POSITION\") {\n quantity = position.position_qty;\n }\n }\n\n if (!!props.takeProfitPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"tp\"}\n qty={quantity}\n price={props.takeProfitPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.TAKE_PROFIT}\n symbolInfo={symbolInfo[order.symbol]()}\n />,\n );\n }\n\n if (!!props.stopLossPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"sl\"}\n qty={quantity}\n price={props.stopLossPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.STOP_LOSS}\n symbolInfo={symbolInfo[order.symbol]()}\n />,\n );\n }\n\n return <div>{msgs}</div>;\n }, [\n props.takeProfitPrice,\n props.stopLossPrice,\n position?.average_open_price,\n order?.side,\n order?.quantity,\n order?.algo_type,\n ]);\n\n const child = useMemo(() => {\n const children = [];\n\n if (!order?.symbol) return <AddIcon positionType={PositionType.FULL} />;\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)\n return <AddIcon positionType={PositionType.FULL} />;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <Text key={\"split\"}>/</Text>);\n }\n\n return children;\n }, [props.takeProfitPrice, props.stopLossPrice, order?.symbol, t]);\n\n const content = (\n <div\n className={cn(\n \"oui-inline-flex oui-text-base-contrast-36\",\n props.direction === \"column\"\n ? \"oui-flex-col\"\n : \"oui-flex-row oui-gap-1\",\n props.className,\n )}\n >\n {child}\n </div>\n );\n\n const showIcon = Array.isArray(child) ? !!child.length : !child;\n\n if (props.tooltip) {\n return (\n <Flex gapX={2}>\n <Tooltip content={pnl}>{content}</Tooltip>\n {showIcon && <TPSLEditIcon />}\n </Flex>\n );\n }\n\n return content;\n};\n","import { FC } from \"react\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { Divider, Flex, Text } from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const UnrealizedPnLPopoverCard: FC<{}> = (props) => {\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\"\n );\n const { t } = useTranslation();\n return (\n <Flex\n direction={\"column\"}\n gap={3}\n className=\"oui-text-base-contrast-54 oui-items-start\"\n >\n <Text>{t(\"positions.column.unrealPnl.tooltip\")}</Text>\n <Divider className=\"oui-w-full\" />\n <div className=\"oui-mb-0\">\n {t(\"positions.column.unrealPnl.priceBasis\")}\n </div>\n <UnPnlPriceBasisCheckBox\n value={unPnlPriceBasis}\n onValueChange={setUnPnlPriceBasic}\n />\n </Flex>\n );\n};\n\nconst UnPnlPriceBasisCheckBox = (props: {\n value: string;\n onValueChange: (value: string) => void;\n}) => {\n const { value, onValueChange } = props;\n const { t } = useTranslation();\n\n // \"markPrice\" | \"lastPrice\"\n return (\n <Flex gap={2}>\n <RadioButton\n sel={value === \"markPrice\"}\n label={t(\"common.markPrice\")}\n value={\"markPrice\"}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === \"lastPrice\"}\n label={t(\"common.lastPrice\")}\n value={\"lastPrice\"}\n onCheckChange={onValueChange}\n />\n </Flex>\n );\n};\n\nconst RadioButton = (props: {\n sel: boolean;\n label: any;\n value: any;\n onCheckChange: (value: any) => void;\n}) => {\n const { sel, label, value, onCheckChange } = props;\n return (\n <Flex\n onClick={(e) => {\n onCheckChange(value);\n e.stopPropagation();\n }}\n gap={1}\n className=\"oui-cursor-pointer\"\n >\n {sel ? <SelIcon /> : <UnselIcon />}\n <Text size=\"xs\" intensity={sel ? 98 : 54}>\n {label}\n </Text>\n </Flex>\n );\n};\n\nconst SelIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-fill-white\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".36\"\n />\n <circle cx=\"8\" cy=\"8\" r=\"3.333\" />\n </svg>\n );\n};\n\nconst UnselIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".54\"\n />\n </svg>\n );\n};\n","import { FC } from \"react\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { cn, Divider, Flex, Grid } from \"@orderly.network/ui\";\nimport { ClosePositionWidget } from \"../../closePosition\";\nimport { TpSLBtnWidget } from \"../tpSLBtn\";\nimport {\n UnrealPnL,\n SymbolToken,\n Qty,\n Margin,\n Notional,\n AvgOpen,\n MarkPrice,\n LiqPrice,\n TPSLPrice,\n FundingFee,\n} from \"./items\";\nimport { PositionCellState } from \"./positionCell.script\";\n\nexport const PositionCell: FC<\n PositionCellState & {\n className?: string;\n }\n> = (props) => {\n const { className, ...rest } = props;\n\n const header = (\n <Flex justify={\"between\"} width={\"100%\"}>\n <SymbolToken {...props} />\n <UnrealPnL {...props} />\n </Flex>\n );\n\n const body = (\n <Grid cols={3} rows={2} gap={2} width={\"100%\"}>\n <Qty {...props} />\n <Margin {...props} />\n <Notional {...props} />\n <AvgOpen {...props} />\n <MarkPrice {...props} />\n <LiqPrice {...props} />\n </Grid>\n );\n\n const buttons = (\n <Grid width={\"100%\"} gap={2} cols={2} rows={1}>\n <ClosePositionWidget type={OrderType.LIMIT} />\n <ClosePositionWidget type={OrderType.MARKET} />\n </Grid>\n );\n\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n p={2}\n r=\"xl\"\n itemAlign={\"start\"}\n className={cn(className, \"oui-bg-base-9\")}\n >\n {header}\n <Divider intensity={6} className=\"oui-w-full\" />\n {body}\n <TPSLPrice {...rest} />\n <FundingFee {...rest} />\n {buttons}\n </Flex>\n );\n};\n","import { FC, useMemo, useRef } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, PositionType } from \"@orderly.network/types\";\nimport {\n Badge,\n cn,\n EditIcon,\n Flex,\n Grid,\n Statistic,\n Text,\n} from \"@orderly.network/ui\";\nimport { SharePnLBottomSheetId } from \"@orderly.network/ui-share\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FundingFeeButton } from \"../../../fundingFeeHistory/fundingFeeButton\";\nimport { LeverageBadge } from \"../../desktop/components\";\nimport { AddIcon, TPSLEditIcon } from \"../../desktop/components\";\nimport { ShareButtonWidget } from \"../../desktop/shareButton\";\nimport { PositionCellState } from \"./positionCell.script\";\n\nexport const SymbolToken: FC<PositionCellState> = (props) => {\n const { item } = props;\n const isBuy = item.position_qty > 0;\n const { t } = useTranslation();\n return (\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"2xs\"\n suffix={\n <div className=\"oui-flex oui-items-center oui-gap-1\">\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? t(\"common.long\") : t(\"common.short\")}\n </Badge>\n <LeverageBadge symbol={item.symbol} />\n </div>\n }\n showIcon\n onClick={() => {\n props.onSymbolChange?.({ symbol: item.symbol } as API.Symbol);\n }}\n >\n {item.symbol}\n </Text.formatted>\n );\n};\n\nexport const UnrealPnL: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n return (\n <Flex gap={3}>\n <Flex direction={\"column\"} className=\"oui-text-2xs\" itemAlign={\"end\"}>\n <div>\n <Text intensity={36}>{t(\"common.unrealizedPnl\")}</Text>\n <Text intensity={20}>(USDC)</Text>\n </div>\n\n <Text.numeral\n size=\"xs\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"orderly-font-semibold\"\n suffix={\n <Text.numeral\n rule=\"percentages\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n prefix=\"(\"\n suffix=\")\"\n className={cn(\n \"oui-ml-1\",\n item.unrealized_pnl_ROI > 0\n ? \"oui-text-success-darken\"\n : \"oui-text-danger-darken\",\n )}\n >\n {item.unrealized_pnl_ROI}\n </Text.numeral>\n }\n >\n {item.unrealized_pnl}\n </Text.numeral>\n </Flex>\n <ShareButtonWidget\n position={item}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLBottomSheetId}\n iconSize={12}\n />\n </Flex>\n );\n};\n\nexport const Qty: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.qty\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring>\n {item.position_qty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Margin: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={\n <span>\n {t(\"positions.column.margin\")}\n <Text intensity={20}>(USDC)</Text>\n </span>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} intensity={80}>\n {item.mm}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Notional: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n align=\"end\"\n label={\n <span>\n {t(\"common.notional\")}\n <Text intensity={20}>(USDC)</Text>\n </span>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} intensity={80}>\n {item.notional}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.avgOpen\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} intensity={80}>\n {item.average_open_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MarkPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n return (\n <Statistic\n label={t(\"common.markPrice\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} intensity={80}>\n {item.mark_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const LiqPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n const liqPrice =\n item.est_liq_price && item.est_liq_price > 0 ? item.est_liq_price : \"-\";\n\n return (\n <Statistic\n label={t(\"positions.column.liqPrice\")}\n align=\"end\"\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} color=\"warning\">\n {liqPrice}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const TPSLPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const fullTPSL = useMemo(() => {\n if (\n item.full_tp_sl?.tp_trigger_price == null &&\n item.full_tp_sl?.sl_trigger_price == null\n )\n return <AddIcon positionType={PositionType.FULL} />;\n\n return (\n <Flex className=\"oui-gap-[2px]\">\n {item.full_tp_sl?.tp_trigger_price && (\n <Text.numeral color=\"buy\">\n {item.full_tp_sl.tp_trigger_price}\n </Text.numeral>\n )}\n {item.full_tp_sl?.sl_trigger_price && \"/\"}\n {item.full_tp_sl?.sl_trigger_price && (\n <Text.numeral color=\"sell\">\n {item.full_tp_sl.sl_trigger_price}\n </Text.numeral>\n )}\n <TPSLEditIcon />\n </Flex>\n );\n }, [item.full_tp_sl]);\n\n const partialTPSL = useMemo(() => {\n if (\n item.partial_tp_sl?.tp_trigger_price == null &&\n item.partial_tp_sl?.sl_trigger_price == null\n )\n return <AddIcon positionType={PositionType.PARTIAL} />;\n\n return (\n <Flex className=\"oui-gap-[2px]\" itemAlign={\"center\"}>\n {item.partial_tp_sl?.tp_trigger_price && (\n <Text.numeral color=\"buy\">\n {item.partial_tp_sl.tp_trigger_price}\n </Text.numeral>\n )}\n {item.partial_tp_sl?.sl_trigger_price && \"/\"}\n {item.partial_tp_sl?.sl_trigger_price && (\n <Text.numeral color=\"sell\">\n {item.partial_tp_sl.sl_trigger_price}\n </Text.numeral>\n )}\n <Text>{`(${item.partial_tp_sl?.order_num})`}</Text>\n <TPSLEditIcon />\n </Flex>\n );\n }, [item.partial_tp_sl]);\n\n return (\n <Grid cols={2} rows={1} gap={2} width={\"100%\"}>\n <Flex\n className=\"oui-text-2xs oui-text-base-contrast-36\"\n direction={\"column\"}\n itemAlign={\"start\"}\n >\n <Text>{t(\"common.fullTPSL\")}: </Text>\n {fullTPSL}\n </Flex>\n <Flex\n className=\"oui-text-2xs oui-text-base-contrast-36 oui-grid-cols-end\"\n direction={\"column\"}\n itemAlign={\"end\"}\n >\n <Text>{t(\"common.partialTPSL\")}: </Text>\n {partialTPSL}\n </Flex>\n </Grid>\n );\n};\n\nexport const FundingFee: FC<PositionCellState> = (props) => {\n const { t } = useTranslation();\n const fundingFeeEndTime = useRef(Date.now().toString());\n return (\n <Flex justify={\"end\"} className=\"oui-w-full oui-text-2xs\">\n <Text intensity={36}>{t(\"funding.fundingFee\")}: </Text>\n <FundingFeeButton\n fee={props.item.fundingFee!}\n symbol={props.item.symbol}\n start_t={props.item.timestamp.toString()}\n end_t={fundingFeeEndTime.current}\n />\n </Flex>\n );\n};\n","import { API } from \"@orderly.network/types\";\nimport { useSymbolContext } from \"../../../../provider/symbolContext\";\nimport { PositionsProps } from \"../../../../types/types\";\n\ntype PositionCellScriptProps = {\n item: API.PositionTPSLExt;\n index: number;\n} & PositionsProps;\n\nexport type PositionCellState = ReturnType<typeof usePositionCellScript>;\n\nexport const usePositionCellScript = (props: PositionCellScriptProps) => {\n const symbolInfo = useSymbolContext();\n return {\n ...props,\n ...symbolInfo,\n };\n};\n","import { FC } from \"react\";\nimport { usePositionCellScript } from \"./positionCell.script\";\nimport { PositionCell } from \"./positionCell.ui\";\nimport { API } from \"@orderly.network/types\";\nimport { PositionsProps } from \"../../../../types/types\";\n\nexport const PositionCellWidget: FC<\n {\n item: API.PositionTPSLExt;\n index: number;\n className?: string;\n shareIconSize?: number;\n } & PositionsProps\n> = (props) => {\n const state = usePositionCellScript(props);\n return <PositionCell {...state} className={props.className} />;\n};\n","import {\n createContext,\n FC,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useMemo,\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, OrderSide, OrderType } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { PositionsRowContext } from \"./positionsRowContext\";\nimport type { PositionsRowContextState } from \"./positionsRowContext\";\n\n// export 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// partialTPSLOrder?: API.AlgoOrder;\n// quoteDp?: number;\n// baseDp?: number;\n// baseTick?: number;\n// errors: any | undefined;\n// }\n\n// export const PositionsRowContext = createContext(\n// {} as PositionsRowContextState,\n// );\n\n// export 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, children, mutatePositions } = props;\n const { t } = useTranslation();\n const [quantity, setQuantity] = useState<string>(\n Math.abs(position.position_qty).toString(),\n );\n const [price, setPrice] = useState<string>(\"\");\n const [type, setType] = useState<OrderType>(OrderType.MARKET);\n\n useEffect(() => {\n setQuantity(Math.abs(position.position_qty).toString());\n }, [position.position_qty]);\n\n const symbol = position.symbol;\n const symbolsInfo = useSymbolsInfo();\n const symbolInfo = symbolsInfo?.[symbol];\n const quoteDp = symbolInfo(\"quote_dp\");\n const baseDp = symbolInfo(\"base_dp\");\n const baseTick = symbolInfo(\"base_tick\");\n\n const {\n side,\n closeOrderData,\n submit,\n isMutating: submitting,\n errors,\n calculate,\n } = usePositionClose({\n position,\n order: {\n type,\n quantity,\n price,\n },\n });\n\n const updateQuantity = useCallback(\n (value: string) => {\n const newValues = calculate(\n {},\n \"order_quantity\",\n value,\n position.mark_price,\n symbolInfo(),\n );\n setQuantity(newValues.order_quantity!);\n },\n [calculate, symbolsInfo, position.mark_price],\n );\n\n const updatePriceChange = useCallback(\n (value: string) => {\n const newValues = calculate(\n {},\n \"order_price\",\n value,\n position.mark_price,\n symbolInfo(),\n );\n setPrice(newValues.order_price!);\n },\n [calculate, symbolsInfo, position.mark_price],\n );\n\n const updateOrderType = useCallback(\n (type: OrderType) => {\n setType(type);\n // when type is Limit, set price to mark price\n // when type is Market, set price to empty string\n setPrice(type === OrderType.LIMIT ? position.mark_price?.toString() : \"\");\n },\n [position.mark_price],\n );\n\n const onSubmit = useCallback(async () => {\n if (Number(quantity) > symbolInfo(\"base_max\")) {\n toast.error(\n <div>\n {t(\"positions.limitClose.errors.exceed.title\")}\n <br />\n <div className=\"oui-break-normal\">\n {t(\"positions.limitClose.errors.exceed.description\", {\n quantity: quantity,\n symbol: transSymbolformString(symbol, \"base\"),\n maxQuantity: symbolInfo(\"base_max\"),\n })}\n </div>\n </div>,\n );\n return;\n }\n\n return submit()\n .then((res) => {\n if (res.success) {\n 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 const memoizedValue = useMemo<PositionsRowContextState>(() => {\n return {\n quantity,\n price,\n type,\n side,\n position,\n updatePriceChange,\n updateQuantity,\n updateOrderType,\n tpslOrder: (position as API.PositionTPSLExt).full_tp_sl?.algo_order,\n partialTPSLOrder: (position as API.PositionTPSLExt).partial_tp_sl\n ?.algo_order,\n onSubmit,\n submitting,\n closeOrderData,\n quoteDp,\n baseDp,\n baseTick,\n errors,\n };\n }, [\n quantity,\n price,\n type,\n side,\n position,\n updatePriceChange,\n updateQuantity,\n updateOrderType,\n onSubmit,\n submitting,\n closeOrderData,\n quoteDp,\n baseDp,\n baseTick,\n errors,\n ]);\n\n return (\n <PositionsRowContext.Provider value={memoizedValue}>\n {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 return (formatString ?? \"base-quote\")\n .replace(\"type\", type)\n .replace(\"base\", base)\n .replace(\"quote\", quote);\n}\n","import React from \"react\";\nimport type { PositionsProps } from \"../../types/types\";\nimport { useCombinePositionsScript } from \"./combinePositions.script\";\nimport { usePositionsScript } from \"./positions.script\";\nimport { MobilePositions, Positions, CombinePositions } from \"./positions.ui\";\n\nexport const PositionsWidget: React.FC<PositionsProps> = (props) => {\n const state = usePositionsScript(props);\n return <Positions {...state} />;\n};\n\nexport const MobilePositionsWidget: React.FC<PositionsProps> = (props) => {\n const state = usePositionsScript(props);\n return <MobilePositions {...state} />;\n};\n\nexport const CombinePositionsWidget: React.FC<PositionsProps> = (props) => {\n const state = useCombinePositionsScript(props);\n return <CombinePositions {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n} from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { SymbolProvider } from \"../../provider/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 \"../../../provider/symbolContext\";\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 { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\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, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { useLiquidationColumn } from \"./desktop/useLiquidationColumn\";\nimport { LiquidationState } from \"./liquidation.script\";\nimport { LiquidationCellWidget } from \"./mobile\";\n\nexport const Liquidation: FC<LiquidationState> = (props) => {\n const [expanded, setExpanded] = useState({});\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 // onRow={(record, index, row) => {\n // return {\n // className: \"[&>td:first-child]:oui-pl-0 [&>td:last-child]:oui-pr-0\",\n // };\n // }}\n expanded={expanded}\n onExpandedChange={setExpanded}\n getRowCanExpand={() => true}\n expandRowRender={(record) => {\n return <LiquidationDetails record={record.original} />;\n }}\n />\n </Flex>\n );\n};\n\nconst TooltipHeaderCell: FC<{\n tooltip: string;\n label: string;\n side?: \"left\";\n}> = (props) => {\n return (\n <th className=\"oui-h-10 oui-border-b oui-border-line oui-text-left oui-text-base-contrast-36\">\n <Tooltip\n content={props.tooltip}\n className=\"oui-w-[275px] oui-bg-base-6\"\n side={props.side}\n arrow={{\n className: \"oui-fill-base-6\",\n }}\n >\n <button className=\"oui-border-b oui-border-dashed oui-border-line-12\">\n {props.label}\n </button>\n </Tooltip>\n </th>\n );\n};\n\nconst LiquidationDetails: FC<{\n record: API.Liquidation;\n}> = (props) => {\n const { margin_ratio, account_mmr, collateral_value, position_notional } =\n props.record as any;\n\n const { t } = useTranslation();\n\n return (\n <div className=\"oui-w-full oui-bg-base-8 oui-px-6\">\n {/* <pre>{JSON.stringify(props.record, null, 2)}</pre> */}\n\n <table className=\"oui-w-full\">\n <thead>\n <tr>\n <TooltipHeaderCell\n tooltip={t(\"positions.Liquidation.expand.tooltip.mr\")}\n label={t(\"positions.Liquidation.expand.label.mr\")}\n side=\"left\"\n />\n <TooltipHeaderCell\n tooltip={t(\"positions.Liquidation.expand.tooltip.mmr\")}\n label={t(\"positions.Liquidation.expand.label.mmr\")}\n />\n <TooltipHeaderCell\n tooltip={t(\"positions.Liquidation.expand.tooltip.collateral\")}\n label={t(\"positions.Liquidation.expand.label.collateral\")}\n />\n <TooltipHeaderCell\n tooltip={t(\"positions.Liquidation.expand.tooltip.notional\")}\n label={t(\"positions.Liquidation.expand.label.notional\")}\n />\n </tr>\n </thead>\n <tbody>\n <tr>\n <td className=\"oui-h-10\">\n <Text.numeral rule=\"percentages\">{margin_ratio}</Text.numeral>\n </td>\n <td className=\"oui-h-10\">\n <Text.numeral rule=\"percentages\">{account_mmr}</Text.numeral>\n </td>\n <td className=\"oui-h-10\">{commifyOptional(collateral_value)}</td>\n <td className=\"oui-h-10\">{commifyOptional(position_notional)}</td>\n </tr>\n </tbody>\n </table>\n </div>\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 { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Column, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { commifyOptional } from \"@orderly.network/utils\";\n\nconst TooltipButton: FC<{\n tooltip: string;\n label: string;\n}> = (props) => {\n return (\n <Tooltip\n className=\"oui-w-[275px] oui-bg-base-6\"\n content={props.tooltip}\n arrow={{\n className: \"oui-fill-base-6\",\n }}\n >\n <button className=\"oui-border-b oui-border-dashed oui-border-line-12\">\n {props.label}\n </button>\n </Tooltip>\n );\n};\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 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: 120,\n render: (value) => <Text>{value}</Text>,\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\n rule={\"symbol\"}\n formatString=\"base-quote\"\n key={item.symbol}\n >\n {item.symbol}\n </Text.formatted>\n ))}\n </Flex>\n ),\n },\n // Price (USDC)\n {\n title: t(\"positions.Liquidation.column.markPrice\"),\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\n value={item.mark_price}\n type=\"quote\"\n key={item.symbol}\n />\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\n value={item.position_qty}\n type=\"base\"\n key={item.symbol}\n />\n ))}\n </Flex>\n );\n },\n },\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 // Liquidation fee rate\n // TODO: use i18\n {\n title: (\n <TooltipButton\n tooltip={t(\"positions.Liquidation.col.tooltip.feeRate\")}\n label={t(\"positions.Liquidation.column.liquidationFeeRate\")}\n />\n ),\n dataIndex: \"liquidationFeeRate\",\n // width: 202,\n render: (value) => {\n return <Text.numeral rule=\"percentages\">{value}</Text.numeral>;\n // return <Text>{commifyOptional(value)}</Text>;\n },\n },\n\n // Liquidation Fee\n {\n title: (\n <TooltipButton\n tooltip={t(\"positions.Liquidation.col.tooltip.fee\")}\n label={t(\"positions.Liquidation.column.liquidationFee\")}\n />\n ),\n dataIndex: \"abs_liquidation_fee\",\n width: 100,\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 key={item.symbol}\n value={item.abs_liquidation_fee}\n type=\"quote\"\n />\n ))}\n </Flex>\n );\n },\n },\n {\n title: \"\",\n dataIndex: \"actions\",\n align: \"right\",\n width: 40,\n render: (_: any, record: API.Liquidation, index, ctx) => {\n const isExpanded = ctx.row.getIsExpanded();\n\n return (\n <button\n className=\"oui-p-2\"\n onClick={() => {\n ctx.row.getToggleExpandedHandler()();\n }}\n >\n <ArrowIcon className={isExpanded ? \"oui-rotate-180\" : \"\"} />\n </button>\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 return <Text>{commifyOptional(props.value)}</Text>;\n};\n\nconst ArrowIcon: FC<{\n className?: string;\n onClick?: () => void;\n}> = (props) => {\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 className={props.className}\n >\n <path\n d=\"M3.884 6.02a.67.67 0 0 0-.436.27.68.68 0 0 0 .187.933L7.63 9.88a.68.68 0 0 0 .749 0l3.994-2.657a.68.68 0 0 0 .187-.934.68.68 0 0 0-.936-.186L8.003 8.51l-3.62-2.407a.65.65 0 0 0-.499-.084\"\n fill=\"#fff\"\n fillOpacity=\".54\"\n />\n </svg>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Flex, Text, Divider, Badge } from \"@orderly.network/ui\";\nimport { commifyOptional, Decimal } from \"@orderly.network/utils\";\nimport { LiquidationCellState } from \"./liquidationCell.script\";\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={cn(\n \"oui-rounded-xl oui-bg-base-9 oui-p-2\",\n props.classNames?.root,\n )}\n >\n <Header {...props} />\n <Divider />\n <Body {...props} />\n </Flex>\n );\n};\n\nexport const Header: FC<LiquidationCellState> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex width={\"100%\"} justify={\"between\"} itemAlign={\"start\"}>\n <Flex direction={\"column\"} itemAlign={\"start\"} gap={1}>\n <Flex gap={2} itemAlign={\"center\"}>\n <Flex direction={\"column\"} gap={1} itemAlign={\"start\"}>\n <Text.formatted\n rule={\"symbol\"}\n formatString=\"base-quote\"\n size=\"xs\"\n intensity={80}\n >\n {props.item.positions_by_perp?.[0]?.symbol || \"\"}\n </Text.formatted>\n {/* <Badge size=\"sm\" color=\"neutral\">\n Cross 10X\n </Badge> */}\n </Flex>\n </Flex>\n </Flex>\n <Flex direction={\"column\"} itemAlign={\"end\"}>\n <Text size=\"2xs\" intensity={36}>\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {props.item.timestamp}\n </Text.formatted>\n </Text>\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"positions.Liquidation.column.liquidationId\")}: `}\n <Text as=\"span\" intensity={80}>\n {props.item.liquidation_id}\n </Text>\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<LiquidationCellState> = (props) => {\n const position = props.item.positions_by_perp?.[0];\n const { t } = useTranslation();\n const mr = useMemo(() => {\n if (isNaN(props.item?.margin_ratio)) return \"--\";\n return `${new Decimal(props.item.margin_ratio).mul(100).todp(2, Decimal.ROUND_DOWN).toNumber()}%`;\n }, [props.item?.margin_ratio]);\n\n if (!position) return null;\n\n return (\n <Flex direction={\"column\"} width={\"100%\"} gap={1}>\n {/* First row */}\n <Flex gap={2} width={\"100%\"}>\n <DataItem\n label={t(\"positions.Liquidation.column.markPrice\")}\n value={commifyOptional(position.transfer_price)}\n className=\"oui-flex-1\"\n />\n <DataItem\n label={t(\"common.quantity\")}\n value={commifyOptional(position.position_qty)}\n className=\"oui-flex-1\"\n />\n <DataItem\n label={t(\"positions.Liquidation.column.liquidationFeeRate\")}\n value={props.item.liquidationFeeRate}\n className=\"oui-flex-1\"\n align=\"end\"\n />\n </Flex>\n\n {/* Second row */}\n <Flex gap={2} width={\"100%\"}>\n <DataItem\n label={t(\"positions.Liquidation.column.liquidationFee\")}\n value={commifyOptional(position.abs_liquidation_fee)}\n className=\"oui-flex-1\"\n />\n <DataItem\n label={t(\"positions.Liquidation.expand.label.mr\")}\n value={mr}\n className=\"oui-flex-1\"\n />\n <DataItem\n label={t(\"positions.Liquidation.expand.label.mmr\")}\n value={\n props.item.formatted_account_mmr\n ? `${props.item.formatted_account_mmr}%`\n : \"--\"\n }\n className=\"oui-flex-1\"\n align=\"end\"\n />\n </Flex>\n\n {/* Third row */}\n <Flex gap={2} width={\"100%\"}>\n <DataItem\n label={t(\"positions.Liquidation.expand.label.collateral\")}\n value={commifyOptional(props.item.collateral_value)}\n className=\"oui-flex-1\"\n />\n <DataItem\n label={t(\"positions.Liquidation.expand.label.notional\")}\n value={commifyOptional(props.item.position_notional)}\n className=\"oui-flex-1\"\n />\n <div className=\"oui-flex-1 oui-opacity-0\" /> {/* Empty placeholder */}\n </Flex>\n </Flex>\n );\n};\n\nconst DataItem: FC<{\n label: string;\n value: string | number;\n className?: string;\n align?: \"start\" | \"end\";\n}> = ({ label, value, className, align = \"start\" }) => {\n return (\n <Flex direction={\"column\"} itemAlign={align} className={className}>\n <Text size=\"2xs\" intensity={36}>\n {label}\n </Text>\n <Text size=\"xs\" intensity={80}>\n {value}\n </Text>\n </Flex>\n );\n};\n","import { API } from \"@orderly.network/types\";\n\nexport const useLiquidationCellScript = (props: {\n item: API.Liquidation & {\n formatted_account_mmr: string;\n liquidationFeeRate: number;\n };\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\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 { useEffect, useMemo, useState } from \"react\";\nimport { differenceInDays, subDays } from \"date-fns\";\nimport {\n usePrivateInfiniteQuery,\n usePrivateQuery,\n} from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { API } from \"@orderly.network/types\";\nimport { usePagination, useScreen } from \"@orderly.network/ui\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport {\n areDatesEqual,\n formatDatePickerRange,\n offsetEndOfDay,\n offsetStartOfDay,\n} from \"../../utils\";\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(generateKeyFun(props), {\n initialSize: 1,\n formatter: (data) => data,\n revalidateOnFocus: true,\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\n ?.map((item) =>\n // @ts-ignore\n item.rows?.map((item) => {\n let liquidationFeeRate = null;\n const firstPosition = item.positions_by_perp[0];\n\n if (firstPosition) {\n liquidationFeeRate = new Decimal(firstPosition.liquidator_fee)\n .add(firstPosition.insurance_fund_fee)\n .toNumber();\n }\n\n return {\n ...item,\n formatted_account_mmr: isNaN(item.account_mmr)\n ? null\n : new Decimal(item.account_mmr).mul(100).toFixed(2).toString(),\n liquidationFeeRate,\n };\n }),\n )\n ?.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 = (\n 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"]}
|