@orderly.network/ui-positions 2.0.6 → 2.0.7-alpha.0
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 +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +10 -10
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/positions/desktop/closeButton.tsx","../src/components/positions/desktop/positionRowContext.tsx","../src/providers/symbolProvider.tsx","../src/components/positions/positions.ui.tsx","../src/components/positions/desktop/useColumn.tsx","../src/components/positions/desktop/listElement.tsx","../src/components/positions/desktop/priceInput.tsx","../src/components/positions/desktop/quantityInput.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/components.tsx","../src/components/positions/desktop/unrealPnLHover.tsx","../src/components/positions/desktop/numeralWithCtx.tsx","../src/components/positions/mobile/positionCell/positionCell.ui.tsx","../src/components/positions/mobile/positionCell/items.tsx","../src/components/positions/mobile/limitCloseBtn/limitCloseBtn.ui.tsx","../src/components/positions/mobile/limitCloseBtn/limitCloseBtn.script.tsx","../src/components/positions/mobile/limitCloseBtn/limitCloseBtn.widget.tsx","../src/components/positions/mobile/marketCloseBtn/marketCloseBtn.ui.tsx","../src/components/positions/mobile/marketCloseBtn/marketCloseBtn.script.tsx","../src/components/positions/mobile/marketCloseBtn/marketCloseBtn.widget.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.ui.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.script.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.widget.tsx","../src/components/positions/mobile/positionCell/positionCell.script.tsx","../src/components/positions/mobile/positionCell/positionCell.widget.tsx","../src/components/positions/usePositionsBuilder.script.ts","../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","Button","toast","Text","CloseIcon","Flex","Divider","Badge","SimpleDialog","ThrottledButton","OrderSide","OrderType","createContext","useContext","useEffect","useMemo","useState","useOrderEntry_deprecated","useSymbolsInfo","jsx","PositionsRowContext","usePositionsRowContext","PositionsRowProvider","props","quantity","setQuantity","price","setPrice","side","errors","setErrors","type","setType","config","symbol","curSymbolInfo","quoteDp","baseDp","baseTick","helper","onSubmit","submitting","updateOrderType","closeOrderData","position","data","onUpdateQuantity","value","newValues","onUpdatePrice","order","postOrder","error","commify","commifyOptional","Decimal","SymbolContext","useSymbolContext","SymbolProvider","symbolInfo","useLocalStorage","Fragment","jsxs","CloseButton","open","setOpen","base","quote","orderConfirm","onConfirm","res","onClose","disabled","e","quantityMsg","priceMsg","MarketCloseConfirm","LimitConfirmDialog","ConfirmHeader","hideCloseIcon","ConfirmFooter","onCancel","OrderDetail","total","ListView","Box","cn","HoverCard","Tooltip","CaretDownIcon","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuRoot","DropdownMenuTrigger","Input","inputFormatter","PriceInput","updatePriceChange","hasFocus","setHasFocus","vent","PopoverRoot","PopoverContent","PopoverTrigger","Slider","utils","QuantityInput","sliderValue","setSliderValue","handleClick","event","resetQuantity","percent","onBlur","formatQty","values","Buttons","item","index","renderQuantity","record","renderQuantityInput","renderPriceInput","SharePnLDialogId","modal","ShareIcon","ShareButton","showModal","entity","useReferralInfo","useSymbolLeverage","useShareButtonScript","sharePnLConfig","modalId","iconSize","isPositionHistory","getFirstRefCode","refCode","leverage","ShareButtonWidget","state","AlgoOrderType","PositionTPSLPopover","EditIcon","TPSLButton","tpslOrder","TPSLEditIcon","TriggerPrice","stopLossPrice","takeProfitPrice","TPSLTriggerPrice","TriggerPriceItem","qty","entryPrice","orderSide","orderType","pnl","direction","msgs","child","children","content","showIcon","UnrealizedPnLPopoverCard","unPnlPriceBasis","setUnPnlPriceBasic","UnPnlPriceBasisCheckBox","onValueChange","RadioButton","sel","label","onCheckChange","SelIcon","UnselIcon","NumeralWithCtx","tick","rest","useColumn","pnlNotionalDecimalPrecision","r1","r2","a","b","_","Grid","Statistic","SharePnLBottomSheetId","SymbolToken","isBuy","UnrealPnL","Qty","Margin","Notional","AvgOpen","MarkPrice","LiqPrice","liqPrice","TPSLPrice","SimpleSheet","LimitCloseBtn","sheetOpen","setSheetOpen","dialogOpen","setDialogOpen","quote_dp","onCloseDialog","slider","useMarkPricesStream","useRef","useLimitCloseBtnScript","updateQuantity","prices","curMarkPrice","base_dp","LimitCloseBtnWidget","MarketCloseBtn","useMarketCloseBtnScript","MarketCloseBtnWidget","TpSLBtn","PositionTPSLSheet","useTpSLBtnScript","TpSLBtnWidget","PositionCell","className","Header","Body","usePositionCellScript","PositionCellWidget","AuthGuardDataTable","Positions","pagination","column","MobilePositions","usePositionStream","useDataTap","usePagination","usePositionsBuilder","calcMode","includedPendingOrder","onSymbolChange","setPage","info","isLoading","PositionsWidget","MobilePositionsWidget","DataFilter","capitalizeFirstLetter","usePositionHistoryColumn","SymbolInfo","Quantity","NetPnL","avgOpen","avgClose","tags","list","netPnl","text","useAccount","usePrivateQuery","AccountStatusEnum","useScreen","differenceInDays","subDays","setHours","offsetStartOfDay","date","newDate","offsetEndOfDay","formatDatePickerRange","option","areDatesEqual","date1","date2","usePositionHistoryScript","netPnL","status","dateRange","filterDays","updateFilterDays","filterItems","onFilter","useFilter","filterData","sideFilter","statusFilter","time","dateFilter","symbolFilter","setStatus","setSide","defaultRange","setFilterDays","setDateRange","days","filter","newDateRange","diffDays","isMobile","dateRangeFilter","PositionHistoryType","showAlert","ClosedQty","closedQty","MaxClosedQty","maxClosedQty","AvgClosed","OpenTime","ClosedTime","PositionHistoryCell","usePositionHistoryCellScript","PositionHistoryCellWidget","PositionHistory","MobilePositionHistory","PositionHistoryWidget","MobilePositionHistoryWidget","classNames","useLiquidationColumn","FormattedText","abs_liquidation_fee","Price","LiquidationFee","LiquidationCell","Cell","useLiquidationCellScript","LiquidationCellWidget","Liquidation","MobileLiquidation","usePrivateInfiniteQuery","useLiquidationScript","enableLoadMore","page","pageSize","parsePagination","meta","loadMore","useLiquidation","ordersResponse","generateKeyFun","args","pageIndex","previousPageData","size","end_t","start_t","search","LiquidationWidget","MobileLiquidationWidget","MarketCloseConfirmID"],"mappings":"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","sourcesContent":["import { registerSimpleDialog } from \"@orderly.network/ui\";\nimport { MarketCloseConfirm } from \"./components/positions/desktop/closeButton\";\n\nexport {\n PositionsWidget,\n MobilePositionsWidget,\n} from \"./components/positions/positions.widget\";\n\nexport type { PositionsProps } from \"./types/types\";\n\nexport const MarketCloseConfirmID = \"MarketCloseConfirmID\";\nregisterSimpleDialog(MarketCloseConfirmID, MarketCloseConfirm, {\n size: \"md\",\n closable: false,\n});\n\n\nexport * from \"./components/positionHistory\";\nexport * from \"./components/liquidation\";","import {\n Button,\n Popover,\n toast,\n Text,\n CloseIcon,\n Flex,\n Box,\n Divider,\n cn,\n NumeralProps,\n Badge,\n SimpleDialog,\n ThrottledButton,\n} from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\n// import { useSymbolContext } from \"../providers/symbolProvider\";\nimport { FC, useMemo, useState } from \"react\";\nimport { OrderEntity, OrderSide, OrderType } from \"@orderly.network/types\";\nimport { commify, commifyOptional, Decimal } from \"@orderly.network/utils\";\nimport { TokenIcon } from \"@orderly.network/ui\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\n\nexport const CloseButton = () => {\n const [open, setOpen] = useState(false);\n const {\n onSubmit,\n price,\n quantity,\n closeOrderData,\n type,\n submitting,\n quoteDp,\n errors,\n } = usePositionsRowContext();\n\n const { base, quote } = useSymbolContext();\n\n const [orderConfirm ] = useLocalStorage(\"orderly_order_confirm\", true);\n \n const onConfirm = () => {\n return onSubmit().then(\n (res) => {\n setOpen(false);\n },\n (error: any) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n }\n ).catch((error) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n });\n };\n\n const onClose = () => {\n setOpen(false);\n };\n\n const disabled = useMemo(() => {\n if (type === OrderType.MARKET) {\n if (!quantity) {\n return true;\n }\n return false;\n }\n\n return !price || !quantity;\n }, [price, quantity, type]);\n\n return (\n <>\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"secondary\"\n disabled={disabled || submitting}\n loading={submitting}\n onClick={(e) => {\n e.stopPropagation();\n const quantityMsg = errors?.order_quantity?.message;\n const priceMsg = errors?.order_price?.message;\n if (quantityMsg || priceMsg) {\n toast.error(quantityMsg ?? priceMsg);\n return;\n }\n if (!orderConfirm) {\n onSubmit();\n return;\n }\n setOpen(true);\n }}\n >\n Close\n </Button>\n <SimpleDialog open={open} onOpenChange={setOpen} size=\"sm\">\n {type === OrderType.MARKET ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n onClose={onClose}\n onConfirm={onConfirm}\n submitting={submitting}\n classNames={{\n root: \"oui-items-start\",\n }}\n hideCloseIcon\n />\n ) : (\n <LimitConfirmDialog\n base={base}\n quantity={quantity}\n price={price}\n onClose={onClose}\n onConfirm={onConfirm}\n submitting={submitting}\n quoteDp={quoteDp}\n order={closeOrderData}\n hideCloseIcon\n />\n )}\n </SimpleDialog>\n </>\n );\n};\n\nexport const ConfirmHeader: FC<{\n onClose?: () => void;\n title: string;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { hideCloseIcon = false } = props;\n return (\n <div className=\"oui-pb-3 oui-border-b oui-border-line-4 oui-relative oui-w-full\">\n <Text size={\"base\"}>{props.title}</Text>\n {!hideCloseIcon && (\n <button\n onClick={props.onClose}\n className=\"oui-absolute oui-right-0 oui-top-0 oui-text-base-contrast-54 hover:oui-text-base-contrast-80 oui-p-2\"\n >\n <CloseIcon size={18} color=\"white\" />\n </button>\n )}\n </div>\n );\n};\n\nexport const ConfirmFooter: FC<{\n onConfirm?: () => Promise<any>;\n onCancel?: () => void;\n submitting?: boolean;\n}> = ({ onCancel, onConfirm, submitting }) => {\n return (\n <Flex\n id=\"oui-positions-confirm-footer\"\n gap={2}\n width={\"100%\"}\n className=\"oui-mt-3 oui-pb-1\"\n >\n <Button\n id=\"oui-positions-confirm-footer-cancel-button\"\n color={\"secondary\"}\n fullWidth\n onClick={onCancel}\n size=\"md\"\n >\n Cancel\n </Button>\n <ThrottledButton\n id=\"oui-positions-confirm-footer-confirm-button\"\n onClick={onConfirm}\n fullWidth\n loading={submitting}\n size=\"md\"\n >\n 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\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>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>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>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 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=\"Market Close\"\n hideCloseIcon={props.hideCloseIcon}\n />\n <Text intensity={54} size=\"sm\" className=\"oui-my-5\">\n {`You agree closing ${commifyOptional(props.quantity)} ${\n props.base\n } position at market price.`}\n </Text>\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={async () => {\n await props.onConfirm?.();\n onCancel();\n }}\n submitting={props.submitting}\n />\n </Flex>\n );\n};\n\nexport const LimitConfirmDialog: FC<{\n base: string;\n quantity: string;\n price: string;\n onClose?: () => void;\n onConfirm: () => Promise<any>;\n order: OrderEntity;\n submitting: boolean;\n quoteDp?: number;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { order, quoteDp, quantity, price, submitting } = props;\n\n const { side } = order;\n const onCancel = () => {\n props.onClose?.();\n };\n return (\n <>\n <ConfirmHeader\n onClose={onCancel}\n title=\"Limit Close\"\n hideCloseIcon={props.hideCloseIcon}\n />\n <Text intensity={54} size=\"sm\" className=\"oui-mt-5\">\n {`You agree closing ${commify(props.quantity)} ${\n props.base\n } position at limit price.`}\n </Text>\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 Limit\n </Badge>\n <Badge\n color={side === OrderSide.BUY ? \"success\" : \"danger\"}\n size=\"xs\"\n >\n {side === OrderSide.BUY ? \"Buy\" : \"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 { API, OrderEntity, OrderSide, OrderType } from \"@orderly.network/types\";\nimport {\n FC,\n PropsWithChildren,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\n\nimport {\n useOrderEntry_deprecated,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { toast } from \"@orderly.network/ui\";\n\nexport interface PositionsRowContextState {\n quantity: string;\n price: string;\n type: OrderType;\n side: OrderSide;\n position: API.PositionExt | API.PositionTPSLExt;\n updateQuantity: (value: string) => void;\n updatePriceChange: (value: string) => void;\n\n updateOrderType: (value: OrderType, price?: string) => void;\n\n closeOrderData: any;\n\n onSubmit: () => Promise<any>;\n submitting: boolean;\n tpslOrder?: API.AlgoOrder;\n quoteDp?: number;\n baseDp?: number;\n baseTick?: number;\n errors: any | undefined;\n}\n\nexport const PositionsRowContext = createContext(\n {} as PositionsRowContextState\n);\n\nexport const usePositionsRowContext = () => {\n return useContext(PositionsRowContext);\n};\n\nexport const PositionsRowProvider: FC<\n PropsWithChildren<{ position: API.PositionExt | API.PositionTPSLExt }>\n> = (props) => {\n const [quantity, setQuantity] = useState<string>(\n Math.abs(props.position.position_qty).toString()\n );\n\n useEffect(() => {\n setQuantity(Math.abs(props.position.position_qty).toString());\n }, [props.position.position_qty]);\n\n const [price, setPrice] = useState<string>(\"\");\n // const [side, setSide] = useState<OrderSide>(\n // props.position.position_qty > 0 ? OrderSide.SELL : OrderSide.BUY\n // );\n\n const side = props.position.position_qty > 0 ? OrderSide.SELL : OrderSide.BUY;\n\n const [errors, setErrors] = useState<any | undefined>(undefined);\n\n const [type, setType] = useState<OrderType>(OrderType.MARKET);\n\n const config = useSymbolsInfo();\n const symbol = props.position.symbol;\n const curSymbolInfo = config?.[symbol];\n const quoteDp = curSymbolInfo(\"quote_dp\");\n const baseDp = curSymbolInfo(\"base_dp\");\n const baseTick = curSymbolInfo(\"base_tick\");\n\n const { helper, onSubmit, submitting } = useOrderEntry_deprecated(\n props.position?.symbol!,\n side,\n true\n );\n\n const updateOrderType = (type: OrderType, price?: string) => {\n setType(type);\n if (type === OrderType.LIMIT) {\n if (!price) {\n throw new Error(\"price is required\");\n }\n setPrice(price);\n } else {\n setPrice(\"\");\n }\n };\n\n const closeOrderData = useMemo(() => {\n const { position } = props;\n\n if (!position) return null;\n\n const data: any = {\n // order_price: undefined,\n order_quantity: quantity,\n symbol: props.position.symbol,\n order_type: type,\n side,\n reduce_only: true,\n };\n\n if (type === OrderType.LIMIT) {\n data.order_price = price;\n }\n\n return data;\n }, [props.position, price, type, quantity]);\n\n const onUpdateQuantity = (value: string) => {\n const newValues = helper.calculate(\n {},\n \"order_quantity\",\n value\n ) as OrderEntity;\n setQuantity(newValues[\"order_quantity\"] as string);\n };\n\n const onUpdatePrice = (value: string) => {\n const newValues = helper.calculate({}, \"order_price\", value) as OrderEntity;\n setPrice(newValues[\"order_price\"] as string);\n };\n\n useEffect(() => {\n let order = closeOrderData;\n helper.validator(order).then((value: any) => {\n setErrors(value);\n });\n }, [closeOrderData]);\n\n const postOrder = () => {\n return onSubmit(closeOrderData).catch((error) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n return Promise.resolve();\n });\n };\n\n return (\n <PositionsRowContext.Provider\n value={{\n quantity,\n price,\n type,\n side,\n position: props.position,\n updatePriceChange: onUpdatePrice,\n updateQuantity: onUpdateQuantity,\n updateOrderType,\n tpslOrder: (props.position as unknown as API.PositionTPSLExt)\n .algo_order,\n onSubmit: postOrder,\n submitting,\n closeOrderData,\n quoteDp,\n baseDp,\n baseTick,\n errors,\n }}\n >\n {props.children}\n </PositionsRowContext.Provider>\n );\n};\n","import { FC, PropsWithChildren, createContext, useContext } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\n\nexport interface SymbolContextState {\n base_dp: number;\n quote_dp: number;\n base_tick: number;\n quote_tick: number;\n base: string;\n quote: string;\n symbol: string;\n origin: API.SymbolExt;\n quote_min: number;\n quote_max: number;\n}\n\nexport const SymbolContext = createContext({} as SymbolContextState);\n\nexport const useSymbolContext = () => {\n return useContext(SymbolContext);\n};\n\ninterface FormatterProviderProps {\n symbol: string;\n}\n\nexport const SymbolProvider: FC<PropsWithChildren<FormatterProviderProps>> = (\n props\n) => {\n const symbolInfo = useSymbolsInfo()[props.symbol];\n\n return (\n <SymbolContext.Provider\n value={{\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n base_tick: symbolInfo(\"base_tick\"),\n quote_tick: symbolInfo(\"quote_tick\"),\n base: symbolInfo(\"base\"),\n quote: symbolInfo(\"quote\"),\n symbol: props.symbol,\n origin: symbolInfo(),\n quote_max: symbolInfo(\"quote_max\"),\n quote_min: symbolInfo(\"quote_min\")\n }}\n >\n {props.children}\n </SymbolContext.Provider>\n );\n};\n","import { ListView } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\nimport { PositionsBuilderState } from \"./usePositionsBuilder.script\";\nimport { SymbolProvider } from \"../../providers/symbolProvider\";\nimport { PositionsProps } from \"../../types/types\";\nimport { useColumn } from \"./desktop/useColumn\";\nimport { PositionsRowProvider } from \"./desktop/positionRowContext\";\nimport { PositionCellWidget } from \"./mobile/positionCell\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\n\nexport const Positions = (props: PositionsBuilderState) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig, pagination } = props;\n const column = useColumn({\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange: props.onSymbolChange,\n });\n\n // console.log(\"xxxx positions\", props);\n\n return (\n <AuthGuardDataTable<API.PositionTPSLExt>\n loading={props.isLoading}\n id=\"oui-desktop-positions-content\"\n columns={column}\n bordered\n dataSource={props.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 = (\n props: PositionsBuilderState & PositionsProps\n) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig } = props;\n return (\n <ListView\n className=\"oui-w-full oui-hide-scrollbar oui-overflow-y-hidden oui-space-y-0\"\n contentClassName=\"!oui-space-y-1\"\n dataSource={props.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={props.onSymbolChange}\n />\n </PositionsRowProvider>\n </SymbolProvider>\n )}\n />\n );\n};\n","import {\n Box,\n cn,\n Divider,\n Flex,\n HoverCard,\n Column,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { useMemo } from \"react\";\nimport {\n renderPriceInput,\n renderQuantity,\n renderQuantityInput,\n} from \"./listElement\";\nimport { CloseButton } from \"./closeButton\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { SharePnLOptions, SharePnLDialogId } from \"@orderly.network/ui-share\";\nimport { ShareButtonWidget } from \"./shareButton\";\nimport { API } from \"@orderly.network/types\";\nimport { TriggerPrice } from \"./triggerPrice\";\nimport { TPSLButton } from \"./components\";\nimport { UnrealizedPnLPopoverCard } from \"./unrealPnLHover\";\nimport { NumeralWithCtx } from \"./numeralWithCtx\";\n\nexport const useColumn = (props: {\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLOptions;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig } = props;\n const column = useMemo(\n () =>\n [\n {\n title: \"Symbol\",\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 140,\n onSort: (r1, r2) => {\n return r1.symbol.localeCompare(r2.symbol);\n // if (sortOrder === \"asc\") {\n // return r1.symbol.localeCompare(r2.symbol);\n // }\n // return r2.symbol.localeCompare(r1.symbol);\n },\n render: (value: string, record) => (\n <Flex gap={2}>\n <Box\n width={4}\n height={20}\n className={cn(\n \"oui-rounded-[1px]\",\n record.position_qty > 0\n ? \"oui-bg-trade-profit\"\n : \"oui-bg-trade-loss\"\n )}\n />\n\n <Text.formatted\n // rule={\"symbol\"}\n formatString=\"base-type\"\n className=\"oui-cursor-pointer\"\n onClick={(e) => {\n props.onSymbolChange?.({ symbol: value } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${value.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n </Flex>\n ),\n },\n {\n title: \"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: \"Avg. open\",\n className: \"oui-h-[48px]\",\n width: 120,\n onSort: true,\n dataIndex: \"average_open_price\",\n render: (value: string, record: any) => {\n // const ctx = usePositionsRowContext();\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: \"Mark price\",\n dataIndex: \"mark_price\",\n width: 120,\n onSort: true,\n className: \"oui-h-[48px]\",\n\n render: (value: string, record: any) => {\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-text-2xs oui-text-base-contrast-54 oui-p-3 oui-bg-base-8\"\n content={\n \"Estimated price at which your position will be liquidated. Prices are estimated and depend on multiple factors across all positions.\"\n }\n >\n <Text>Liq. price</Text>\n </Tooltip>\n ),\n width: 100,\n onSort: true,\n // hint: \"Estimated price at which your position will be liquidated. Prices are estimated and depend on multiple factors across all positions.\",\n dataIndex: \"est_liq_price\",\n render: (value: string, record: any) => {\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>Unreal. PnL</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: any) => {\n return (\n <Flex gap={2}>\n <Flex>\n <Text.numeral\n dp={props.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={props.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={props.sharePnLConfig}\n modalId={SharePnLDialogId}\n />\n </Flex>\n );\n },\n },\n {\n title: \"TP/SL\",\n dataIndex: \"__\",\n width: 150,\n render: (_: string, record) => (\n <TriggerPrice\n stopLossPrice={record.sl_trigger_price}\n takeProfitPrice={record.tp_trigger_price}\n />\n ),\n },\n\n {\n title: \"Notional\",\n dataIndex: \"notional\",\n className: \"oui-h-[48px]\",\n width: 100,\n onSort: true,\n render: (value: string) => (\n <Text.numeral dp={pnlNotionalDecimalPrecision}>\n {value}\n </Text.numeral>\n ),\n },\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-text-2xs oui-text-base-contrast-54 oui-p-3 oui-bg-base-8\"\n content={\n <Flex\n direction={\"column\"}\n gap={3}\n className=\"oui-text-base-contrast-54 oui-bg-base-8 oui-rounded-sm\"\n >\n <span>The minimum equity to keep your position. </span>\n <Divider className=\"oui-w-full\" />\n <span>Margin = Position size * Mark price * MMR</span>\n </Flex>\n }\n >\n <Text>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 // hint: (\n // <Flex\n // direction={\"column\"}\n // gap={3}\n // className=\"oui-text-base-contrast-54 oui-bg-base-8 oui-rounded-sm\"\n // >\n // <span>The minimum equity to keep your position. </span>\n // <Divider className=\"oui-w-full\" />\n // <span>Margin = Position size * Mark price * MMR</span>\n // </Flex>\n // ),\n },\n {\n title: \"Qty.\",\n dataIndex: \"close_qty\",\n width: 100,\n fixed: \"right\",\n render: renderQuantityInput,\n },\n {\n title: \"Price\",\n dataIndex: \"close_price\",\n width: 100,\n fixed: \"right\",\n render: renderPriceInput,\n // render: (value: string) => <PriceInput />,\n },\n {\n title: \"\",\n dataIndex: \"close_position\",\n align: \"right\",\n width: 160,\n fixed: \"right\",\n render: (value: string) => {\n return (\n <Flex gapX={2} justify={\"end\"}>\n <CloseButton />\n <TPSLButton />\n </Flex>\n );\n },\n },\n ] as Column<API.PositionTPSLExt>[],\n [pnlNotionalDecimalPrecision, sharePnLConfig]\n );\n\n return column;\n};\n","import { Button, Text } from \"@orderly.network/ui\";\nimport { NumeralWithCtx } from \"./numeralWithCtx\";\nimport { PriceInput } from \"./priceInput\";\nimport { QuantityInput } from \"./quantityInput\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\n\nexport const renderQuantity = (value: number, record: any) => {\n\n const symbolInfo = useSymbolContext();\n return (\n <Text.numeral dp={symbolInfo.base_dp} rm={Decimal.ROUND_DOWN} padding={false} coloring>\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 {\n CaretDownIcon,\n cn,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Input,\n inputFormatter,\n} from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { useState } from \"react\";\nimport { OrderType } from \"@orderly.network/types\";\n\nexport const PriceInput = () => {\n const { type, quoteDp, price, updatePriceChange, updateOrderType, position } =\n usePositionsRowContext();\n const [hasFocus, setHasFocus] = useState(false);\n\n return (\n <DropdownMenuRoot>\n <Input\n size=\"sm\"\n value={type === OrderType.LIMIT ? price : \"Market\"}\n onValueChange={(e) => updatePriceChange(e)}\n formatters={[\n inputFormatter.numberFormatter,\n ...(quoteDp ? [inputFormatter.dpFormatter(quoteDp)] : []),\n ]}\n onFocus={(e) => {\n if (type === OrderType.MARKET) {\n updateOrderType(OrderType.LIMIT, `${position.mark_price}`);\n }\n setHasFocus(true);\n }}\n onBlur={(e) => {\n setTimeout(() => {\n setHasFocus(false);\n }, 100);\n\n }}\n suffix={\n <DropdownMenuTrigger asChild>\n <button className=\"oui-px-1 oui-h-full\">\n <CaretDownIcon size={12} color=\"white\" />\n </button>\n </DropdownMenuTrigger>\n }\n classNames={{\n root: cn(\"oui-outline-line-12 focus-within:oui-outline-primary-light\")\n }}\n />\n <DropdownMenuContent\n align=\"end\"\n className=\"oui-w-[96px] oui-min-w-[96px]\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DropdownMenuGroup>\n <DropdownMenuItem\n size=\"xs\"\n onSelect={(vent) => {\n updateOrderType(OrderType.MARKET);\n }}\n >\n <span>Market</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenuRoot>\n );\n};\n","import {\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 { useEffect, useState } from \"react\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { utils } from \"@orderly.network/hooks\";\n\nexport const QuantityInput = (props: { value: number }) => {\n // const [quantity, setQuantity] = useState(`${props.value}`);\n const [open, setOpen] = useState(false);\n const [sliderValue, setSliderValue] = useState<number>(100);\n const {\n baseDp,\n quoteDp,\n updateQuantity: setQuantity,\n quantity,\n type,\n errors,\n baseTick,\n } = usePositionsRowContext();\n\n useEffect(() => {\n // when click the outside of the popover, close the popover\n const handleClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n if (!target.closest(\"[data-popover-root]\")) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"click\", handleClick);\n\n return () => {\n document.removeEventListener(\"click\", handleClick);\n };\n }, []);\n\n const resetQuantity = (percent: number) => {\n onBlur(`${props.value * (percent / 100)}`);\n };\n\n const onBlur = (value: string) => {\n if (baseTick && baseTick > 0) {\n const formatQty = utils.formatNumber(value, baseTick) ?? value;\n setQuantity(formatQty);\n }\n };\n\n return (\n <PopoverRoot>\n <PopoverTrigger>\n <Input\n size=\"sm\"\n onFocus={() => {\n setOpen(true);\n }}\n classNames={{\n root: \"oui-outline-line-12 \"\n }}\n formatters={[\n inputFormatter.numberFormatter,\n ...(baseDp ? [inputFormatter.dpFormatter(baseDp)] : []),\n ]}\n // tooltip={errors?.order_quantity?.message}\n // color={errors?.order_quantity?.message ? \"danger\" : undefined}\n value={quantity}\n onBlur={(event) => onBlur(event.target.value)}\n onValueChange={(e) => {\n setQuantity(e);\n // if (type === OrderType.LIMIT) {\n if (e == '0' || e == \"\") {\n setSliderValue(0);\n return;\n }\n const value = new Decimal(e)\n .div(props.value)\n .mul(100)\n .abs()\n .toFixed(0, Decimal.ROUND_DOWN);\n // console.log(\"xxxxxx value\", value);\n\n setSliderValue(Math.min(100, Number(value)));\n // }\n }}\n />\n </PopoverTrigger>\n <PopoverContent\n className=\"oui-w-[360px] oui-rounded-xl\"\n align=\"start\"\n side=\"bottom\"\n onOpenAutoFocus={(event) => {\n event.preventDefault();\n }}\n >\n <Flex p={1} gap={2} width={\"100%\"} itemAlign={\"start\"}>\n <Text size=\"xs\" intensity={98} className=\"oui-min-w-[30px]\">\n {`${sliderValue}%`}\n </Text>\n <Flex direction={\"column\"} width={\"100%\"} gap={2}>\n <Slider\n markCount={4}\n value={[sliderValue]}\n onValueChange={(e) => {\n const values = Array.from(e.values());\n setSliderValue(values[0]);\n resetQuantity(values[0]);\n }}\n />\n <Buttons\n onClick={(value) => {\n setSliderValue(value * 100);\n resetQuantity(value * 100);\n }}\n />\n </Flex>\n </Flex>\n </PopoverContent>\n </PopoverRoot>\n );\n};\n\nconst Buttons = (props: { onClick: (value: number) => void }) => {\n const 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: \"Max\",\n value: 1,\n },\n ];\n\n return (\n <Flex gap={2} width={\"100%\"}>\n {list.map((item, index) => {\n return (\n <Button\n key={index}\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n onClick={(e) => {\n e.stopPropagation();\n props.onClick(item.value);\n }}\n className=\"oui-w-1/5\"\n >\n {item.label}\n </Button>\n );\n })}\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { modal, ShareIcon } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { ShareButtonState } from \"./shareButton.script\";\n\nexport const ShareButton: FC<ShareButtonState> = (props) => {\n if (props.sharePnLConfig == null) return <></>;\n\n const { position } = props;\n\n const showModal = () => {\n const entity = props.isPositionHistory\n ? {\n side: position.side,\n pnl: position.netPnL,\n openPrice: position.avg_open_price,\n closePrice: position.avg_close_price,\n openTime: position.open_timestamp,\n closeTime: position.close_timestamp,\n quantity: position.closed_position_qty,\n }\n : {\n side: position.position_qty > 0 ? \"LONG\" : \"SHORT\",\n pnl: position.unrealized_pnl,\n roi: new Decimal(position.unrealized_pnl_ROI * 100).toFixed(\n 2,\n Decimal.ROUND_DOWN\n ),\n openPrice: position.average_open_price,\n markPrice: position.mark_price,\n openTime: position.timestamp,\n quantity: position.position_qty,\n };\n\n modal.show(props.modalId, {\n pnl: {\n entity: {\n symbol: position.symbol,\n ...entity,\n },\n refCode: props.refCode,\n ...props.sharePnLConfig,\n leverage: props.isPositionHistory ? undefined : props.leverage,\n },\n });\n };\n return (\n <button\n type=\"button\"\n onClick={(e: any) => {\n e.stopPropagation();\n showModal();\n }}\n >\n <ShareIcon color=\"white\" opacity={0.54} size={props.iconSize ?? 16} />\n </button>\n );\n};\n","import { useMemo } from \"react\";\nimport { useReferralInfo, useSymbolLeverage } from \"@orderly.network/hooks\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport type UseShareButtonScriptOptions = {\n position: any;\n sharePnLConfig?: SharePnLConfig;\n modalId: string;\n iconSize?: number;\n isPositionHistory?: boolean;\n};\n\nexport const useShareButtonScript = (props: UseShareButtonScriptOptions) => {\n const { sharePnLConfig, position, modalId, iconSize, isPositionHistory } =\n props;\n const { getFirstRefCode } = useReferralInfo();\n const refCode = useMemo(() => {\n return getFirstRefCode()?.code;\n }, [getFirstRefCode]);\n const leverage = useSymbolLeverage(props.position.symbol);\n return {\n iconSize,\n position,\n refCode,\n leverage,\n sharePnLConfig,\n modalId,\n isPositionHistory,\n };\n};\n\nexport type ShareButtonState = ReturnType<typeof useShareButtonScript>;\n","import {\n useShareButtonScript,\n UseShareButtonScriptOptions,\n} from \"./shareButton.script\";\nimport { ShareButton } from \"./shareButton.ui\";\n\nexport type ShareButtonWidgetProps = UseShareButtonScriptOptions;\n\nexport const ShareButtonWidget = (props: ShareButtonWidgetProps) => {\n const state = useShareButtonScript(props);\n return <ShareButton {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { AlgoOrderType, API, OrderSide } from \"@orderly.network/types\";\nimport { useSymbolsInfo, utils } from \"@orderly.network/hooks\";\nimport { cn, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { TPSLEditIcon } from \"./components\";\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\n const pnl = useMemo(() => {\n const msgs = [];\n\n if (!props.tooltip || !order || !position) return;\n\n let quantity = order.quantity;\n\n if (quantity === 0) {\n if (order.child_orders[0].type === \"CLOSE_POSITION\") {\n quantity = position.position_qty;\n }\n }\n\n if (!!props.takeProfitPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"tp\"}\n qty={quantity}\n price={props.takeProfitPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.TAKE_PROFIT}\n symbolInfo={symbolInfo[order.symbol]()}\n />\n );\n }\n\n if (!!props.stopLossPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"sl\"}\n qty={quantity}\n price={props.stopLossPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.STOP_LOSS}\n symbolInfo={symbolInfo[order.symbol]()}\n />\n );\n }\n\n return <div>{msgs}</div>;\n }, [\n props.takeProfitPrice,\n props.stopLossPrice,\n position?.average_open_price,\n order?.side,\n order?.quantity,\n order?.algo_type,\n ]);\n\n const child = useMemo(() => {\n const children = [];\n\n if (!order?.symbol) return <span>-</span>;\n 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}>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}>SL - </Text>\n ) : (\n \"\"\n )\n }\n />\n );\n }\n\n if (children.length === 0) return <Text>-</Text>;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <Text key={\"split\"}>/</Text>);\n }\n\n return children;\n }, [props.takeProfitPrice, props.stopLossPrice, order?.symbol]);\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 { PositionTPSLPopover } from \"@orderly.network/ui-tpsl\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { EditIcon } from \"@orderly.network/ui\";\n\n// ------------ TP/SL Price input end------------\nexport const TPSLButton = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n label=\"TP/SL\"\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing={false}\n />\n );\n};\n\nexport const TPSLEditIcon = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing\n >\n <EditIcon\n opacity={1}\n className=\"oui-text-base-contrast-54 oui-cursor-pointer\"\n size={16}\n />\n </PositionTPSLPopover>\n );\n};\n","import { useLocalStorage } from \"@orderly.network/hooks\";\nimport { Divider, Flex, Text } from \"@orderly.network/ui\";\nimport { FC, useCallback } from \"react\";\n\nexport const UnrealizedPnLPopoverCard: FC<{}> = (props) => {\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\"\n );\n\n return (\n <Flex direction={\"column\"} gap={3} className=\"oui-text-base-contrast-54 oui-items-start\">\n <Text>\n Current unrealized profit or loss on your open positions across all\n widgets calculated using Mark Price.\n </Text>\n <Divider className=\"oui-w-full\" />\n <div className=\"oui-mb-0\">Unrealized PnL Price Basis</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 // \"markPrice\" | \"lastPrice\"\n return (\n <Flex gap={2}>\n <RadioButton\n sel={value === \"markPrice\"}\n label={\"Mark price\"}\n value={\"markPrice\"}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === \"lastPrice\"}\n label={\"Last price\"}\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 { NumeralProps, Text } from \"@orderly.network/ui\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\n\nexport type TickName = \"quote_dp\" | \"base_dp\";\n\nexport const NumeralWithCtx: FC<\n Omit<NumeralProps, \"precision\" | \"tick\"> & {\n tick?: TickName;\n }\n> = (props) => {\n const { tick = \"quote_dp\", ...rest } = props;\n const symbolInfo = useSymbolContext();\n\n if (!symbolInfo) {\n throw new Error(\"NumeralWithCtx must be used inside SymbolProvider\");\n }\n\n return <Text.numeral as=\"span\" {...rest} dp={symbolInfo[tick]} />;\n};\n","import { FC } from \"react\";\nimport { cn, Divider, Flex, Grid } from \"@orderly.network/ui\";\nimport { PositionCellState } from \"./positionCell.script\";\nimport {\n UnrealPnL,\n SymbolToken,\n Qty,\n Margin,\n Notional,\n AvgOpen,\n MarkPrice,\n LiqPrice,\n TPSLPrice,\n} from \"./items\";\nimport { LimitCloseBtnWidget } from \"../limitCloseBtn\";\nimport { MarketCloseBtnWidget } from \"../marketCloseBtn\";\nimport { TpSLBtnWidget } from \"../tpSLBtn\";\n\nexport const PositionCell: FC<\n PositionCellState & {\n className?: string;\n }\n> = (props) => {\n const { className, ...rest } = props;\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n p={2}\n r=\"xl\"\n itemAlign={\"start\"}\n className={cn(className, \"oui-bg-base-9\")}\n >\n <Header {...rest} />\n <Divider intensity={6} className=\"oui-w-full\" />\n <Body {...rest} />\n <TPSLPrice {...rest} />\n <Buttons {...rest} />\n </Flex>\n );\n};\n\nconst Header: FC<PositionCellState> = (props) => {\n return (\n <Flex justify={\"between\"} width={\"100%\"}>\n <SymbolToken {...props} />\n <UnrealPnL {...props} />\n </Flex>\n );\n};\n\nconst Body: FC<PositionCellState> = (props) => {\n return (\n <Grid cols={3} rows={2} gap={2} width={\"100%\"}>\n <Qty {...props} />\n <Margin {...props} />\n <Notional {...props} />\n <AvgOpen {...props} />\n <MarkPrice {...props} />\n <LiqPrice {...props} />\n </Grid>\n );\n};\n\nconst Buttons: FC<PositionCellState> = (props) => {\n return (\n <Grid width={\"100%\"} gap={2} cols={3} rows={1}>\n <TpSLBtnWidget state={props} />\n <LimitCloseBtnWidget state={props} />\n <MarketCloseBtnWidget state={props} />\n </Grid>\n );\n};\n","import { Badge, cn, Flex, Statistic, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { ShareButtonWidget } from \"../../desktop/shareButton\";\nimport { SharePnLBottomSheetId } from \"@orderly.network/ui-share\";\nimport { PositionCellState } from \"./positionCell.script\";\nimport { FC } from \"react\";\nimport { API } from \"@orderly.network/types\";\n\nexport const SymbolToken: FC<PositionCellState> = (props) => {\n const { item } = props;\n const isBuy = item.position_qty > 0;\n return (\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"2xs\"\n suffix={\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? \"Buy\" : \"Sell\"}\n </Badge>\n }\n showIcon\n onClick={() => {\n props.onSymbolChange?.({ symbol: item.symbol } as API.Symbol);\n }}\n >\n {item.symbol}\n </Text.formatted>\n );\n};\n\nexport const UnrealPnL: FC<PositionCellState> = (props) => {\n const { item } = props;\n\n return (\n <Flex gap={3}>\n <Flex direction={\"column\"} className=\"oui-text-2xs\" itemAlign={\"end\"}>\n <Text intensity={36}>\n Unreal. PnL{<Text intensity={20}>(USDC)</Text>}\n </Text>\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\n return (\n <Statistic\n label={\"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\n return (\n <Statistic\n label={<Text>Margin{<Text intensity={20}>(USDC)</Text>}</Text>}\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\n return (\n <Statistic\n align=\"end\"\n label={<Text>Notional{<Text intensity={20}>(USDC)</Text>}</Text>}\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\n return (\n <Statistic\n label={\"Avg. open\"}\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\n return (\n <Statistic\n label={\"Mark price\"}\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\n const liqPrice =\n item.est_liq_price && item.est_liq_price > 0 ? item.est_liq_price : \"-\";\n\n return (\n <Statistic\n label={\"Liq. price\"}\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\n if (item.tp_trigger_price == null && item.sl_trigger_price == null)\n return <></>;\n\n return (\n <Flex className=\"oui-text-2xs oui-text-base-contrast-36\">\n <Text>TP/SL: </Text>\n <Flex className=\"oui-gap-[2px]\">\n {item.tp_trigger_price && (\n <Text.numeral color=\"buy\">{item.tp_trigger_price}</Text.numeral>\n )}\n {item.sl_trigger_price && \"/\"}\n {item.sl_trigger_price && (\n <Text.numeral color=\"sell\">{item.sl_trigger_price}</Text.numeral>\n )}\n </Flex>\n </Flex>\n );\n};\n","import { FC, useState } from \"react\";\nimport {\n Badge,\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n SimpleDialog,\n SimpleSheet,\n Slider,\n Text,\n ThrottledButton,\n toast,\n} from \"@orderly.network/ui\";\nimport { LimitCloseBtnState } from \"./limitCloseBtn.script\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { LimitConfirmDialog } from \"../../desktop/closeButton\";\nimport { utils } from \"@orderly.network/hooks\";\n\nexport const LimitCloseBtn: FC<LimitCloseBtnState> = (props) => {\n const {\n item,\n sheetOpen,\n setSheetOpen,\n dialogOpen,\n setDialogOpen,\n updatePriceChange,\n base,\n quantity,\n price,\n onClose,\n onConfirm,\n submitting,\n quote_dp,\n closeOrderData,\n onCloseDialog,\n } = props;\n const isBuy = item.position_qty > 0;\n\n const onBlur = (value: string) => {\n if (props.baseTick && props.baseTick > 0) {\n const formatQty = utils.formatNumber(value, props.baseTick) ?? value;\n props.updateQuantity(formatQty);\n }\n };\n\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={() => {\n updatePriceChange(\"limit\");\n setSheetOpen(true);\n }}\n >\n Limit Close\n </Button>\n\n {sheetOpen && (\n <SimpleSheet\n title={\"Limit close\"}\n open={sheetOpen}\n onOpenChange={setSheetOpen}\n >\n <Flex\n direction={\"column\"}\n gap={3}\n width={\"100%\"}\n itemAlign={\"start\"}\n className=\"oui-text-sm\"\n >\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text.formatted rule={\"symbol\"} showIcon>\n {item.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n Limit\n </Badge>\n {isBuy && (\n <Badge color=\"success\" size=\"xs\">\n Buy\n </Badge>\n )}\n {!isBuy && (\n <Badge color=\"danger\" size=\"xs\">\n Sell\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider className=\"oui-w-full\" />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text intensity={54}>Last price</Text>\n <Text.numeral\n dp={(props.item as any)?.symbolInfo?.quote_dp}\n suffix={<Text intensity={36}>USDC</Text>}\n >\n {props.curMarkPrice}\n </Text.numeral>\n </Flex>\n <Flex width={\"100%\"} direction={\"column\"} gap={2}>\n <Input.tooltip\n prefix=\"Price\"\n suffix={props.quote}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.quote_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={props.errors?.order_price?.message}\n color={\n props.errors?.order_price?.message ? \"danger\" : undefined\n }\n value={props.price}\n onValueChange={(e) => props.updatePriceChange(e)}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-outline-line-12 oui-w-full\",\n props.errors?.order_price?.message\n ? \"oui-outline-danger\"\n : undefined\n ),\n }}\n />\n <Input\n prefix=\"Quantity\"\n suffix={props.base}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.base_dp),\n ]}\n // triggerClassName=\"oui-w-full\"\n // tooltip={props.errors?.order_quantity?.message}\n // color={\n // props.errors?.order_quantity?.message ? \"danger\" : undefined\n // }\n value={props.quantity}\n onBlur={(event) => onBlur(event.target.value)}\n onValueChange={(e) => {\n props.updateQuantity(e);\n const slider = new Decimal(e)\n .div(props.item.position_qty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n props.setSliderValue(slider);\n }}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-outline-line-12 oui-w-full\",\n // props.errors?.order_quantity?.message\n // ? \"oui-outline-danger\"\n // : undefined\n ),\n }}\n />\n <Slider\n markCount={4}\n value={[props.sliderValue]}\n color=\"primary\"\n onValueChange={(e) => {\n props.setSliderValue(e[0]);\n const qty = new Decimal(e[0])\n .div(100)\n .mul(props.item.position_qty)\n .toFixed(props.base_dp, Decimal.ROUND_DOWN);\n // props.updateQuantity(qty);\n onBlur(qty);\n }}\n />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text\n color=\"primary\"\n size=\"2xs\"\n >{`${props.sliderValue}%`}</Text>\n <Flex gap={1}>\n <Text size=\"2xs\" color=\"primary\">\n Max\n </Text>\n <Text.numeral intensity={54} size=\"2xs\">\n {Math.abs(props.item.position_qty)}\n </Text.numeral>\n </Flex>\n </Flex>\n </Flex>\n <Flex width={\"100%\"} gap={3} mt={2}>\n <Button\n fullWidth\n color=\"secondary\"\n onClick={(e) => {\n onClose();\n }}\n >\n Cancel\n </Button>\n <ThrottledButton\n fullWidth\n disabled={submitting}\n loading={submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n const errors = props.errors;\n\n const quantityMsg = errors?.order_quantity?.message;\n const priceMsg = errors?.order_price?.message;\n if (quantityMsg || priceMsg) {\n toast.error(quantityMsg ?? priceMsg);\n return;\n }\n if (!props.orderConfirm) {\n onConfirm();\n return;\n }\n setDialogOpen(true);\n }}\n // disabled={Object.keys(props.errors ?? {}).length > 0}\n >\n Confirm\n </ThrottledButton>\n </Flex>\n </Flex>\n </SimpleSheet>\n )}\n\n {dialogOpen && (\n <SimpleDialog open={dialogOpen} onOpenChange={setDialogOpen} size=\"xs\">\n <LimitConfirmDialog\n base={base}\n quantity={quantity}\n price={price}\n onClose={onCloseDialog}\n onConfirm={onConfirm}\n submitting={submitting}\n quoteDp={quote_dp}\n order={closeOrderData}\n hideCloseIcon\n />\n </SimpleDialog>\n )}\n </>\n );\n};\n","import { useLocalStorage, useMarkPricesStream } from \"@orderly.network/hooks\";\nimport { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useSymbolContext } from \"../../../../providers/symbolProvider\";\nimport { usePositionsRowContext } from \"../../desktop/positionRowContext\";\nimport { toast } from \"@orderly.network/ui\";\nimport { OrderType } from \"@orderly.network/types\";\n\nexport const useLimitCloseBtnScript = (props: { state: PositionCellState }) => {\n const { state } = props;\n const [sheetOpen, setSheetOpen] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const {\n onSubmit,\n price,\n quantity,\n closeOrderData,\n submitting,\n type,\n updatePriceChange,\n updateOrderType,\n updateQuantity,\n errors,\n baseTick,\n } = usePositionsRowContext();\n const setPrice = useRef(false);\n\n const [sliderValue, setSliderValue] = useState(100);\n\n\n const [orderConfirm ] = useLocalStorage(\"orderly_order_confirm\", true);\n\n\n const onConfirm = () => {\n return onSubmit().then(\n (res) => {\n setSheetOpen(false);\n setDialogOpen(false);\n },\n (error: any) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n }\n );\n };\n\n const onClose = () => {\n setSheetOpen(false);\n };\n const onCloseDialog = () => {\n setDialogOpen(false);\n };\n const prices = useMarkPricesStream();\n const curMarkPrice = useMemo(() => {\n return prices?.[\"data\"]?.[state.item.symbol] ?? \"--\";\n }, [prices]);\n\n const { quote_dp, base_dp, base, quote } = useSymbolContext();\n useEffect(() => {\n if (!setPrice.current && curMarkPrice && sheetOpen) {\n setPrice.current = true;\n updateOrderType(OrderType.LIMIT, `${curMarkPrice}`);\n }\n }, [setPrice, curMarkPrice, sheetOpen]);\n\n // clear state\n useEffect(() => {\n if (!sheetOpen) {\n updateOrderType(OrderType.MARKET);\n setPrice.current = false;\n // setSliderValue(100);\n }\n }, [sheetOpen]);\n\n return {\n ...state,\n sheetOpen,\n setSheetOpen,\n curMarkPrice,\n quote_dp,\n base_dp,\n base,\n quote,\n baseTick,\n\n orderConfirm,\n\n onClose,\n onConfirm,\n price,\n quantity,\n closeOrderData,\n submitting,\n updatePriceChange,\n updateQuantity,\n errors,\n\n // slider\n sliderValue,\n setSliderValue,\n\n dialogOpen,\n setDialogOpen,\n onCloseDialog,\n };\n};\n\nexport type LimitCloseBtnState = ReturnType<typeof useLimitCloseBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useLimitCloseBtnScript } from \"./limitCloseBtn.script\";\nimport { LimitCloseBtn } from \"./limitCloseBtn.ui\";\n\nexport const LimitCloseBtnWidget = (props: {\n state: PositionCellState;\n}) => {\n const state = useLimitCloseBtnScript(props);\n return (<LimitCloseBtn {...state} />);\n};\n","import { FC } from \"react\";\nimport { Button, Flex, SimpleDialog, Text } from \"@orderly.network/ui\";\nimport { MarketCloseBtnState } from \"./marketCloseBtn.script\";\nimport { MarketCloseConfirm } from \"../../desktop/closeButton\";\nimport { OrderType } from \"@orderly.network/types\";\n\nexport const MarketCloseBtn: FC<MarketCloseBtnState> = (props) => {\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n disabled={props.submitting}\n loading={props.submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n\n props.updateOrderType(OrderType.MARKET);\n\n if (!props.orderConfirm) {\n props.onConfirm();\n return;\n }\n props.setDialogOpen(true);\n }}\n >\n Market Close\n </Button>\n <SimpleDialog open={props.dialogOpen} onOpenChange={props.setDialogOpen} size=\"xs\">\n <MarketCloseConfirm\n base={props.base}\n quantity={props.quantity}\n onClose={props.onClose}\n onConfirm={props.onConfirm}\n submitting={props.submitting}\n hideCloseIcon\n />\n </SimpleDialog>\n </>\n );\n};\n","import { useState } from \"react\";\nimport { useSymbolContext } from \"../../../../providers/symbolProvider\";\nimport { usePositionsRowContext } from \"../../desktop/positionRowContext\";\nimport { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\n\nexport const useMarketCloseBtnScript = (props: {\n state: PositionCellState;\n}) => {\n const symbolInfo = useSymbolContext();\n const [dialogOpen, setDialogOpen] = useState(false);\n const {\n onSubmit,\n price,\n quantity,\n closeOrderData,\n submitting,\n type,\n updatePriceChange,\n updateOrderType,\n updateQuantity,\n } = usePositionsRowContext();\n\n const [orderConfirm ] = useLocalStorage(\"orderly_order_confirm\", true);\n\n\n const onConfirm = () => {\n return onSubmit().then(\n (res) => {\n setDialogOpen(false);\n },\n (error: any) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n }\n );\n };\n\n const onClose = () => {\n setDialogOpen(false);\n };\n\n return {\n ...props,\n ...symbolInfo,\n\n dialogOpen,\n setDialogOpen,\n\n orderConfirm,\n\n onSubmit,\n quantity,\n onClose,\n onConfirm,\n submitting,\n updateOrderType,\n updateQuantity,\n };\n};\n\nexport type MarketCloseBtnState = ReturnType<typeof useMarketCloseBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useMarketCloseBtnScript } from \"./marketCloseBtn.script\";\nimport { MarketCloseBtn } from \"./marketCloseBtn.ui\";\n\nexport const MarketCloseBtnWidget = (props: { state: PositionCellState }) => {\n const state = useMarketCloseBtnScript(props);\n return <MarketCloseBtn {...state} />;\n};\n","import { FC } from \"react\";\nimport { Button, Flex, Text, toast } from \"@orderly.network/ui\";\nimport { TpSLBtnState } from \"./tpSLBtn.script\";\n\nexport const TpSLBtn: FC<TpSLBtnState> = (props) => {\n // const { item } = props;\n //\n return (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.openTP_SL();\n }}\n >\n TP/SL\n </Button>\n );\n};\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { modal } from \"@orderly.network/ui\";\nimport { PositionTPSLSheet } from \"@orderly.network/ui-tpsl\";\nimport { API } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { usePositionsRowContext } from \"../../desktop/positionRowContext\";\n\nexport const useTpSLBtnScript = (props: { state: PositionCellState }) => {\n const symbolInfo: API.SymbolExt = useSymbolsInfo()[props.state.item.symbol]();\n const { tpslOrder } = usePositionsRowContext();\n\n const openTP_SL = () => {\n modal.sheet({\n title: \"TP/SL\",\n content: (\n <PositionTPSLSheet\n position={props.state.item}\n symbolInfo={symbolInfo}\n order={tpslOrder}\n isEditing={false}\n />\n ),\n });\n };\n\n return {\n openTP_SL,\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type TpSLBtnState = ReturnType<typeof useTpSLBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useTpSLBtnScript } from \"./tpSLBtn.script\";\nimport { TpSLBtn } from \"./tpSLBtn.ui\";\n\nexport const TpSLBtnWidget = (props: { state: PositionCellState }) => {\n const state = useTpSLBtnScript(props);\n return (<TpSLBtn {...state} />);\n};\n","import { API } from \"@orderly.network/types\";\nimport { PositionsProps } from \"../../../../types/types\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useSymbolContext } from \"../../../../providers/symbolProvider\";\n\nexport const usePositionCellScript = (\n props: {\n item: API.PositionTPSLExt;\n index: number;\n } & PositionsProps\n) => {\n const symbolInfo = useSymbolContext();\n return {\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type PositionCellState = ReturnType<typeof usePositionCellScript>;\n","import { FC } from \"react\";\nimport { usePositionCellScript } from \"./positionCell.script\";\nimport { PositionCell } from \"./positionCell.ui\";\nimport { API } from \"@orderly.network/types\";\nimport { PositionsProps } from \"../../../../types/types\";\n\nexport const PositionCellWidget: FC<\n {\n item: API.PositionTPSLExt;\n index: number;\n className?: string;\n shareIconSize?: number;\n } & PositionsProps\n> = (props) => {\n const state = usePositionCellScript(props);\n return <PositionCell {...state} className={props.className} />;\n};\n","import { usePositionStream } from \"@orderly.network/hooks\";\nimport { PositionsProps } from \"../../types/types\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { useEffect } from \"react\";\n\nexport const usePositionsBuilder = (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({\n pageSize: 50,\n });\n\n const [data, info, { isLoading }] = usePositionStream(symbol, {\n calcMode,\n includedPendingOrder,\n });\n\n useEffect(() => {\n setPage(1);\n }, [symbol]);\n\n const dataSource = useDataTap(data?.rows) ?? 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 PositionsBuilderState = ReturnType<typeof usePositionsBuilder>;\n","import { PositionsProps } from \"../../types/types\";\nimport { MobilePositions, Positions } from \"./positions.ui\";\nimport { usePositionsBuilder } from \"./usePositionsBuilder.script\";\n\nexport const PositionsWidget = (props: PositionsProps) => {\n const state = usePositionsBuilder(props);\n return <Positions {...state} />;\n};\n\nexport const MobilePositionsWidget = (props: PositionsProps) => {\n const state = usePositionsBuilder(props);\n return <MobilePositions {...state} />;\n};\n","import { FC } from \"react\";\nimport {\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n} from \"@orderly.network/ui\";\nimport {\n PositionHistoryExt,\n PositionHistoryState,\n} from \"./positionHistory.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { usePositionHistoryColumn } from \"./desktop/usePositionHistoryColumn\";\nimport { SymbolProvider } from \"../../providers/symbolProvider\";\nimport { PositionHistoryCellWidget } from \"./mobile\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\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 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 className=\"oui-relative oui-px-2 oui-py-[2px] oui-text-sm\">\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-gradient-primary oui-opacity-[.12] oui-absolute oui-left-0 oui-right-0 oui-top-0 oui-bottom-0 oui-rounded\"\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-grid-rows-[auto,1fr] oui-w-full\"\n gap={1}\n >\n <Flex gap={2} p={2} className=\"oui-bg-base-9 oui-rounded-b-xl\">\n <DataFilter\n className=\"oui-pt-0 oui-pb-0 oui-border-none\"\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n </Flex>\n <ListView\n className={cn(\n \"oui-w-full oui-hide-scrollbar oui-overflow-y-hidden oui-space-y-0\",\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 { 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 { ReactNode } from \"react\";\nimport { useMemo } from \"react\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { ShareButtonWidget } from \"../../positions/desktop/shareButton\";\nimport { SharePnLConfig, SharePnLDialogId } from \"@orderly.network/ui-share\";\n\nexport const usePositionHistoryColumn = (props: {\n onSymbolChange?: (symbol: API.Symbol) => void;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const { onSymbolChange, pnlNotionalDecimalPrecision } = props;\n\n const column = useMemo(\n () =>\n [\n // instrument\n {\n title: \"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: \"Closed / Max closed\",\n dataIndex: \"close_maxClose\",\n width: 200,\n render: (value: string, record) => <Quantity record={record} />,\n },\n // net pnl\n {\n title: \"Net PnL\",\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: \"Avg. open\",\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: \"Avg. close\",\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 // time opened\n {\n title: \"Time opened\",\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: \"Time closed\",\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: \"Updated time\",\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]\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\n const tags = useMemo(() => {\n const list: ReactNode[] = [];\n\n list.push(\n <Badge\n color={record.position_status !== \"closed\" ? \"primaryLight\" : \"neutral\"}\n size=\"xs\"\n >\n {capitalizeFirstLetter(\n record.position_status === \"partial_closed\"\n ? \"Partially closed\"\n : record.position_status.replace(\"_\", \" \")\n )}\n </Badge>\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge color={\"danger\"} size=\"xs\">\n {capitalizeFirstLetter(record.type)}\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}>Liquidation id</Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>Liquidator fee</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}>Ins. Fund fee</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 {capitalizeFirstLetter(record.type)}\n </span>\n </Badge>\n </div>\n </Tooltip>\n );\n }\n\n return list;\n }, [record]);\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\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}>Net PnL</Text>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>Realized PnL</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}>Funding fee</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}>Trading fee</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 { Divider, Flex, Grid, modal, Text } from \"@orderly.network/ui\";\nimport { PositionHistoryCellState } from \"./positionHistoryCell.script\";\nimport {\n PositionHistoryType,\n ClosedQty,\n SymbolToken,\n OpenTime,\n AvgOpen,\n AvgClosed,\n ClosedTime,\n MaxClosedQty,\n} from \"./items\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { ShareButtonWidget } from \"../../positions/desktop/shareButton\";\nimport { SharePnLBottomSheetId } from \"@orderly.network/ui-share\";\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 showAlert = () => {\n const { item: record } = props;\n\n modal.alert({\n title: \"Net PnL\",\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}>Realized PnL</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}>Funding fee</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}>Trading fee</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 Net PnL\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 <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 );\n};\n","import { FC, ReactNode, useMemo } from \"react\";\nimport {\n PositionHistoryExt,\n PositionHistorySide,\n} from \"../positionHistory.script\";\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 { PositionHistoryCellState } from \"./positionHistoryCell.script\";\nimport { PositionsRowContextState } from \"../../positions/desktop/positionRowContext\";\nimport { commifyOptional } from \"@orderly.network/utils\";\n\nexport const SymbolToken: FC<PositionHistoryCellState> = (props) => {\n const { side, symbol } = props.item;\n const isBuy = side === PositionHistorySide.buy;\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 ? \"Buy\" : \"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\n const showAlert = () => {\n modal.alert({\n title: \"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>Liquidation id</Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>Liquidator fee</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>Ins. Fund fee</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 list.push(\n <Badge\n color={record.position_status !== \"closed\" ? \"primaryLight\" : \"neutral\"}\n size=\"xs\"\n >\n {capitalizeFirstLetter(\n record.position_status === \"partial_closed\"\n ? \"Partially closed\"\n : record.position_status.replace(\"_\", \" \")\n )}\n </Badge>\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge color={\"danger\"} size=\"xs\">\n {capitalizeFirstLetter(record.type)}\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 </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 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>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 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>Max 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 {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\n return (\n <Statistic\n label={<Text>Avg. open{<Text intensity={20}>{\" (USDC)\"}</Text>}</Text>}\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\n return (\n <Statistic\n label={<Text>Avg. close{<Text intensity={20}>{\" (USDC)\"}</Text>}</Text>}\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\n return (\n <Statistic\n label={\"Time opened\"}\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\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={\"Time closed\"}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n {child}\n </Statistic>\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\";\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 });\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 [status, setStatus] = useState<PositionHistoryStatus>(\n PositionHistoryStatus.all\n );\n const [side, setSide] = useState<PositionHistorySide>(\n PositionHistorySide.all\n );\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: \"All sides\",\n value: \"all\",\n },\n {\n label: \"Buy\",\n value: PositionHistorySide.buy,\n },\n {\n label: \"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: \"All status\",\n value: \"all\",\n },\n {\n label: \"Closed\",\n value: PositionHistoryStatus.closed,\n },\n {\n label: \"Partially Closed\",\n value: PositionHistoryStatus.partial_closed,\n },\n ],\n value: status,\n };\n\n if (isMobile) {\n return [sideFilter, statusFilter];\n }\n return [sideFilter, statusFilter, dateRangeFilter];\n }, [side, status, dateRange]);\n\n return {\n filterItems,\n onFilter,\n side,\n dateRange,\n status,\n filterDays,\n updateFilterDays,\n };\n};\n\nexport type PositionHistoryState = ReturnType<typeof usePositionHistoryScript>;\n","import { differenceInDays, setDate, setHours, subDays } from \"date-fns\";\n\nexport const parseDateRangeForFilter = (dateRange: {\n from: Date;\n to?: Date;\n}) => {\n let { from, to } = dateRange;\n\n if (typeof to === \"undefined\") {\n to = new Date();\n }\n\n const diff = differenceInDays(from, to);\n\n // console.log(\"diff\", diff);\n\n if (diff === 0) {\n return [from, setHours(to, 23)];\n }\n\n return [from, to];\n};\n\nexport function offsetStartOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(0, 0, 0, 0);\n return newDate;\n}\n\nexport function offsetEndOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(23, 59, 59, 999);\n return newDate;\n}\n\nexport const formatDatePickerRange = (option: { from?: Date; to?: Date }) => ({\n from: offsetStartOfDay(option.from),\n to: offsetEndOfDay(option.to ?? option.from),\n});\n\nexport const areDatesEqual = (date1: Date, date2: Date): boolean => {\n return date1.getTime() === date2.getTime();\n};\n","import { API } from \"@orderly.network/types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { SymbolInfo } from \"../desktop/usePositionHistoryColumn\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const usePositionHistoryCellScript = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const symbolInfo = useSymbolContext();\n\n return {\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type PositionHistoryCellState = ReturnType<\n typeof usePositionHistoryCellScript\n>;\n","import { API } from \"@orderly.network/types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { usePositionHistoryCellScript } from \"./positionHistoryCell.script\";\nimport { PositionHistoryCell } from \"./positionHistoryCell.ui\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const PositionHistoryCellWidget = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const state = usePositionHistoryCellScript(props);\n return <PositionHistoryCell {...state} />;\n};\n","import { API } from \"@orderly.network/types\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { usePositionHistoryScript } from \"./positionHistory.script\";\nimport { MobilePositionHistory, PositionHistory } from \"./positionHistory.ui\";\n\nexport type PositionHistoryProps = {\n onSymbolChange?: (symbol: API.Symbol) => void;\n symbol?: string;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n};\n\nexport const PositionHistoryWidget = (props: PositionHistoryProps) => {\n const state = usePositionHistoryScript(props);\n return <PositionHistory {...state} sharePnLConfig={props.sharePnLConfig} />;\n};\n\nexport const MobilePositionHistoryWidget = (\n props: PositionHistoryProps & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }\n) => {\n const { classNames, ...rest } = props;\n const state = usePositionHistoryScript(rest);\n return (\n <MobilePositionHistory\n {...state}\n classNames={classNames}\n sharePnLConfig={props.sharePnLConfig}\n />\n );\n};\n","import { FC } from \"react\";\nimport {\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n} from \"@orderly.network/ui\";\nimport { LiquidationState } from \"./liquidation.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { API } from \"@orderly.network/types\";\nimport { useLiquidationColumn } from \"./desktop/useLiquidationColumn\";\nimport { SymbolProvider } from \"../../providers/symbolProvider\";\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 className=\"oui-relative oui-px-2 oui-py-[2px] oui-text-sm\">\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-gradient-primary oui-opacity-[.12] oui-absolute oui-left-0 oui-right-0 oui-top-0 oui-bottom-0 oui-rounded\"\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-grid-rows-[auto,1fr] oui-w-full\"\n gap={1}\n >\n <Flex gap={2} p={2} className=\"oui-bg-base-9 oui-rounded-b-xl\">\n <DataFilter\n className=\"oui-pt-0 oui-pb-0 oui-border-none\"\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n </Flex>\n <ListView\n className={cn(\n \"oui-w-full oui-hide-scrollbar oui-overflow-y-hidden oui-space-y-0\",\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 {\n SymbolProvider,\n useSymbolContext,\n} from \"../../../providers/symbolProvider\";\nimport { commifyOptional } from \"@orderly.network/utils\";\n\nexport const useLiquidationColumn = (props: {}) => {\n const {} = props;\n\n const column = useMemo(\n () =>\n [\n // Time\n {\n title: \"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: \"Liquidation id\",\n dataIndex: \"liquidation_id\",\n width: 202,\n render: (value) => <Text>{value}</Text>,\n },\n // net pnl\n {\n title: \"Ins. fund transfer\",\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: \"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\">{item.symbol}</Text.formatted>\n ))}\n </Flex>\n ),\n },\n // Price (USDC)\n {\n title: \"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: \"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: \"Liquidation fee\",\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 value={item.abs_liquidation_fee} type=\"quote\" />\n ))}\n </Flex>\n );\n },\n },\n ] as Column<API.Liquidation>[],\n []\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 (\n <Text>\n {commifyOptional(props.value)}\n </Text>\n );\n};\n","import { FC } from \"react\";\nimport { cn, Divider, 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 { SymbolProvider } from \"../../../providers/symbolProvider\";\nimport { commifyOptional } from \"@orderly.network/utils\";\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 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 Liquidation id:\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 Ins. Fund Transfer:\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 React from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { commifyOptional } from \"@orderly.network/utils\";\n\nexport const Price: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n Price{<Text intensity={20}>{\" (USDC)\"}</Text>}\n </Text>\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 return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n 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 return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n Liquidation fee\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\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 \n const dateRange = dateRangeMap[diffDays];\n if (\n dateRange &&\n areDatesEqual(dateRange.from, newDateRange.from) &&\n areDatesEqual(dateRange.to, newDateRange.to)\n ) {\n setFilterDays(diffDays as any);\n } else {\n setFilterDays(null);\n }\n }\n }\n };\n\n const { isMobile } = useScreen();\n\n const filterItems = useMemo((): any[] => {\n const dateRangeFilter = {\n type: \"range\",\n name: \"dateRange\",\n value: dateRange,\n fromDate: offsetStartOfDay(subDays(new Date(), 89)),\n toDate: offsetEndOfDay(new Date()),\n };\n\n if (isMobile) {\n return [dateRangeFilter];\n }\n return [dateRangeFilter];\n }, [dateRange]);\n\n return {\n filterItems,\n onFilter,\n dateRange,\n filterDays,\n updateFilterDays,\n };\n};\n\nconst generateKeyFun =\n (args: {\n symbol?: string;\n start_t?: number;\n end_t?: number;\n page?: number;\n size?: number;\n }) =>\n (pageIndex: number, previousPageData: any): string | null => {\n // reached the end\n if (previousPageData && !previousPageData.rows?.length) return null;\n\n const { symbol, size = 10, page, end_t, start_t } = args;\n\n const search = new URLSearchParams([\n [\"size\", size.toString()],\n [\"page\", `${pageIndex + 1}`],\n ]);\n\n if (page) {\n search.set(\"page\", `${page}`);\n }\n\n if (symbol) {\n search.set(`symbol`, symbol);\n }\n\n if (end_t) {\n search.set(`end_t`, `${end_t}`);\n }\n\n if (start_t) {\n search.set(`start_t`, `${start_t}`);\n }\n\n return `/v1/liquidations?${search.toString()}`;\n };\n","import { useLiquidationScript } from \"./liquidation.script\";\nimport { Liquidation, MobileLiquidation } from \"./liquidation.ui\";\n\nexport type LiquidationProps = {\n symbol?: string;\n enableLoadMore?: boolean;\n}\n\nexport const LiquidationWidget = (props: LiquidationProps) => {\n const state = useLiquidationScript(props);\n return (<Liquidation {...state} />);\n};\n\nexport const MobileLiquidationWidget = (props: LiquidationProps & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }) => {\n\n const { classNames, ...rest} = props;\n const state = useLiquidationScript(rest);\n return (<MobileLiquidation classNames={classNames} {...state} />);\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/positions/desktop/closeButton.tsx","../src/components/positions/desktop/positionRowContext.tsx","../src/providers/symbolProvider.tsx","../src/components/positions/positions.ui.tsx","../src/components/positions/desktop/useColumn.tsx","../src/components/positions/desktop/listElement.tsx","../src/components/positions/desktop/priceInput.tsx","../src/components/positions/desktop/quantityInput.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/components.tsx","../src/components/positions/desktop/unrealPnLHover.tsx","../src/components/positions/desktop/numeralWithCtx.tsx","../src/components/positions/mobile/positionCell/positionCell.ui.tsx","../src/components/positions/mobile/positionCell/items.tsx","../src/components/positions/mobile/limitCloseBtn/limitCloseBtn.ui.tsx","../src/components/positions/mobile/limitCloseBtn/limitCloseBtn.script.tsx","../src/components/positions/mobile/limitCloseBtn/limitCloseBtn.widget.tsx","../src/components/positions/mobile/marketCloseBtn/marketCloseBtn.ui.tsx","../src/components/positions/mobile/marketCloseBtn/marketCloseBtn.script.tsx","../src/components/positions/mobile/marketCloseBtn/marketCloseBtn.widget.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.ui.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.script.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.widget.tsx","../src/components/positions/mobile/positionCell/positionCell.script.tsx","../src/components/positions/mobile/positionCell/positionCell.widget.tsx","../src/components/positions/usePositionsBuilder.script.ts","../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","Button","toast","Text","CloseIcon","Flex","Divider","Badge","SimpleDialog","ThrottledButton","OrderSide","OrderType","createContext","useContext","useEffect","useMemo","useState","useOrderEntry_deprecated","useSymbolsInfo","jsx","PositionsRowContext","usePositionsRowContext","PositionsRowProvider","props","quantity","setQuantity","price","setPrice","side","errors","setErrors","type","setType","config","symbol","curSymbolInfo","quoteDp","baseDp","baseTick","helper","onSubmit","submitting","updateOrderType","closeOrderData","position","data","onUpdateQuantity","value","newValues","onUpdatePrice","order","postOrder","error","commify","commifyOptional","Decimal","SymbolContext","useSymbolContext","SymbolProvider","symbolInfo","useLocalStorage","Fragment","jsxs","CloseButton","open","setOpen","base","quote","orderConfirm","onConfirm","res","onClose","disabled","e","quantityMsg","priceMsg","MarketCloseConfirm","LimitConfirmDialog","ConfirmHeader","hideCloseIcon","ConfirmFooter","onCancel","OrderDetail","total","ListView","Box","cn","HoverCard","Tooltip","CaretDownIcon","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuRoot","DropdownMenuTrigger","Input","inputFormatter","PriceInput","updatePriceChange","hasFocus","setHasFocus","vent","PopoverRoot","PopoverContent","PopoverTrigger","Slider","utils","QuantityInput","sliderValue","setSliderValue","handleClick","event","resetQuantity","percent","onBlur","formatQty","values","Buttons","item","index","renderQuantity","record","renderQuantityInput","renderPriceInput","SharePnLDialogId","modal","ShareIcon","ShareButton","showModal","entity","useReferralInfo","useSymbolLeverage","useShareButtonScript","sharePnLConfig","modalId","iconSize","isPositionHistory","getFirstRefCode","refCode","leverage","ShareButtonWidget","state","AlgoOrderType","PositionTPSLPopover","EditIcon","TPSLButton","tpslOrder","TPSLEditIcon","TriggerPrice","stopLossPrice","takeProfitPrice","TPSLTriggerPrice","TriggerPriceItem","qty","entryPrice","orderSide","orderType","pnl","direction","msgs","child","children","content","showIcon","UnrealizedPnLPopoverCard","unPnlPriceBasis","setUnPnlPriceBasic","UnPnlPriceBasisCheckBox","onValueChange","RadioButton","sel","label","onCheckChange","SelIcon","UnselIcon","NumeralWithCtx","tick","rest","useColumn","pnlNotionalDecimalPrecision","r1","r2","a","b","_","Grid","Statistic","SharePnLBottomSheetId","SymbolToken","isBuy","UnrealPnL","Qty","Margin","Notional","AvgOpen","MarkPrice","LiqPrice","liqPrice","TPSLPrice","SimpleSheet","LimitCloseBtn","sheetOpen","setSheetOpen","dialogOpen","setDialogOpen","quote_dp","onCloseDialog","slider","useMarkPricesStream","useRef","useLimitCloseBtnScript","updateQuantity","prices","curMarkPrice","base_dp","LimitCloseBtnWidget","MarketCloseBtn","useMarketCloseBtnScript","MarketCloseBtnWidget","TpSLBtn","PositionTPSLSheet","useTpSLBtnScript","TpSLBtnWidget","PositionCell","className","Header","Body","usePositionCellScript","PositionCellWidget","AuthGuardDataTable","Positions","pagination","column","MobilePositions","usePositionStream","useDataTap","usePagination","usePositionsBuilder","calcMode","includedPendingOrder","onSymbolChange","setPage","info","isLoading","PositionsWidget","MobilePositionsWidget","DataFilter","capitalizeFirstLetter","usePositionHistoryColumn","SymbolInfo","Quantity","NetPnL","avgOpen","avgClose","tags","list","netPnl","text","useAccount","usePrivateQuery","AccountStatusEnum","useScreen","differenceInDays","subDays","setHours","offsetStartOfDay","date","newDate","offsetEndOfDay","formatDatePickerRange","option","areDatesEqual","date1","date2","usePositionHistoryScript","netPnL","status","dateRange","filterDays","updateFilterDays","filterItems","onFilter","useFilter","filterData","sideFilter","statusFilter","time","dateFilter","symbolFilter","setStatus","setSide","defaultRange","setFilterDays","setDateRange","days","filter","newDateRange","diffDays","isMobile","dateRangeFilter","PositionHistoryType","showAlert","ClosedQty","closedQty","MaxClosedQty","maxClosedQty","AvgClosed","OpenTime","ClosedTime","PositionHistoryCell","usePositionHistoryCellScript","PositionHistoryCellWidget","PositionHistory","MobilePositionHistory","PositionHistoryWidget","MobilePositionHistoryWidget","classNames","useLiquidationColumn","FormattedText","abs_liquidation_fee","Price","LiquidationFee","LiquidationCell","Cell","useLiquidationCellScript","LiquidationCellWidget","Liquidation","MobileLiquidation","usePrivateInfiniteQuery","useLiquidationScript","enableLoadMore","page","pageSize","parsePagination","meta","loadMore","useLiquidation","ordersResponse","generateKeyFun","args","pageIndex","previousPageData","size","end_t","start_t","search","LiquidationWidget","MobileLiquidationWidget","MarketCloseConfirmID"],"mappings":"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","sourcesContent":["import { registerSimpleDialog } from \"@orderly.network/ui\";\nimport { MarketCloseConfirm } from \"./components/positions/desktop/closeButton\";\n\nexport {\n PositionsWidget,\n MobilePositionsWidget,\n} from \"./components/positions/positions.widget\";\n\nexport type { PositionsProps } from \"./types/types\";\n\nexport const MarketCloseConfirmID = \"MarketCloseConfirmID\";\nregisterSimpleDialog(MarketCloseConfirmID, MarketCloseConfirm, {\n size: \"md\",\n closable: false,\n});\n\n\nexport * from \"./components/positionHistory\";\nexport * from \"./components/liquidation\";","import {\n Button,\n Popover,\n toast,\n Text,\n CloseIcon,\n Flex,\n Box,\n Divider,\n cn,\n NumeralProps,\n Badge,\n SimpleDialog,\n ThrottledButton,\n} from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\n// import { useSymbolContext } from \"../providers/symbolProvider\";\nimport { FC, useMemo, useState } from \"react\";\nimport { OrderEntity, OrderSide, OrderType } from \"@orderly.network/types\";\nimport { commify, commifyOptional, Decimal } from \"@orderly.network/utils\";\nimport { TokenIcon } from \"@orderly.network/ui\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\n\nexport const CloseButton = () => {\n const [open, setOpen] = useState(false);\n const {\n onSubmit,\n price,\n quantity,\n closeOrderData,\n type,\n submitting,\n quoteDp,\n errors,\n } = usePositionsRowContext();\n\n const { base, quote } = useSymbolContext();\n\n const [orderConfirm ] = useLocalStorage(\"orderly_order_confirm\", true);\n \n const onConfirm = () => {\n return onSubmit().then(\n (res) => {\n setOpen(false);\n },\n (error: any) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n }\n ).catch((error) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n });\n };\n\n const onClose = () => {\n setOpen(false);\n };\n\n const disabled = useMemo(() => {\n if (type === OrderType.MARKET) {\n if (!quantity) {\n return true;\n }\n return false;\n }\n\n return !price || !quantity;\n }, [price, quantity, type]);\n\n return (\n <>\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"secondary\"\n disabled={disabled || submitting}\n loading={submitting}\n onClick={(e) => {\n e.stopPropagation();\n const quantityMsg = errors?.order_quantity?.message;\n const priceMsg = errors?.order_price?.message;\n if (quantityMsg || priceMsg) {\n toast.error(quantityMsg ?? priceMsg);\n return;\n }\n if (!orderConfirm) {\n onSubmit();\n return;\n }\n setOpen(true);\n }}\n >\n Close\n </Button>\n <SimpleDialog open={open} onOpenChange={setOpen} size=\"sm\">\n {type === OrderType.MARKET ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n onClose={onClose}\n onConfirm={onConfirm}\n submitting={submitting}\n classNames={{\n root: \"oui-items-start\",\n }}\n hideCloseIcon\n />\n ) : (\n <LimitConfirmDialog\n base={base}\n quantity={quantity}\n price={price}\n onClose={onClose}\n onConfirm={onConfirm}\n submitting={submitting}\n quoteDp={quoteDp}\n order={closeOrderData}\n hideCloseIcon\n />\n )}\n </SimpleDialog>\n </>\n );\n};\n\nexport const ConfirmHeader: FC<{\n onClose?: () => void;\n title: string;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { hideCloseIcon = false } = props;\n return (\n <div className=\"oui-pb-3 oui-border-b oui-border-line-4 oui-relative oui-w-full\">\n <Text size={\"base\"}>{props.title}</Text>\n {!hideCloseIcon && (\n <button\n onClick={props.onClose}\n className=\"oui-absolute oui-right-0 oui-top-0 oui-text-base-contrast-54 hover:oui-text-base-contrast-80 oui-p-2\"\n >\n <CloseIcon size={18} color=\"white\" />\n </button>\n )}\n </div>\n );\n};\n\nexport const ConfirmFooter: FC<{\n onConfirm?: () => Promise<any>;\n onCancel?: () => void;\n submitting?: boolean;\n}> = ({ onCancel, onConfirm, submitting }) => {\n return (\n <Flex\n id=\"oui-positions-confirm-footer\"\n gap={2}\n width={\"100%\"}\n className=\"oui-mt-3 oui-pb-1\"\n >\n <Button\n id=\"oui-positions-confirm-footer-cancel-button\"\n color={\"secondary\"}\n fullWidth\n onClick={onCancel}\n size=\"md\"\n >\n Cancel\n </Button>\n <ThrottledButton\n id=\"oui-positions-confirm-footer-confirm-button\"\n onClick={onConfirm}\n fullWidth\n loading={submitting}\n size=\"md\"\n >\n 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\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>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>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>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 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=\"Market Close\"\n hideCloseIcon={props.hideCloseIcon}\n />\n <Text intensity={54} size=\"sm\" className=\"oui-my-5\">\n {`You agree closing ${commifyOptional(props.quantity)} ${\n props.base\n } position at market price.`}\n </Text>\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={async () => {\n await props.onConfirm?.();\n onCancel();\n }}\n submitting={props.submitting}\n />\n </Flex>\n );\n};\n\nexport const LimitConfirmDialog: FC<{\n base: string;\n quantity: string;\n price: string;\n onClose?: () => void;\n onConfirm: () => Promise<any>;\n order: OrderEntity;\n submitting: boolean;\n quoteDp?: number;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { order, quoteDp, quantity, price, submitting } = props;\n\n const { side } = order;\n const onCancel = () => {\n props.onClose?.();\n };\n return (\n <>\n <ConfirmHeader\n onClose={onCancel}\n title=\"Limit Close\"\n hideCloseIcon={props.hideCloseIcon}\n />\n <Text intensity={54} size=\"sm\" className=\"oui-mt-5\">\n {`You agree closing ${commify(props.quantity)} ${\n props.base\n } position at limit price.`}\n </Text>\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 Limit\n </Badge>\n <Badge\n color={side === OrderSide.BUY ? \"success\" : \"danger\"}\n size=\"xs\"\n >\n {side === OrderSide.BUY ? \"Buy\" : \"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 { API, OrderEntity, OrderSide, OrderType } from \"@orderly.network/types\";\nimport {\n FC,\n PropsWithChildren,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\n\nimport {\n useOrderEntry_deprecated,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { toast } from \"@orderly.network/ui\";\n\nexport interface PositionsRowContextState {\n quantity: string;\n price: string;\n type: OrderType;\n side: OrderSide;\n position: API.PositionExt | API.PositionTPSLExt;\n updateQuantity: (value: string) => void;\n updatePriceChange: (value: string) => void;\n\n updateOrderType: (value: OrderType, price?: string) => void;\n\n closeOrderData: any;\n\n onSubmit: () => Promise<any>;\n submitting: boolean;\n tpslOrder?: API.AlgoOrder;\n quoteDp?: number;\n baseDp?: number;\n baseTick?: number;\n errors: any | undefined;\n}\n\nexport const PositionsRowContext = createContext(\n {} as PositionsRowContextState\n);\n\nexport const usePositionsRowContext = () => {\n return useContext(PositionsRowContext);\n};\n\nexport const PositionsRowProvider: FC<\n PropsWithChildren<{ position: API.PositionExt | API.PositionTPSLExt }>\n> = (props) => {\n const [quantity, setQuantity] = useState<string>(\n Math.abs(props.position.position_qty).toString()\n );\n\n useEffect(() => {\n setQuantity(Math.abs(props.position.position_qty).toString());\n }, [props.position.position_qty]);\n\n const [price, setPrice] = useState<string>(\"\");\n // const [side, setSide] = useState<OrderSide>(\n // props.position.position_qty > 0 ? OrderSide.SELL : OrderSide.BUY\n // );\n\n const side = props.position.position_qty > 0 ? OrderSide.SELL : OrderSide.BUY;\n\n const [errors, setErrors] = useState<any | undefined>(undefined);\n\n const [type, setType] = useState<OrderType>(OrderType.MARKET);\n\n const config = useSymbolsInfo();\n const symbol = props.position.symbol;\n const curSymbolInfo = config?.[symbol];\n const quoteDp = curSymbolInfo(\"quote_dp\");\n const baseDp = curSymbolInfo(\"base_dp\");\n const baseTick = curSymbolInfo(\"base_tick\");\n\n const { helper, onSubmit, submitting } = useOrderEntry_deprecated(\n props.position?.symbol!,\n side,\n true\n );\n\n const updateOrderType = (type: OrderType, price?: string) => {\n setType(type);\n if (type === OrderType.LIMIT) {\n if (!price) {\n throw new Error(\"price is required\");\n }\n setPrice(price);\n } else {\n setPrice(\"\");\n }\n };\n\n const closeOrderData = useMemo(() => {\n const { position } = props;\n\n if (!position) return null;\n\n const data: any = {\n // order_price: undefined,\n order_quantity: quantity,\n symbol: props.position.symbol,\n order_type: type,\n side,\n reduce_only: true,\n };\n\n if (type === OrderType.LIMIT) {\n data.order_price = price;\n }\n\n return data;\n }, [props.position, price, type, quantity]);\n\n const onUpdateQuantity = (value: string) => {\n const newValues = helper.calculate(\n {},\n \"order_quantity\",\n value\n ) as OrderEntity;\n setQuantity(newValues[\"order_quantity\"] as string);\n };\n\n const onUpdatePrice = (value: string) => {\n const newValues = helper.calculate({}, \"order_price\", value) as OrderEntity;\n setPrice(newValues[\"order_price\"] as string);\n };\n\n useEffect(() => {\n let order = closeOrderData;\n helper.validator(order).then((value: any) => {\n setErrors(value);\n });\n }, [closeOrderData]);\n\n const postOrder = () => {\n return onSubmit(closeOrderData).catch((error) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n return Promise.resolve();\n });\n };\n\n return (\n <PositionsRowContext.Provider\n value={{\n quantity,\n price,\n type,\n side,\n position: props.position,\n updatePriceChange: onUpdatePrice,\n updateQuantity: onUpdateQuantity,\n updateOrderType,\n tpslOrder: (props.position as unknown as API.PositionTPSLExt)\n .algo_order,\n onSubmit: postOrder,\n submitting,\n closeOrderData,\n quoteDp,\n baseDp,\n baseTick,\n errors,\n }}\n >\n {props.children}\n </PositionsRowContext.Provider>\n );\n};\n","import { FC, PropsWithChildren, createContext, useContext } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\n\nexport interface SymbolContextState {\n base_dp: number;\n quote_dp: number;\n base_tick: number;\n quote_tick: number;\n base: string;\n quote: string;\n symbol: string;\n origin: API.SymbolExt;\n quote_min: number;\n quote_max: number;\n}\n\nexport const SymbolContext = createContext({} as SymbolContextState);\n\nexport const useSymbolContext = () => {\n return useContext(SymbolContext);\n};\n\ninterface FormatterProviderProps {\n symbol: string;\n}\n\nexport const SymbolProvider: FC<PropsWithChildren<FormatterProviderProps>> = (\n props\n) => {\n const symbolInfo = useSymbolsInfo()[props.symbol];\n\n return (\n <SymbolContext.Provider\n value={{\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n base_tick: symbolInfo(\"base_tick\"),\n quote_tick: symbolInfo(\"quote_tick\"),\n base: symbolInfo(\"base\"),\n quote: symbolInfo(\"quote\"),\n symbol: props.symbol,\n origin: symbolInfo(),\n quote_max: symbolInfo(\"quote_max\"),\n quote_min: symbolInfo(\"quote_min\")\n }}\n >\n {props.children}\n </SymbolContext.Provider>\n );\n};\n","import { ListView } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\nimport { PositionsBuilderState } from \"./usePositionsBuilder.script\";\nimport { SymbolProvider } from \"../../providers/symbolProvider\";\nimport { PositionsProps } from \"../../types/types\";\nimport { useColumn } from \"./desktop/useColumn\";\nimport { PositionsRowProvider } from \"./desktop/positionRowContext\";\nimport { PositionCellWidget } from \"./mobile/positionCell\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\n\nexport const Positions = (props: PositionsBuilderState) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig, pagination } = props;\n const column = useColumn({\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange: props.onSymbolChange,\n });\n\n // console.log(\"xxxx positions\", props);\n\n return (\n <AuthGuardDataTable<API.PositionTPSLExt>\n loading={props.isLoading}\n id=\"oui-desktop-positions-content\"\n columns={column}\n bordered\n dataSource={props.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 = (\n props: PositionsBuilderState & PositionsProps\n) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig } = props;\n return (\n <ListView\n className=\"oui-w-full oui-hide-scrollbar oui-overflow-y-hidden oui-space-y-0\"\n contentClassName=\"!oui-space-y-1\"\n dataSource={props.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={props.onSymbolChange}\n />\n </PositionsRowProvider>\n </SymbolProvider>\n )}\n />\n );\n};\n","import {\n Box,\n cn,\n Divider,\n Flex,\n HoverCard,\n Column,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { useMemo } from \"react\";\nimport {\n renderPriceInput,\n renderQuantity,\n renderQuantityInput,\n} from \"./listElement\";\nimport { CloseButton } from \"./closeButton\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { SharePnLOptions, SharePnLDialogId } from \"@orderly.network/ui-share\";\nimport { ShareButtonWidget } from \"./shareButton\";\nimport { API } from \"@orderly.network/types\";\nimport { TriggerPrice } from \"./triggerPrice\";\nimport { TPSLButton } from \"./components\";\nimport { UnrealizedPnLPopoverCard } from \"./unrealPnLHover\";\nimport { NumeralWithCtx } from \"./numeralWithCtx\";\n\nexport const useColumn = (props: {\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLOptions;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig } = props;\n const column = useMemo(\n () =>\n [\n {\n title: \"Symbol\",\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 140,\n onSort: (r1, r2) => {\n return r1.symbol.localeCompare(r2.symbol);\n // if (sortOrder === \"asc\") {\n // return r1.symbol.localeCompare(r2.symbol);\n // }\n // return r2.symbol.localeCompare(r1.symbol);\n },\n render: (value: string, record) => (\n <Flex gap={2}>\n <Box\n width={4}\n height={20}\n className={cn(\n \"oui-rounded-[1px]\",\n record.position_qty > 0\n ? \"oui-bg-trade-profit\"\n : \"oui-bg-trade-loss\"\n )}\n />\n\n <Text.formatted\n // rule={\"symbol\"}\n formatString=\"base-type\"\n className=\"oui-cursor-pointer\"\n onClick={(e) => {\n props.onSymbolChange?.({ symbol: value } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${value.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n </Flex>\n ),\n },\n {\n title: \"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: \"Avg. open\",\n className: \"oui-h-[48px]\",\n width: 120,\n onSort: true,\n dataIndex: \"average_open_price\",\n render: (value: string, record: any) => {\n // const ctx = usePositionsRowContext();\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: \"Mark price\",\n dataIndex: \"mark_price\",\n width: 120,\n onSort: true,\n className: \"oui-h-[48px]\",\n\n render: (value: string, record: any) => {\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-text-2xs oui-text-base-contrast-54 oui-p-3 oui-bg-base-8\"\n content={\n \"Estimated price at which your position will be liquidated. Prices are estimated and depend on multiple factors across all positions.\"\n }\n >\n <Text>Liq. price</Text>\n </Tooltip>\n ),\n width: 100,\n onSort: true,\n // hint: \"Estimated price at which your position will be liquidated. Prices are estimated and depend on multiple factors across all positions.\",\n dataIndex: \"est_liq_price\",\n render: (value: string, record: any) => {\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>Unreal. PnL</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: any) => {\n return (\n <Flex gap={2}>\n <Flex>\n <Text.numeral\n dp={props.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={props.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={props.sharePnLConfig}\n modalId={SharePnLDialogId}\n />\n </Flex>\n );\n },\n },\n {\n title: \"TP/SL\",\n dataIndex: \"__\",\n width: 150,\n render: (_: string, record) => (\n <TriggerPrice\n stopLossPrice={record.sl_trigger_price}\n takeProfitPrice={record.tp_trigger_price}\n />\n ),\n },\n\n {\n title: \"Notional\",\n dataIndex: \"notional\",\n className: \"oui-h-[48px]\",\n width: 100,\n onSort: true,\n render: (value: string) => (\n <Text.numeral dp={pnlNotionalDecimalPrecision}>\n {value}\n </Text.numeral>\n ),\n },\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-text-2xs oui-text-base-contrast-54 oui-p-3 oui-bg-base-8\"\n content={\n <Flex\n direction={\"column\"}\n gap={3}\n className=\"oui-text-base-contrast-54 oui-bg-base-8 oui-rounded-sm\"\n >\n <span>The minimum equity to keep your position. </span>\n <Divider className=\"oui-w-full\" />\n <span>Margin = Position size * Mark price * MMR</span>\n </Flex>\n }\n >\n <Text>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 // hint: (\n // <Flex\n // direction={\"column\"}\n // gap={3}\n // className=\"oui-text-base-contrast-54 oui-bg-base-8 oui-rounded-sm\"\n // >\n // <span>The minimum equity to keep your position. </span>\n // <Divider className=\"oui-w-full\" />\n // <span>Margin = Position size * Mark price * MMR</span>\n // </Flex>\n // ),\n },\n {\n title: \"Qty.\",\n dataIndex: \"close_qty\",\n width: 100,\n fixed: \"right\",\n render: renderQuantityInput,\n },\n {\n title: \"Price\",\n dataIndex: \"close_price\",\n width: 100,\n fixed: \"right\",\n render: renderPriceInput,\n // render: (value: string) => <PriceInput />,\n },\n {\n title: \"\",\n dataIndex: \"close_position\",\n align: \"right\",\n width: 160,\n fixed: \"right\",\n render: (value: string) => {\n return (\n <Flex gapX={2} justify={\"end\"}>\n <CloseButton />\n <TPSLButton />\n </Flex>\n );\n },\n },\n ] as Column<API.PositionTPSLExt>[],\n [pnlNotionalDecimalPrecision, sharePnLConfig]\n );\n\n return column;\n};\n","import { Button, Text } from \"@orderly.network/ui\";\nimport { NumeralWithCtx } from \"./numeralWithCtx\";\nimport { PriceInput } from \"./priceInput\";\nimport { QuantityInput } from \"./quantityInput\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\n\nexport const renderQuantity = (value: number, record: any) => {\n\n const symbolInfo = useSymbolContext();\n return (\n <Text.numeral dp={symbolInfo.base_dp} rm={Decimal.ROUND_DOWN} padding={false} coloring>\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 {\n CaretDownIcon,\n cn,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Input,\n inputFormatter,\n} from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { useState } from \"react\";\nimport { OrderType } from \"@orderly.network/types\";\n\nexport const PriceInput = () => {\n const { type, quoteDp, price, updatePriceChange, updateOrderType, position } =\n usePositionsRowContext();\n const [hasFocus, setHasFocus] = useState(false);\n\n return (\n <DropdownMenuRoot>\n <Input\n size=\"sm\"\n value={type === OrderType.LIMIT ? price : \"Market\"}\n onValueChange={(e) => updatePriceChange(e)}\n formatters={[\n inputFormatter.numberFormatter,\n ...(quoteDp ? [inputFormatter.dpFormatter(quoteDp)] : []),\n ]}\n onFocus={(e) => {\n if (type === OrderType.MARKET) {\n updateOrderType(OrderType.LIMIT, `${position.mark_price}`);\n }\n setHasFocus(true);\n }}\n onBlur={(e) => {\n setTimeout(() => {\n setHasFocus(false);\n }, 100);\n\n }}\n suffix={\n <DropdownMenuTrigger asChild>\n <button className=\"oui-px-1 oui-h-full\">\n <CaretDownIcon size={12} color=\"white\" />\n </button>\n </DropdownMenuTrigger>\n }\n classNames={{\n root: cn(\"oui-outline-line-12 focus-within:oui-outline-primary-light\")\n }}\n />\n <DropdownMenuContent\n align=\"end\"\n className=\"oui-w-[96px] oui-min-w-[96px]\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DropdownMenuGroup>\n <DropdownMenuItem\n size=\"xs\"\n onSelect={(vent) => {\n updateOrderType(OrderType.MARKET);\n }}\n >\n <span>Market</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenuRoot>\n );\n};\n","import {\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 { useEffect, useState } from \"react\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { utils } from \"@orderly.network/hooks\";\n\nexport const QuantityInput = (props: { value: number }) => {\n // const [quantity, setQuantity] = useState(`${props.value}`);\n const [open, setOpen] = useState(false);\n const [sliderValue, setSliderValue] = useState<number>(100);\n const {\n baseDp,\n quoteDp,\n updateQuantity: setQuantity,\n quantity,\n type,\n errors,\n baseTick,\n } = usePositionsRowContext();\n\n useEffect(() => {\n // when click the outside of the popover, close the popover\n const handleClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n if (!target.closest(\"[data-popover-root]\")) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"click\", handleClick);\n\n return () => {\n document.removeEventListener(\"click\", handleClick);\n };\n }, []);\n\n const resetQuantity = (percent: number) => {\n onBlur(`${props.value * (percent / 100)}`);\n };\n\n const onBlur = (value: string) => {\n if (baseTick && baseTick > 0) {\n const formatQty = utils.formatNumber(value, baseTick) ?? value;\n setQuantity(formatQty);\n }\n };\n\n return (\n <PopoverRoot>\n <PopoverTrigger>\n <Input\n size=\"sm\"\n onFocus={() => {\n setOpen(true);\n }}\n classNames={{\n root: \"oui-outline-line-12 \"\n }}\n formatters={[\n inputFormatter.numberFormatter,\n ...(baseDp ? [inputFormatter.dpFormatter(baseDp)] : []),\n ]}\n // tooltip={errors?.order_quantity?.message}\n // color={errors?.order_quantity?.message ? \"danger\" : undefined}\n value={quantity}\n onBlur={(event) => onBlur(event.target.value)}\n onValueChange={(e) => {\n setQuantity(e);\n // if (type === OrderType.LIMIT) {\n if (e == '0' || e == \"\") {\n setSliderValue(0);\n return;\n }\n const value = new Decimal(e)\n .div(props.value)\n .mul(100)\n .abs()\n .toFixed(0, Decimal.ROUND_DOWN);\n // console.log(\"xxxxxx value\", value);\n\n setSliderValue(Math.min(100, Number(value)));\n // }\n }}\n />\n </PopoverTrigger>\n <PopoverContent\n className=\"oui-w-[360px] oui-rounded-xl\"\n align=\"start\"\n side=\"bottom\"\n onOpenAutoFocus={(event) => {\n event.preventDefault();\n }}\n >\n <Flex p={1} gap={2} width={\"100%\"} itemAlign={\"start\"}>\n <Text size=\"xs\" intensity={98} className=\"oui-min-w-[30px]\">\n {`${sliderValue}%`}\n </Text>\n <Flex direction={\"column\"} width={\"100%\"} gap={2}>\n <Slider\n markCount={4}\n value={[sliderValue]}\n onValueChange={(e) => {\n const values = Array.from(e.values());\n setSliderValue(values[0]);\n resetQuantity(values[0]);\n }}\n />\n <Buttons\n onClick={(value) => {\n setSliderValue(value * 100);\n resetQuantity(value * 100);\n }}\n />\n </Flex>\n </Flex>\n </PopoverContent>\n </PopoverRoot>\n );\n};\n\nconst Buttons = (props: { onClick: (value: number) => void }) => {\n const 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: \"Max\",\n value: 1,\n },\n ];\n\n return (\n <Flex gap={2} width={\"100%\"}>\n {list.map((item, index) => {\n return (\n <Button\n key={index}\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n onClick={(e) => {\n e.stopPropagation();\n props.onClick(item.value);\n }}\n className=\"oui-w-1/5\"\n >\n {item.label}\n </Button>\n );\n })}\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { modal, ShareIcon } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { ShareButtonState } from \"./shareButton.script\";\n\nexport const ShareButton: FC<ShareButtonState> = (props) => {\n if (props.sharePnLConfig == null) return <></>;\n\n const { position } = props;\n\n const showModal = () => {\n const entity = props.isPositionHistory\n ? {\n side: position.side,\n pnl: position.netPnL,\n openPrice: Math.abs(position.avg_open_price),\n closePrice: Math.abs(position.avg_close_price),\n openTime: position.open_timestamp,\n closeTime: position.close_timestamp,\n quantity: position.closed_position_qty,\n }\n : {\n side: position.position_qty > 0 ? \"LONG\" : \"SHORT\",\n pnl: position.unrealized_pnl,\n roi: new Decimal(position.unrealized_pnl_ROI * 100).toFixed(\n 2,\n Decimal.ROUND_DOWN\n ),\n openPrice: Math.abs(position.average_open_price),\n markPrice: position.mark_price,\n openTime: position.timestamp,\n quantity: position.position_qty,\n };\n\n modal.show(props.modalId, {\n pnl: {\n entity: {\n symbol: position.symbol,\n ...entity,\n },\n refCode: props.refCode,\n ...props.sharePnLConfig,\n leverage: props.isPositionHistory ? undefined : props.leverage,\n },\n });\n };\n return (\n <button\n type=\"button\"\n onClick={(e: any) => {\n e.stopPropagation();\n showModal();\n }}\n >\n <ShareIcon color=\"white\" opacity={0.54} size={props.iconSize ?? 16} />\n </button>\n );\n};\n","import { useMemo } from \"react\";\nimport { useReferralInfo, useSymbolLeverage } from \"@orderly.network/hooks\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport type UseShareButtonScriptOptions = {\n position: any;\n sharePnLConfig?: SharePnLConfig;\n modalId: string;\n iconSize?: number;\n isPositionHistory?: boolean;\n};\n\nexport const useShareButtonScript = (props: UseShareButtonScriptOptions) => {\n const { sharePnLConfig, position, modalId, iconSize, isPositionHistory } =\n props;\n const { getFirstRefCode } = useReferralInfo();\n const refCode = useMemo(() => {\n return getFirstRefCode()?.code;\n }, [getFirstRefCode]);\n const leverage = useSymbolLeverage(props.position.symbol);\n return {\n iconSize,\n position,\n refCode,\n leverage,\n sharePnLConfig,\n modalId,\n isPositionHistory,\n };\n};\n\nexport type ShareButtonState = ReturnType<typeof useShareButtonScript>;\n","import {\n useShareButtonScript,\n UseShareButtonScriptOptions,\n} from \"./shareButton.script\";\nimport { ShareButton } from \"./shareButton.ui\";\n\nexport type ShareButtonWidgetProps = UseShareButtonScriptOptions;\n\nexport const ShareButtonWidget = (props: ShareButtonWidgetProps) => {\n const state = useShareButtonScript(props);\n return <ShareButton {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { AlgoOrderType, API, OrderSide } from \"@orderly.network/types\";\nimport { useSymbolsInfo, utils } from \"@orderly.network/hooks\";\nimport { cn, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { TPSLEditIcon } from \"./components\";\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\n const pnl = useMemo(() => {\n const msgs = [];\n\n if (!props.tooltip || !order || !position) return;\n\n let quantity = order.quantity;\n\n if (quantity === 0) {\n if (order.child_orders[0].type === \"CLOSE_POSITION\") {\n quantity = position.position_qty;\n }\n }\n\n if (!!props.takeProfitPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"tp\"}\n qty={quantity}\n price={props.takeProfitPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.TAKE_PROFIT}\n symbolInfo={symbolInfo[order.symbol]()}\n />\n );\n }\n\n if (!!props.stopLossPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"sl\"}\n qty={quantity}\n price={props.stopLossPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.STOP_LOSS}\n symbolInfo={symbolInfo[order.symbol]()}\n />\n );\n }\n\n return <div>{msgs}</div>;\n }, [\n props.takeProfitPrice,\n props.stopLossPrice,\n position?.average_open_price,\n order?.side,\n order?.quantity,\n order?.algo_type,\n ]);\n\n const child = useMemo(() => {\n const children = [];\n\n if (!order?.symbol) return <span>-</span>;\n 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}>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}>SL - </Text>\n ) : (\n \"\"\n )\n }\n />\n );\n }\n\n if (children.length === 0) return <Text>-</Text>;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <Text key={\"split\"}>/</Text>);\n }\n\n return children;\n }, [props.takeProfitPrice, props.stopLossPrice, order?.symbol]);\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 { PositionTPSLPopover } from \"@orderly.network/ui-tpsl\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { EditIcon } from \"@orderly.network/ui\";\n\n// ------------ TP/SL Price input end------------\nexport const TPSLButton = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n label=\"TP/SL\"\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing={false}\n />\n );\n};\n\nexport const TPSLEditIcon = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing\n >\n <EditIcon\n opacity={1}\n className=\"oui-text-base-contrast-54 oui-cursor-pointer\"\n size={16}\n />\n </PositionTPSLPopover>\n );\n};\n","import { useLocalStorage } from \"@orderly.network/hooks\";\nimport { Divider, Flex, Text } from \"@orderly.network/ui\";\nimport { FC, useCallback } from \"react\";\n\nexport const UnrealizedPnLPopoverCard: FC<{}> = (props) => {\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\"\n );\n\n return (\n <Flex direction={\"column\"} gap={3} className=\"oui-text-base-contrast-54 oui-items-start\">\n <Text>\n Current unrealized profit or loss on your open positions across all\n widgets calculated using Mark Price.\n </Text>\n <Divider className=\"oui-w-full\" />\n <div className=\"oui-mb-0\">Unrealized PnL Price Basis</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 // \"markPrice\" | \"lastPrice\"\n return (\n <Flex gap={2}>\n <RadioButton\n sel={value === \"markPrice\"}\n label={\"Mark price\"}\n value={\"markPrice\"}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === \"lastPrice\"}\n label={\"Last price\"}\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 { NumeralProps, Text } from \"@orderly.network/ui\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\n\nexport type TickName = \"quote_dp\" | \"base_dp\";\n\nexport const NumeralWithCtx: FC<\n Omit<NumeralProps, \"precision\" | \"tick\"> & {\n tick?: TickName;\n }\n> = (props) => {\n const { tick = \"quote_dp\", ...rest } = props;\n const symbolInfo = useSymbolContext();\n\n if (!symbolInfo) {\n throw new Error(\"NumeralWithCtx must be used inside SymbolProvider\");\n }\n\n return <Text.numeral as=\"span\" {...rest} dp={symbolInfo[tick]} />;\n};\n","import { FC } from \"react\";\nimport { cn, Divider, Flex, Grid } from \"@orderly.network/ui\";\nimport { PositionCellState } from \"./positionCell.script\";\nimport {\n UnrealPnL,\n SymbolToken,\n Qty,\n Margin,\n Notional,\n AvgOpen,\n MarkPrice,\n LiqPrice,\n TPSLPrice,\n} from \"./items\";\nimport { LimitCloseBtnWidget } from \"../limitCloseBtn\";\nimport { MarketCloseBtnWidget } from \"../marketCloseBtn\";\nimport { TpSLBtnWidget } from \"../tpSLBtn\";\n\nexport const PositionCell: FC<\n PositionCellState & {\n className?: string;\n }\n> = (props) => {\n const { className, ...rest } = props;\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n p={2}\n r=\"xl\"\n itemAlign={\"start\"}\n className={cn(className, \"oui-bg-base-9\")}\n >\n <Header {...rest} />\n <Divider intensity={6} className=\"oui-w-full\" />\n <Body {...rest} />\n <TPSLPrice {...rest} />\n <Buttons {...rest} />\n </Flex>\n );\n};\n\nconst Header: FC<PositionCellState> = (props) => {\n return (\n <Flex justify={\"between\"} width={\"100%\"}>\n <SymbolToken {...props} />\n <UnrealPnL {...props} />\n </Flex>\n );\n};\n\nconst Body: FC<PositionCellState> = (props) => {\n return (\n <Grid cols={3} rows={2} gap={2} width={\"100%\"}>\n <Qty {...props} />\n <Margin {...props} />\n <Notional {...props} />\n <AvgOpen {...props} />\n <MarkPrice {...props} />\n <LiqPrice {...props} />\n </Grid>\n );\n};\n\nconst Buttons: FC<PositionCellState> = (props) => {\n return (\n <Grid width={\"100%\"} gap={2} cols={3} rows={1}>\n <TpSLBtnWidget state={props} />\n <LimitCloseBtnWidget state={props} />\n <MarketCloseBtnWidget state={props} />\n </Grid>\n );\n};\n","import { Badge, cn, Flex, Statistic, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { ShareButtonWidget } from \"../../desktop/shareButton\";\nimport { SharePnLBottomSheetId } from \"@orderly.network/ui-share\";\nimport { PositionCellState } from \"./positionCell.script\";\nimport { FC } from \"react\";\nimport { API } from \"@orderly.network/types\";\n\nexport const SymbolToken: FC<PositionCellState> = (props) => {\n const { item } = props;\n const isBuy = item.position_qty > 0;\n return (\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"2xs\"\n suffix={\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? \"Buy\" : \"Sell\"}\n </Badge>\n }\n showIcon\n onClick={() => {\n props.onSymbolChange?.({ symbol: item.symbol } as API.Symbol);\n }}\n >\n {item.symbol}\n </Text.formatted>\n );\n};\n\nexport const UnrealPnL: FC<PositionCellState> = (props) => {\n const { item } = props;\n\n return (\n <Flex gap={3}>\n <Flex direction={\"column\"} className=\"oui-text-2xs\" itemAlign={\"end\"}>\n <Text intensity={36}>\n Unreal. PnL{<Text intensity={20}>(USDC)</Text>}\n </Text>\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\n return (\n <Statistic\n label={\"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\n return (\n <Statistic\n label={<Text>Margin{<Text intensity={20}>(USDC)</Text>}</Text>}\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\n return (\n <Statistic\n align=\"end\"\n label={<Text>Notional{<Text intensity={20}>(USDC)</Text>}</Text>}\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\n return (\n <Statistic\n label={\"Avg. open\"}\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\n return (\n <Statistic\n label={\"Mark price\"}\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\n const liqPrice =\n item.est_liq_price && item.est_liq_price > 0 ? item.est_liq_price : \"-\";\n\n return (\n <Statistic\n label={\"Liq. price\"}\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\n if (item.tp_trigger_price == null && item.sl_trigger_price == null)\n return <></>;\n\n return (\n <Flex className=\"oui-text-2xs oui-text-base-contrast-36\">\n <Text>TP/SL: </Text>\n <Flex className=\"oui-gap-[2px]\">\n {item.tp_trigger_price && (\n <Text.numeral color=\"buy\">{item.tp_trigger_price}</Text.numeral>\n )}\n {item.sl_trigger_price && \"/\"}\n {item.sl_trigger_price && (\n <Text.numeral color=\"sell\">{item.sl_trigger_price}</Text.numeral>\n )}\n </Flex>\n </Flex>\n );\n};\n","import { FC, useState } from \"react\";\nimport {\n Badge,\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n SimpleDialog,\n SimpleSheet,\n Slider,\n Text,\n ThrottledButton,\n toast,\n} from \"@orderly.network/ui\";\nimport { LimitCloseBtnState } from \"./limitCloseBtn.script\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { LimitConfirmDialog } from \"../../desktop/closeButton\";\nimport { utils } from \"@orderly.network/hooks\";\n\nexport const LimitCloseBtn: FC<LimitCloseBtnState> = (props) => {\n const {\n item,\n sheetOpen,\n setSheetOpen,\n dialogOpen,\n setDialogOpen,\n updatePriceChange,\n base,\n quantity,\n price,\n onClose,\n onConfirm,\n submitting,\n quote_dp,\n closeOrderData,\n onCloseDialog,\n } = props;\n const isBuy = item.position_qty > 0;\n\n const onBlur = (value: string) => {\n if (props.baseTick && props.baseTick > 0) {\n const formatQty = utils.formatNumber(value, props.baseTick) ?? value;\n props.updateQuantity(formatQty);\n }\n };\n\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={() => {\n updatePriceChange(\"limit\");\n setSheetOpen(true);\n }}\n >\n Limit Close\n </Button>\n\n {sheetOpen && (\n <SimpleSheet\n title={\"Limit close\"}\n open={sheetOpen}\n onOpenChange={setSheetOpen}\n >\n <Flex\n direction={\"column\"}\n gap={3}\n width={\"100%\"}\n itemAlign={\"start\"}\n className=\"oui-text-sm\"\n >\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text.formatted rule={\"symbol\"} showIcon>\n {item.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n Limit\n </Badge>\n {isBuy && (\n <Badge color=\"success\" size=\"xs\">\n Buy\n </Badge>\n )}\n {!isBuy && (\n <Badge color=\"danger\" size=\"xs\">\n Sell\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider className=\"oui-w-full\" />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text intensity={54}>Last price</Text>\n <Text.numeral\n dp={(props.item as any)?.symbolInfo?.quote_dp}\n suffix={<Text intensity={36}>USDC</Text>}\n >\n {props.curMarkPrice}\n </Text.numeral>\n </Flex>\n <Flex width={\"100%\"} direction={\"column\"} gap={2}>\n <Input.tooltip\n prefix=\"Price\"\n suffix={props.quote}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.quote_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={props.errors?.order_price?.message}\n color={\n props.errors?.order_price?.message ? \"danger\" : undefined\n }\n value={props.price}\n onValueChange={(e) => props.updatePriceChange(e)}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-outline-line-12 oui-w-full\",\n props.errors?.order_price?.message\n ? \"oui-outline-danger\"\n : undefined\n ),\n }}\n />\n <Input\n prefix=\"Quantity\"\n suffix={props.base}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.base_dp),\n ]}\n // triggerClassName=\"oui-w-full\"\n // tooltip={props.errors?.order_quantity?.message}\n // color={\n // props.errors?.order_quantity?.message ? \"danger\" : undefined\n // }\n value={props.quantity}\n onBlur={(event) => onBlur(event.target.value)}\n onValueChange={(e) => {\n props.updateQuantity(e);\n const slider = new Decimal(e)\n .div(props.item.position_qty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n props.setSliderValue(slider);\n }}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-outline-line-12 oui-w-full\",\n // props.errors?.order_quantity?.message\n // ? \"oui-outline-danger\"\n // : undefined\n ),\n }}\n />\n <Slider\n markCount={4}\n value={[props.sliderValue]}\n color=\"primary\"\n onValueChange={(e) => {\n props.setSliderValue(e[0]);\n const qty = new Decimal(e[0])\n .div(100)\n .mul(props.item.position_qty)\n .toFixed(props.base_dp, Decimal.ROUND_DOWN);\n // props.updateQuantity(qty);\n onBlur(qty);\n }}\n />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text\n color=\"primary\"\n size=\"2xs\"\n >{`${props.sliderValue}%`}</Text>\n <Flex gap={1}>\n <Text size=\"2xs\" color=\"primary\">\n Max\n </Text>\n <Text.numeral intensity={54} size=\"2xs\">\n {Math.abs(props.item.position_qty)}\n </Text.numeral>\n </Flex>\n </Flex>\n </Flex>\n <Flex width={\"100%\"} gap={3} mt={2}>\n <Button\n fullWidth\n color=\"secondary\"\n onClick={(e) => {\n onClose();\n }}\n >\n Cancel\n </Button>\n <ThrottledButton\n fullWidth\n disabled={submitting}\n loading={submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n const errors = props.errors;\n\n const quantityMsg = errors?.order_quantity?.message;\n const priceMsg = errors?.order_price?.message;\n if (quantityMsg || priceMsg) {\n toast.error(quantityMsg ?? priceMsg);\n return;\n }\n if (!props.orderConfirm) {\n onConfirm();\n return;\n }\n setDialogOpen(true);\n }}\n // disabled={Object.keys(props.errors ?? {}).length > 0}\n >\n Confirm\n </ThrottledButton>\n </Flex>\n </Flex>\n </SimpleSheet>\n )}\n\n {dialogOpen && (\n <SimpleDialog open={dialogOpen} onOpenChange={setDialogOpen} size=\"xs\">\n <LimitConfirmDialog\n base={base}\n quantity={quantity}\n price={price}\n onClose={onCloseDialog}\n onConfirm={onConfirm}\n submitting={submitting}\n quoteDp={quote_dp}\n order={closeOrderData}\n hideCloseIcon\n />\n </SimpleDialog>\n )}\n </>\n );\n};\n","import { useLocalStorage, useMarkPricesStream } from \"@orderly.network/hooks\";\nimport { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useSymbolContext } from \"../../../../providers/symbolProvider\";\nimport { usePositionsRowContext } from \"../../desktop/positionRowContext\";\nimport { toast } from \"@orderly.network/ui\";\nimport { OrderType } from \"@orderly.network/types\";\n\nexport const useLimitCloseBtnScript = (props: { state: PositionCellState }) => {\n const { state } = props;\n const [sheetOpen, setSheetOpen] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const {\n onSubmit,\n price,\n quantity,\n closeOrderData,\n submitting,\n type,\n updatePriceChange,\n updateOrderType,\n updateQuantity,\n errors,\n baseTick,\n } = usePositionsRowContext();\n const setPrice = useRef(false);\n\n const [sliderValue, setSliderValue] = useState(100);\n\n\n const [orderConfirm ] = useLocalStorage(\"orderly_order_confirm\", true);\n\n\n const onConfirm = () => {\n return onSubmit().then(\n (res) => {\n setSheetOpen(false);\n setDialogOpen(false);\n },\n (error: any) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n }\n );\n };\n\n const onClose = () => {\n setSheetOpen(false);\n };\n const onCloseDialog = () => {\n setDialogOpen(false);\n };\n const prices = useMarkPricesStream();\n const curMarkPrice = useMemo(() => {\n return prices?.[\"data\"]?.[state.item.symbol] ?? \"--\";\n }, [prices]);\n\n const { quote_dp, base_dp, base, quote } = useSymbolContext();\n useEffect(() => {\n if (!setPrice.current && curMarkPrice && sheetOpen) {\n setPrice.current = true;\n updateOrderType(OrderType.LIMIT, `${curMarkPrice}`);\n }\n }, [setPrice, curMarkPrice, sheetOpen]);\n\n // clear state\n useEffect(() => {\n if (!sheetOpen) {\n updateOrderType(OrderType.MARKET);\n setPrice.current = false;\n // setSliderValue(100);\n }\n }, [sheetOpen]);\n\n return {\n ...state,\n sheetOpen,\n setSheetOpen,\n curMarkPrice,\n quote_dp,\n base_dp,\n base,\n quote,\n baseTick,\n\n orderConfirm,\n\n onClose,\n onConfirm,\n price,\n quantity,\n closeOrderData,\n submitting,\n updatePriceChange,\n updateQuantity,\n errors,\n\n // slider\n sliderValue,\n setSliderValue,\n\n dialogOpen,\n setDialogOpen,\n onCloseDialog,\n };\n};\n\nexport type LimitCloseBtnState = ReturnType<typeof useLimitCloseBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useLimitCloseBtnScript } from \"./limitCloseBtn.script\";\nimport { LimitCloseBtn } from \"./limitCloseBtn.ui\";\n\nexport const LimitCloseBtnWidget = (props: {\n state: PositionCellState;\n}) => {\n const state = useLimitCloseBtnScript(props);\n return (<LimitCloseBtn {...state} />);\n};\n","import { FC } from \"react\";\nimport { Button, Flex, SimpleDialog, Text } from \"@orderly.network/ui\";\nimport { MarketCloseBtnState } from \"./marketCloseBtn.script\";\nimport { MarketCloseConfirm } from \"../../desktop/closeButton\";\nimport { OrderType } from \"@orderly.network/types\";\n\nexport const MarketCloseBtn: FC<MarketCloseBtnState> = (props) => {\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n disabled={props.submitting}\n loading={props.submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n\n props.updateOrderType(OrderType.MARKET);\n\n if (!props.orderConfirm) {\n props.onConfirm();\n return;\n }\n props.setDialogOpen(true);\n }}\n >\n Market Close\n </Button>\n <SimpleDialog open={props.dialogOpen} onOpenChange={props.setDialogOpen} size=\"xs\">\n <MarketCloseConfirm\n base={props.base}\n quantity={props.quantity}\n onClose={props.onClose}\n onConfirm={props.onConfirm}\n submitting={props.submitting}\n hideCloseIcon\n />\n </SimpleDialog>\n </>\n );\n};\n","import { useState } from \"react\";\nimport { useSymbolContext } from \"../../../../providers/symbolProvider\";\nimport { usePositionsRowContext } from \"../../desktop/positionRowContext\";\nimport { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\n\nexport const useMarketCloseBtnScript = (props: {\n state: PositionCellState;\n}) => {\n const symbolInfo = useSymbolContext();\n const [dialogOpen, setDialogOpen] = useState(false);\n const {\n onSubmit,\n price,\n quantity,\n closeOrderData,\n submitting,\n type,\n updatePriceChange,\n updateOrderType,\n updateQuantity,\n } = usePositionsRowContext();\n\n const [orderConfirm ] = useLocalStorage(\"orderly_order_confirm\", true);\n\n\n const onConfirm = () => {\n return onSubmit().then(\n (res) => {\n setDialogOpen(false);\n },\n (error: any) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n }\n );\n };\n\n const onClose = () => {\n setDialogOpen(false);\n };\n\n return {\n ...props,\n ...symbolInfo,\n\n dialogOpen,\n setDialogOpen,\n\n orderConfirm,\n\n onSubmit,\n quantity,\n onClose,\n onConfirm,\n submitting,\n updateOrderType,\n updateQuantity,\n };\n};\n\nexport type MarketCloseBtnState = ReturnType<typeof useMarketCloseBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useMarketCloseBtnScript } from \"./marketCloseBtn.script\";\nimport { MarketCloseBtn } from \"./marketCloseBtn.ui\";\n\nexport const MarketCloseBtnWidget = (props: { state: PositionCellState }) => {\n const state = useMarketCloseBtnScript(props);\n return <MarketCloseBtn {...state} />;\n};\n","import { FC } from \"react\";\nimport { Button, Flex, Text, toast } from \"@orderly.network/ui\";\nimport { TpSLBtnState } from \"./tpSLBtn.script\";\n\nexport const TpSLBtn: FC<TpSLBtnState> = (props) => {\n // const { item } = props;\n //\n return (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.openTP_SL();\n }}\n >\n TP/SL\n </Button>\n );\n};\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { modal } from \"@orderly.network/ui\";\nimport { PositionTPSLSheet } from \"@orderly.network/ui-tpsl\";\nimport { API } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { usePositionsRowContext } from \"../../desktop/positionRowContext\";\n\nexport const useTpSLBtnScript = (props: { state: PositionCellState }) => {\n const symbolInfo: API.SymbolExt = useSymbolsInfo()[props.state.item.symbol]();\n const { tpslOrder } = usePositionsRowContext();\n\n const openTP_SL = () => {\n modal.sheet({\n title: \"TP/SL\",\n content: (\n <PositionTPSLSheet\n position={props.state.item}\n symbolInfo={symbolInfo}\n order={tpslOrder}\n isEditing={false}\n />\n ),\n });\n };\n\n return {\n openTP_SL,\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type TpSLBtnState = ReturnType<typeof useTpSLBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useTpSLBtnScript } from \"./tpSLBtn.script\";\nimport { TpSLBtn } from \"./tpSLBtn.ui\";\n\nexport const TpSLBtnWidget = (props: { state: PositionCellState }) => {\n const state = useTpSLBtnScript(props);\n return (<TpSLBtn {...state} />);\n};\n","import { API } from \"@orderly.network/types\";\nimport { PositionsProps } from \"../../../../types/types\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useSymbolContext } from \"../../../../providers/symbolProvider\";\n\nexport const usePositionCellScript = (\n props: {\n item: API.PositionTPSLExt;\n index: number;\n } & PositionsProps\n) => {\n const symbolInfo = useSymbolContext();\n return {\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type PositionCellState = ReturnType<typeof usePositionCellScript>;\n","import { FC } from \"react\";\nimport { usePositionCellScript } from \"./positionCell.script\";\nimport { PositionCell } from \"./positionCell.ui\";\nimport { API } from \"@orderly.network/types\";\nimport { PositionsProps } from \"../../../../types/types\";\n\nexport const PositionCellWidget: FC<\n {\n item: API.PositionTPSLExt;\n index: number;\n className?: string;\n shareIconSize?: number;\n } & PositionsProps\n> = (props) => {\n const state = usePositionCellScript(props);\n return <PositionCell {...state} className={props.className} />;\n};\n","import { usePositionStream } from \"@orderly.network/hooks\";\nimport { PositionsProps } from \"../../types/types\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { useEffect } from \"react\";\n\nexport const usePositionsBuilder = (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({\n pageSize: 50,\n });\n\n const [data, info, { isLoading }] = usePositionStream(symbol, {\n calcMode,\n includedPendingOrder,\n });\n\n useEffect(() => {\n setPage(1);\n }, [symbol]);\n\n const dataSource =\n useDataTap(data?.rows, {\n fallbackData: [],\n }) ?? 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 PositionsBuilderState = ReturnType<typeof usePositionsBuilder>;\n","import { PositionsProps } from \"../../types/types\";\nimport { MobilePositions, Positions } from \"./positions.ui\";\nimport { usePositionsBuilder } from \"./usePositionsBuilder.script\";\n\nexport const PositionsWidget = (props: PositionsProps) => {\n const state = usePositionsBuilder(props);\n return <Positions {...state} />;\n};\n\nexport const MobilePositionsWidget = (props: PositionsProps) => {\n const state = usePositionsBuilder(props);\n return <MobilePositions {...state} />;\n};\n","import { FC } from \"react\";\nimport {\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n} from \"@orderly.network/ui\";\nimport {\n PositionHistoryExt,\n PositionHistoryState,\n} from \"./positionHistory.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { usePositionHistoryColumn } from \"./desktop/usePositionHistoryColumn\";\nimport { SymbolProvider } from \"../../providers/symbolProvider\";\nimport { PositionHistoryCellWidget } from \"./mobile\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\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 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 className=\"oui-relative oui-px-2 oui-py-[2px] oui-text-sm\">\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-gradient-primary oui-opacity-[.12] oui-absolute oui-left-0 oui-right-0 oui-top-0 oui-bottom-0 oui-rounded\"\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-grid-rows-[auto,1fr] oui-w-full\"\n gap={1}\n >\n <Flex gap={2} p={2} className=\"oui-bg-base-9 oui-rounded-b-xl\">\n <DataFilter\n className=\"oui-pt-0 oui-pb-0 oui-border-none\"\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n </Flex>\n <ListView\n className={cn(\n \"oui-w-full oui-hide-scrollbar oui-overflow-y-hidden oui-space-y-0\",\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 { 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 { ReactNode } from \"react\";\nimport { useMemo } from \"react\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { ShareButtonWidget } from \"../../positions/desktop/shareButton\";\nimport { SharePnLConfig, SharePnLDialogId } from \"@orderly.network/ui-share\";\n\nexport const usePositionHistoryColumn = (props: {\n onSymbolChange?: (symbol: API.Symbol) => void;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const { onSymbolChange, pnlNotionalDecimalPrecision } = props;\n\n const column = useMemo(\n () =>\n [\n // instrument\n {\n title: \"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: \"Closed / Max closed\",\n dataIndex: \"close_maxClose\",\n width: 200,\n render: (value: string, record) => <Quantity record={record} />,\n },\n // net pnl\n {\n title: \"Net PnL\",\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: \"Avg. open\",\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: \"Avg. close\",\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 // time opened\n {\n title: \"Time opened\",\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: \"Time closed\",\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: \"Updated time\",\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]\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\n const tags = useMemo(() => {\n const list: ReactNode[] = [];\n\n list.push(\n <Badge\n color={record.position_status !== \"closed\" ? \"primaryLight\" : \"neutral\"}\n size=\"xs\"\n >\n {capitalizeFirstLetter(\n record.position_status === \"partial_closed\"\n ? \"Partially closed\"\n : record.position_status.replace(\"_\", \" \")\n )}\n </Badge>\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge color={\"danger\"} size=\"xs\">\n {capitalizeFirstLetter(record.type)}\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}>Liquidation id</Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>Liquidator fee</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}>Ins. Fund fee</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 {capitalizeFirstLetter(record.type)}\n </span>\n </Badge>\n </div>\n </Tooltip>\n );\n }\n\n return list;\n }, [record]);\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\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}>Net PnL</Text>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>Realized PnL</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}>Funding fee</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}>Trading fee</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 { Divider, Flex, Grid, modal, Text } from \"@orderly.network/ui\";\nimport { PositionHistoryCellState } from \"./positionHistoryCell.script\";\nimport {\n PositionHistoryType,\n ClosedQty,\n SymbolToken,\n OpenTime,\n AvgOpen,\n AvgClosed,\n ClosedTime,\n MaxClosedQty,\n} from \"./items\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { ShareButtonWidget } from \"../../positions/desktop/shareButton\";\nimport { SharePnLBottomSheetId } from \"@orderly.network/ui-share\";\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 showAlert = () => {\n const { item: record } = props;\n\n modal.alert({\n title: \"Net PnL\",\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}>Realized PnL</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}>Funding fee</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}>Trading fee</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 Net PnL\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 <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 );\n};\n","import { FC, ReactNode, useMemo } from \"react\";\nimport {\n PositionHistoryExt,\n PositionHistorySide,\n} from \"../positionHistory.script\";\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 { PositionHistoryCellState } from \"./positionHistoryCell.script\";\nimport { PositionsRowContextState } from \"../../positions/desktop/positionRowContext\";\nimport { commifyOptional } from \"@orderly.network/utils\";\n\nexport const SymbolToken: FC<PositionHistoryCellState> = (props) => {\n const { side, symbol } = props.item;\n const isBuy = side === PositionHistorySide.buy;\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 ? \"Buy\" : \"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\n const showAlert = () => {\n modal.alert({\n title: \"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>Liquidation id</Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>Liquidator fee</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>Ins. Fund fee</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 list.push(\n <Badge\n color={record.position_status !== \"closed\" ? \"primaryLight\" : \"neutral\"}\n size=\"xs\"\n >\n {capitalizeFirstLetter(\n record.position_status === \"partial_closed\"\n ? \"Partially closed\"\n : record.position_status.replace(\"_\", \" \")\n )}\n </Badge>\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge color={\"danger\"} size=\"xs\">\n {capitalizeFirstLetter(record.type)}\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 </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 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>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 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>Max 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 {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\n return (\n <Statistic\n label={<Text>Avg. open{<Text intensity={20}>{\" (USDC)\"}</Text>}</Text>}\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\n return (\n <Statistic\n label={<Text>Avg. close{<Text intensity={20}>{\" (USDC)\"}</Text>}</Text>}\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\n return (\n <Statistic\n label={\"Time opened\"}\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\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={\"Time closed\"}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n {child}\n </Statistic>\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\";\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 [status, setStatus] = useState<PositionHistoryStatus>(\n PositionHistoryStatus.all\n );\n const [side, setSide] = useState<PositionHistorySide>(\n PositionHistorySide.all\n );\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: \"All sides\",\n value: \"all\",\n },\n {\n label: \"Buy\",\n value: PositionHistorySide.buy,\n },\n {\n label: \"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: \"All status\",\n value: \"all\",\n },\n {\n label: \"Closed\",\n value: PositionHistoryStatus.closed,\n },\n {\n label: \"Partially Closed\",\n value: PositionHistoryStatus.partial_closed,\n },\n ],\n value: status,\n };\n\n if (isMobile) {\n return [sideFilter, statusFilter];\n }\n return [sideFilter, statusFilter, dateRangeFilter];\n }, [side, status, dateRange]);\n\n return {\n filterItems,\n onFilter,\n side,\n dateRange,\n status,\n filterDays,\n updateFilterDays,\n };\n};\n\nexport type PositionHistoryState = ReturnType<typeof usePositionHistoryScript>;\n","import { differenceInDays, setDate, setHours, subDays } from \"date-fns\";\n\nexport const parseDateRangeForFilter = (dateRange: {\n from: Date;\n to?: Date;\n}) => {\n let { from, to } = dateRange;\n\n if (typeof to === \"undefined\") {\n to = new Date();\n }\n\n const diff = differenceInDays(from, to);\n\n // console.log(\"diff\", diff);\n\n if (diff === 0) {\n return [from, setHours(to, 23)];\n }\n\n return [from, to];\n};\n\nexport function offsetStartOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(0, 0, 0, 0);\n return newDate;\n}\n\nexport function offsetEndOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(23, 59, 59, 999);\n return newDate;\n}\n\nexport const formatDatePickerRange = (option: { from?: Date; to?: Date }) => ({\n from: offsetStartOfDay(option.from),\n to: offsetEndOfDay(option.to ?? option.from),\n});\n\nexport const areDatesEqual = (date1: Date, date2: Date): boolean => {\n return date1.getTime() === date2.getTime();\n};\n","import { API } from \"@orderly.network/types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { SymbolInfo } from \"../desktop/usePositionHistoryColumn\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const usePositionHistoryCellScript = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const symbolInfo = useSymbolContext();\n\n return {\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type PositionHistoryCellState = ReturnType<\n typeof usePositionHistoryCellScript\n>;\n","import { API } from \"@orderly.network/types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { usePositionHistoryCellScript } from \"./positionHistoryCell.script\";\nimport { PositionHistoryCell } from \"./positionHistoryCell.ui\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const PositionHistoryCellWidget = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const state = usePositionHistoryCellScript(props);\n return <PositionHistoryCell {...state} />;\n};\n","import { API } from \"@orderly.network/types\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { usePositionHistoryScript } from \"./positionHistory.script\";\nimport { MobilePositionHistory, PositionHistory } from \"./positionHistory.ui\";\n\nexport type PositionHistoryProps = {\n onSymbolChange?: (symbol: API.Symbol) => void;\n symbol?: string;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n};\n\nexport const PositionHistoryWidget = (props: PositionHistoryProps) => {\n const state = usePositionHistoryScript(props);\n return <PositionHistory {...state} sharePnLConfig={props.sharePnLConfig} />;\n};\n\nexport const MobilePositionHistoryWidget = (\n props: PositionHistoryProps & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }\n) => {\n const { classNames, ...rest } = props;\n const state = usePositionHistoryScript(rest);\n return (\n <MobilePositionHistory\n {...state}\n classNames={classNames}\n sharePnLConfig={props.sharePnLConfig}\n />\n );\n};\n","import { FC } from \"react\";\nimport {\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n} from \"@orderly.network/ui\";\nimport { LiquidationState } from \"./liquidation.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { API } from \"@orderly.network/types\";\nimport { useLiquidationColumn } from \"./desktop/useLiquidationColumn\";\nimport { SymbolProvider } from \"../../providers/symbolProvider\";\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 className=\"oui-relative oui-px-2 oui-py-[2px] oui-text-sm\">\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-gradient-primary oui-opacity-[.12] oui-absolute oui-left-0 oui-right-0 oui-top-0 oui-bottom-0 oui-rounded\"\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-grid-rows-[auto,1fr] oui-w-full\"\n gap={1}\n >\n <Flex gap={2} p={2} className=\"oui-bg-base-9 oui-rounded-b-xl\">\n <DataFilter\n className=\"oui-pt-0 oui-pb-0 oui-border-none\"\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n </Flex>\n <ListView\n className={cn(\n \"oui-w-full oui-hide-scrollbar oui-overflow-y-hidden oui-space-y-0\",\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 {\n SymbolProvider,\n useSymbolContext,\n} from \"../../../providers/symbolProvider\";\nimport { commifyOptional } from \"@orderly.network/utils\";\n\nexport const useLiquidationColumn = (props: {}) => {\n const {} = props;\n\n const column = useMemo(\n () =>\n [\n // Time\n {\n title: \"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: \"Liquidation id\",\n dataIndex: \"liquidation_id\",\n width: 202,\n render: (value) => <Text>{value}</Text>,\n },\n // net pnl\n {\n title: \"Ins. fund transfer\",\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: \"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\">{item.symbol}</Text.formatted>\n ))}\n </Flex>\n ),\n },\n // Price (USDC)\n {\n title: \"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: \"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: \"Liquidation fee\",\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 value={item.abs_liquidation_fee} type=\"quote\" />\n ))}\n </Flex>\n );\n },\n },\n ] as Column<API.Liquidation>[],\n []\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 (\n <Text>\n {commifyOptional(props.value)}\n </Text>\n );\n};\n","import { FC } from \"react\";\nimport { cn, Divider, 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 { SymbolProvider } from \"../../../providers/symbolProvider\";\nimport { commifyOptional } from \"@orderly.network/utils\";\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 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 Liquidation id:\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 Ins. Fund Transfer:\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 React from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { commifyOptional } from \"@orderly.network/utils\";\n\nexport const Price: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n Price{<Text intensity={20}>{\" (USDC)\"}</Text>}\n </Text>\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 return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n 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 return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n Liquidation fee\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"]}
|