@orderly.network/ui-positions 2.1.1 → 2.1.2-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.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","Box","createContext","useContext","useEffect","useMemo","useState","OrderSide","OrderType","useOrderEntry_deprecated","useSymbolsInfo","useTranslation","jsx","PositionsRowContext","usePositionsRowContext","PositionsRowProvider","props","quantity","setQuantity","t","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","useOrderEntryFormErrorMsg","Fragment","jsxs","CloseButton","open","setOpen","base","quote","orderConfirm","parseErrorMsg","onConfirm","res","onClose","disabled","e","quantityMsg","priceMsg","MarketCloseConfirm","LimitConfirmDialog","ConfirmHeader","hideCloseIcon","ConfirmFooter","onCancel","OrderDetail","total","ListView","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","list","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","Label","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","orderQuantityErrorMsg","orderPriceErrorMsg","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","status","renderStatus","netPnl","text","useAccount","usePrivateQuery","AccountStatusEnum","useScreen","differenceInDays","subDays","setHours","offsetStartOfDay","date","newDate","offsetEndOfDay","formatDatePickerRange","option","areDatesEqual","date1","date2","usePositionHistoryScript","netPnL","dateRange","filterDays","updateFilterDays","filterItems","onFilter","useFilter","filterData","sideFilter","statusFilter","time","dateFilter","symbolFilter","setStatus","setSide","defaultRange","setFilterDays","setDateRange","days","filter","newDateRange","diffDays","isMobile","dateRangeFilter","PositionHistoryType","showAlert","ClosedQty","closedQty","MaxClosedQty","maxClosedQty","AvgClosed","OpenTime","ClosedTime","PositionHistoryCell","usePositionHistoryCellScript","PositionHistoryCellWidget","PositionHistory","dayLabel","MobilePositionHistory","PositionHistoryWidget","MobilePositionHistoryWidget","classNames","useLiquidationColumn","FormattedText","abs_liquidation_fee","Price","LiquidationFee","LiquidationCell","Cell","useLiquidationCellScript","LiquidationCellWidget","Liquidation","MobileLiquidation","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 toast,\n Text,\n CloseIcon,\n Flex,\n Divider,\n Badge,\n SimpleDialog,\n ThrottledButton,\n Box,\n} from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { FC, useMemo, useState } from \"react\";\nimport { OrderEntity, OrderSide, OrderType } from \"@orderly.network/types\";\nimport { commify, commifyOptional, Decimal } from \"@orderly.network/utils\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@orderly.network/react-app\";\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 const { base, quote } = useSymbolContext();\n const [orderConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n\n const { t } = useTranslation();\n const { parseErrorMsg } = useOrderEntryFormErrorMsg(errors);\n\n const onConfirm = () => {\n return onSubmit()\n .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 )\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 = parseErrorMsg(\"order_quantity\");\n const priceMsg = parseErrorMsg(\"order_price\");\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 {t(\"positions.column.close\")}\n </Button>\n <SimpleDialog open={open} onOpenChange={setOpen} size=\"sm\">\n {type === OrderType.MARKET ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n onClose={onClose}\n onConfirm={onConfirm}\n submitting={submitting}\n classNames={{\n root: \"oui-items-start\",\n }}\n hideCloseIcon\n />\n ) : (\n <LimitConfirmDialog\n base={base}\n quantity={quantity}\n price={price}\n onClose={onClose}\n onConfirm={onConfirm}\n submitting={submitting}\n quoteDp={quoteDp}\n order={closeOrderData}\n hideCloseIcon\n />\n )}\n </SimpleDialog>\n </>\n );\n};\n\nexport const ConfirmHeader: FC<{\n onClose?: () => void;\n title: string;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { hideCloseIcon = false } = props;\n return (\n <div className=\"oui-pb-3 oui-border-b oui-border-line-4 oui-relative oui-w-full\">\n <Text size={\"base\"}>{props.title}</Text>\n {!hideCloseIcon && (\n <button\n onClick={props.onClose}\n className=\"oui-absolute oui-right-0 oui-top-0 oui-text-base-contrast-54 hover:oui-text-base-contrast-80 oui-p-2\"\n >\n <CloseIcon size={18} color=\"white\" />\n </button>\n )}\n </div>\n );\n};\n\nexport const ConfirmFooter: FC<{\n onConfirm?: () => Promise<any>;\n onCancel?: () => void;\n submitting?: boolean;\n}> = ({ onCancel, onConfirm, submitting }) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n id=\"oui-positions-confirm-footer\"\n gap={2}\n width={\"100%\"}\n className=\"oui-mt-3 oui-pb-1\"\n >\n <Button\n id=\"oui-positions-confirm-footer-cancel-button\"\n color={\"secondary\"}\n fullWidth\n onClick={onCancel}\n size=\"md\"\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton\n id=\"oui-positions-confirm-footer-confirm-button\"\n onClick={onConfirm}\n fullWidth\n loading={submitting}\n size=\"md\"\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n );\n};\n\nexport const OrderDetail = (props: {\n quantity: any;\n price: any;\n side: OrderSide;\n quoteDp: number;\n className?: string;\n}) => {\n const { quantity, price, quoteDp, side } = props;\n const { t } = useTranslation();\n\n const total = useMemo(() => {\n if (price && quantity) {\n return new Decimal(price)\n .mul(quantity)\n .toFixed(quoteDp, Decimal.ROUND_DOWN);\n }\n return \"--\";\n }, [price, quantity]);\n\n return (\n <Flex\n direction={\"column\"}\n gap={1}\n width={\"100%\"}\n className=\"oui-text-sm oui-text-base-contrast-54\"\n py={5}\n >\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.qty\")}</Text>\n <Text color={side === OrderSide.BUY ? \"success\" : \"danger\"}>\n {quantity}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.price\")}</Text>\n <Text.formatted\n intensity={98}\n suffix={<Text intensity={54}>USDC</Text>}\n >\n {price}\n </Text.formatted>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.notional\")}</Text>\n <Text.formatted\n intensity={98}\n suffix={<Text intensity={54}>USDC</Text>}\n >\n {total}\n </Text.formatted>\n </Flex>\n </Flex>\n );\n};\n\nexport const MarketCloseConfirm: FC<{\n base?: string;\n quantity?: string;\n onClose?: () => void;\n close?: () => void;\n onConfirm?: () => Promise<any>;\n submitting?: boolean;\n hideCloseIcon?: boolean;\n classNames?: {\n root?: string;\n };\n}> = (props) => {\n const { t } = useTranslation();\n\n const onCancel = () => {\n const func = props?.onClose ?? props.close;\n func?.();\n };\n return (\n <Flex direction={\"column\"} className={props.classNames?.root}>\n <ConfirmHeader\n onClose={onCancel}\n title={t(\"positions.marketClose\")}\n hideCloseIcon={props.hideCloseIcon}\n />\n <Text intensity={54} size=\"sm\" className=\"oui-my-5\">\n {t(\"positions.marketClose.description\", {\n quantity: commifyOptional(props.quantity),\n base: props.base,\n })}\n </Text>\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={async () => {\n await props.onConfirm?.();\n onCancel();\n }}\n submitting={props.submitting}\n />\n </Flex>\n );\n};\n\nexport const LimitConfirmDialog: FC<{\n base: string;\n quantity: string;\n price: string;\n onClose?: () => void;\n onConfirm: () => Promise<any>;\n order: OrderEntity;\n submitting: boolean;\n quoteDp?: number;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { order, quoteDp, quantity, price, submitting } = props;\n const { side } = order;\n const { t } = useTranslation();\n\n const onCancel = () => {\n props.onClose?.();\n };\n\n return (\n <>\n <ConfirmHeader\n onClose={onCancel}\n title={t(\"positions.limitClose\")}\n hideCloseIcon={props.hideCloseIcon}\n />\n <Box mt={5}>\n <Text intensity={54} size=\"sm\">\n {t(\"positions.limitClose.description\", {\n quantity: commify(props.quantity),\n base: props.base,\n })}\n </Text>\n </Box>\n\n <Flex gap={2} mb={4} mt={5} justify={\"between\"}>\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"base\"\n showIcon\n >\n {order.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n {t(\"orderEntry.orderType.limit\")}\n </Badge>\n <Badge\n color={side === OrderSide.BUY ? \"success\" : \"danger\"}\n size=\"xs\"\n >\n {side === OrderSide.BUY ? t(\"common.buy\") : t(\"common.sell\")}\n </Badge>\n </Flex>\n </Flex>\n\n <Divider className=\"oui-w-full\" />\n\n <OrderDetail\n className=\"oui-text-sm\"\n price={price}\n quantity={quantity}\n side={order.side}\n quoteDp={quoteDp ?? 2}\n />\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={props.onConfirm}\n submitting={props.submitting}\n />\n </>\n );\n};\n","import {\n FC,\n PropsWithChildren,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { API, OrderEntity, OrderSide, OrderType } from \"@orderly.network/types\";\nimport {\n useOrderEntry_deprecated,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 const { t } = useTranslation();\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(t(\"orderEntry.orderPrice.error.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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 { t } = useTranslation();\n\n const column = useMemo(\n () =>\n [\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 140,\n onSort: (r1, r2) => {\n return r1.symbol.localeCompare(r2.symbol);\n // if (sortOrder === \"asc\") {\n // return r1.symbol.localeCompare(r2.symbol);\n // }\n // return r2.symbol.localeCompare(r1.symbol);\n },\n render: (value: string, record) => (\n <Flex gap={2}>\n <Box\n width={4}\n height={20}\n className={cn(\n \"oui-rounded-[1px]\",\n record.position_qty > 0\n ? \"oui-bg-trade-profit\"\n : \"oui-bg-trade-loss\"\n )}\n />\n\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: t(\"common.quantity\"),\n dataIndex: \"position_qty\",\n // onSort: true,\n onSort: (a, b) => {\n return a.position_qty - b.position_qty;\n },\n width: 120,\n className: \"oui-pl-6\",\n // rule: \"price\",\n // numeralProps: {\n // coloring: true,\n // // tick: \"base_dp\",\n // },\n render: renderQuantity,\n // render: (value: string) => (\n // <NumeralWithCtx\n // coloring\n // className=\"oui-font-semibold\"\n // tick=\"base_dp\"\n // >\n // {value}\n // </NumeralWithCtx>\n // ),\n },\n {\n title: t(\"common.avgOpen\"),\n className: \"oui-h-[48px]\",\n width: 120,\n onSort: true,\n dataIndex: \"average_open_price\",\n render: (value: string, record: any) => {\n // const ctx = usePositionsRowContext();\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: t(\"common.markPrice\"),\n dataIndex: \"mark_price\",\n width: 120,\n onSort: true,\n className: \"oui-h-[48px]\",\n\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={t(\"positions.column.liqPrice.tooltip\")}\n >\n <Text>{t(\"positions.column.liqPrice\")}</Text>\n </Tooltip>\n ),\n width: 100,\n onSort: true,\n dataIndex: \"est_liq_price\",\n render: (value: string, 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>{t(\"common.unrealizedPnl\")}</Text>\n </HoverCard>\n ),\n dataIndex: \"unrealized_pnl\",\n width: 180,\n onSort: true,\n rule: \"price\",\n numeralProps: {\n coloring: true,\n // tick: \"base_dp\",\n },\n // hint: <UnrealizedPnLPopoverCard />,\n render: (value: string, record: 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: t(\"common.tpsl\"),\n dataIndex: \"__\",\n width: 150,\n render: (_: string, record) => (\n <TriggerPrice\n stopLossPrice={record.sl_trigger_price}\n takeProfitPrice={record.tp_trigger_price}\n />\n ),\n },\n\n {\n title: t(\"common.notional\"),\n dataIndex: \"notional\",\n className: \"oui-h-[48px]\",\n width: 100,\n onSort: true,\n render: (value: string) => (\n <Text.numeral dp={pnlNotionalDecimalPrecision}>\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 // @ts-ignore\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>{t(\"positions.column.margin.tooltip\")}</span>\n <Divider className=\"oui-w-full\" />\n <span>{t(\"positions.column.margin.formula\")}</span>\n </Flex>\n }\n >\n <Text>{t(\"positions.column.margin\")}</Text>\n </Tooltip>\n ),\n dataIndex: \"mm\",\n onSort: true,\n width: 100,\n rule: \"price\",\n render: (value: string) => <Text.numeral>{value}</Text.numeral>,\n // 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: t(\"common.qty\"),\n dataIndex: \"close_qty\",\n width: 100,\n fixed: \"right\",\n render: renderQuantityInput,\n },\n {\n title: t(\"common.price\"),\n dataIndex: \"close_price\",\n width: 100,\n fixed: \"right\",\n render: renderPriceInput,\n // render: (value: string) => <PriceInput />,\n },\n {\n title: \"\",\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, t]\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 { useState } from \"react\";\nimport {\n CaretDownIcon,\n cn,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Input,\n inputFormatter,\n} from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const PriceInput = () => {\n const { type, quoteDp, price, updatePriceChange, updateOrderType, position } =\n usePositionsRowContext();\n const [hasFocus, setHasFocus] = useState(false);\n const { t } = useTranslation();\n return (\n <DropdownMenuRoot>\n <Input\n size=\"sm\"\n value={\n type === OrderType.LIMIT ? price : t(\"orderEntry.orderType.market\")\n }\n onValueChange={(e) => updatePriceChange(e)}\n formatters={[\n inputFormatter.numberFormatter,\n ...(quoteDp ? [inputFormatter.dpFormatter(quoteDp)] : []),\n ]}\n onFocus={(e) => {\n if (type === OrderType.MARKET) {\n updateOrderType(OrderType.LIMIT, `${position.mark_price}`);\n }\n setHasFocus(true);\n }}\n onBlur={(e) => {\n setTimeout(() => {\n setHasFocus(false);\n }, 100);\n }}\n suffix={\n <DropdownMenuTrigger asChild>\n <button className=\"oui-px-1 oui-h-full\">\n <CaretDownIcon size={12} color=\"white\" />\n </button>\n </DropdownMenuTrigger>\n }\n classNames={{\n root: cn(\n \"oui-outline-line-12 focus-within:oui-outline-primary-light\"\n ),\n }}\n />\n <DropdownMenuContent\n align=\"end\"\n className=\"oui-w-[96px] oui-min-w-[96px]\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DropdownMenuGroup>\n <DropdownMenuItem\n size=\"xs\"\n onSelect={(vent) => {\n updateOrderType(OrderType.MARKET);\n }}\n >\n <span>{t(\"common.marketPrice\")}</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenuRoot>\n );\n};\n","import {\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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 { t } = useTranslation();\n const list = [\n {\n label: \"0%\",\n value: 0,\n },\n {\n label: \"25%\",\n value: 0.25,\n },\n {\n label: \"50%\",\n value: 0.5,\n },\n {\n label: \"75%\",\n value: 0.75,\n },\n {\n label: t(\"common.max\"),\n value: 1,\n },\n ];\n\n return (\n <Flex gap={2} width={\"100%\"}>\n {list.map((item, index) => {\n return (\n <Button\n key={index}\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n onClick={(e) => {\n e.stopPropagation();\n props.onClick(item.value);\n }}\n className=\"oui-w-1/5\"\n >\n {item.label}\n </Button>\n );\n })}\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { modal, ShareIcon } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { ShareButtonState } from \"./shareButton.script\";\n\nexport const ShareButton: FC<ShareButtonState> = (props) => {\n if (props.sharePnLConfig == null) return <></>;\n\n const { position } = props;\n\n const showModal = () => {\n const entity = props.isPositionHistory\n ? {\n side: position.side,\n pnl: position.netPnL,\n openPrice: Math.abs(position.avg_open_price),\n closePrice: Math.abs(position.avg_close_price),\n openTime: position.open_timestamp,\n closeTime: position.close_timestamp,\n quantity: position.closed_position_qty,\n }\n : {\n side: position.position_qty > 0 ? \"LONG\" : \"SHORT\",\n pnl: position.unrealized_pnl,\n roi: new Decimal(position.unrealized_pnl_ROI * 100).toFixed(\n 2,\n Decimal.ROUND_DOWN\n ),\n openPrice: Math.abs(position.average_open_price),\n markPrice: position.mark_price,\n openTime: position.timestamp,\n quantity: position.position_qty,\n };\n\n modal.show(props.modalId, {\n pnl: {\n entity: {\n symbol: position.symbol,\n ...entity,\n },\n refCode: props.refCode,\n ...props.sharePnLConfig,\n leverage: props.isPositionHistory ? undefined : props.leverage,\n },\n });\n };\n return (\n <button\n type=\"button\"\n onClick={(e: any) => {\n e.stopPropagation();\n showModal();\n }}\n >\n <ShareIcon color=\"white\" opacity={0.54} size={props.iconSize ?? 16} />\n </button>\n );\n};\n","import { useMemo } from \"react\";\nimport { useReferralInfo, useSymbolLeverage } from \"@orderly.network/hooks\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport type UseShareButtonScriptOptions = {\n position: any;\n sharePnLConfig?: SharePnLConfig;\n modalId: string;\n iconSize?: number;\n isPositionHistory?: boolean;\n};\n\nexport const useShareButtonScript = (props: UseShareButtonScriptOptions) => {\n const { sharePnLConfig, position, modalId, iconSize, isPositionHistory } =\n props;\n const { getFirstRefCode } = useReferralInfo();\n const refCode = useMemo(() => {\n return getFirstRefCode()?.code;\n }, [getFirstRefCode]);\n const leverage = useSymbolLeverage(props.position.symbol);\n return {\n iconSize,\n position,\n refCode,\n leverage,\n sharePnLConfig,\n modalId,\n isPositionHistory,\n };\n};\n\nexport type ShareButtonState = ReturnType<typeof useShareButtonScript>;\n","import {\n useShareButtonScript,\n UseShareButtonScriptOptions,\n} from \"./shareButton.script\";\nimport { ShareButton } from \"./shareButton.ui\";\n\nexport type ShareButtonWidgetProps = UseShareButtonScriptOptions;\n\nexport const ShareButtonWidget = (props: ShareButtonWidgetProps) => {\n const state = useShareButtonScript(props);\n return <ShareButton {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { AlgoOrderType, API, OrderSide } from \"@orderly.network/types\";\nimport { useSymbolsInfo, utils } from \"@orderly.network/hooks\";\nimport { cn, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { TPSLEditIcon } from \"./components\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const TriggerPrice: FC<{\n stopLossPrice?: number;\n takeProfitPrice?: number;\n}> = (props) => {\n const { stopLossPrice, takeProfitPrice } = props;\n const { tpslOrder, position } = usePositionsRowContext();\n\n return (\n <TPSLTriggerPrice\n stopLossPrice={stopLossPrice}\n takeProfitPrice={takeProfitPrice}\n direction={\"column\"}\n order={tpslOrder}\n position={position}\n tooltip\n />\n );\n};\n\nexport const TriggerPriceItem: FC<{\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n symbolInfo: API.SymbolExt;\n}> = (props) => {\n const { qty, price, entryPrice, orderSide, orderType, symbolInfo } = props;\n const pnl = utils.priceToPnl(\n {\n qty,\n price,\n entryPrice,\n orderSide,\n orderType,\n },\n {\n symbol: symbolInfo,\n }\n );\n\n const type = orderType === AlgoOrderType.TAKE_PROFIT ? \"TP\" : \"SL\";\n\n return (\n <Flex>\n <Text intensity={54} className=\"oui-mr-1\">{`${type} PnL:`}</Text>\n <Text.formatted\n rule=\"price\"\n className={\n pnl === 0\n ? \"oui-text-base-contrast-36\"\n : pnl > 0\n ? \"oui-text-trade-profit oui-gap-0\"\n : \"oui-text-trade-loss oui-gap-0\"\n }\n prefix={<Text>{pnl === 0 ? \"\" : pnl > 0 ? \"+\" : \"-\"}</Text>}\n suffix={\n <Text intensity={36} className=\"oui-ml-1\">\n USDC\n </Text>\n }\n >{`${Math.abs(pnl)}`}</Text.formatted>\n </Flex>\n );\n};\n\nexport const TPSLTriggerPrice: FC<{\n takeProfitPrice: number | undefined;\n stopLossPrice: number | undefined;\n className?: string;\n direction?: \"row\" | \"column\";\n tooltip?: boolean;\n order?: API.AlgoOrder;\n position?: API.PositionTPSLExt;\n}> = (props) => {\n const { direction = \"row\", order, position } = props;\n // const symbolInfo = useSymbolsInfo()[position?.symbol ?? \"\"]();\n const symbolInfo = useSymbolsInfo();\n const { t } = useTranslation();\n const pnl = useMemo(() => {\n const msgs = [];\n\n if (!props.tooltip || !order || !position) return;\n\n let quantity = order.quantity;\n\n if (quantity === 0) {\n if (order.child_orders[0].type === \"CLOSE_POSITION\") {\n quantity = position.position_qty;\n }\n }\n\n if (!!props.takeProfitPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"tp\"}\n qty={quantity}\n price={props.takeProfitPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.TAKE_PROFIT}\n symbolInfo={symbolInfo[order.symbol]()}\n />\n );\n }\n\n if (!!props.stopLossPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"sl\"}\n qty={quantity}\n price={props.stopLossPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.STOP_LOSS}\n symbolInfo={symbolInfo[order.symbol]()}\n />\n );\n }\n\n return <div>{msgs}</div>;\n }, [\n props.takeProfitPrice,\n props.stopLossPrice,\n position?.average_open_price,\n order?.side,\n order?.quantity,\n order?.algo_type,\n ]);\n\n const child = useMemo(() => {\n const children = [];\n\n if (!order?.symbol) return <span>-</span>;\n\n const Label = ({ children }: { children?: string }) => {\n return !props.stopLossPrice || direction === \"column\" ? (\n <Text intensity={54}>{children}</Text>\n ) : (\n \"\"\n );\n };\n\n if (props.takeProfitPrice) {\n children.push(\n <Text.formatted\n className={cn(\n \"oui-text-trade-profit oui-gap-0 oui-decoration-white/20\"\n )}\n key={\"tp\"}\n rule=\"price\"\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={props.takeProfitPrice}\n prefix={\n !props.stopLossPrice || direction === \"column\" ? (\n <Text intensity={54}>{`${t(\"tpsl.tp\")} - `}</Text>\n ) : (\n \"\"\n )\n }\n />\n );\n }\n if (props.stopLossPrice) {\n children.push(\n <Text.formatted\n key={\"sl\"}\n className={cn(\n \"oui-text-trade-loss oui-gap-0 oui-decoration-white/20 \"\n )}\n rule={\"price\"}\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={props.stopLossPrice}\n prefix={\n !props.takeProfitPrice || direction === \"column\" ? (\n <Text intensity={54}>{`${t(\"tpsl.sl\")} - `}</Text>\n ) : (\n \"\"\n )\n }\n />\n );\n }\n\n if (children.length === 0) return <Text>-</Text>;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <Text key={\"split\"}>/</Text>);\n }\n\n return children;\n }, [props.takeProfitPrice, props.stopLossPrice, order?.symbol, t]);\n\n const content = (\n <div\n className={cn(\n \"oui-inline-flex oui-text-base-contrast-36\",\n props.direction === \"column\"\n ? \"oui-flex-col\"\n : \"oui-flex-row oui-gap-1\",\n props.className\n )}\n >\n {child}\n </div>\n );\n\n const showIcon = Array.isArray(child) ? !!child.length : !child;\n\n if (props.tooltip) {\n return (\n <Flex gapX={2}>\n <Tooltip content={pnl}>{content}</Tooltip>\n {showIcon && <TPSLEditIcon />}\n </Flex>\n );\n }\n\n return content;\n};\n","import { PositionTPSLPopover } from \"@orderly.network/ui-tpsl\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { EditIcon } from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\n// ------------ TP/SL Price input end------------\nexport const TPSLButton = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n const { t } = useTranslation();\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n label={t(\"common.tpsl\")}\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing={false}\n />\n );\n};\n\nexport const TPSLEditIcon = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing\n >\n <EditIcon\n opacity={1}\n className=\"oui-text-base-contrast-54 oui-cursor-pointer\"\n size={16}\n />\n </PositionTPSLPopover>\n );\n};\n","import { FC } from \"react\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { Divider, Flex, Text } from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const UnrealizedPnLPopoverCard: FC<{}> = (props) => {\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\"\n );\n const { t } = useTranslation();\n return (\n <Flex\n direction={\"column\"}\n gap={3}\n className=\"oui-text-base-contrast-54 oui-items-start\"\n >\n <Text>{t(\"positions.column.unrealPnl.tooltip\")}</Text>\n <Divider className=\"oui-w-full\" />\n <div className=\"oui-mb-0\">\n {t(\"positions.column.unrealPnl.priceBasis\")}\n </div>\n <UnPnlPriceBasisCheckBox\n value={unPnlPriceBasis}\n onValueChange={setUnPnlPriceBasic}\n />\n </Flex>\n );\n};\n\nconst UnPnlPriceBasisCheckBox = (props: {\n value: string;\n onValueChange: (value: string) => void;\n}) => {\n const { value, onValueChange } = props;\n const { t } = useTranslation();\n\n // \"markPrice\" | \"lastPrice\"\n return (\n <Flex gap={2}>\n <RadioButton\n sel={value === \"markPrice\"}\n label={t(\"common.markPrice\")}\n value={\"markPrice\"}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === \"lastPrice\"}\n label={t(\"common.lastPrice\")}\n value={\"lastPrice\"}\n onCheckChange={onValueChange}\n />\n </Flex>\n );\n};\n\nconst RadioButton = (props: {\n sel: boolean;\n label: any;\n value: any;\n onCheckChange: (value: any) => void;\n}) => {\n const { sel, label, value, onCheckChange } = props;\n return (\n <Flex\n onClick={(e) => {\n onCheckChange(value);\n e.stopPropagation();\n }}\n gap={1}\n className=\"oui-cursor-pointer\"\n >\n {sel ? <SelIcon /> : <UnselIcon />}\n <Text size=\"xs\" intensity={sel ? 98 : 54}>\n {label}\n </Text>\n </Flex>\n );\n};\n\nconst SelIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-fill-white\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".36\"\n />\n <circle cx=\"8\" cy=\"8\" r=\"3.333\" />\n </svg>\n );\n};\n\nconst UnselIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".54\"\n />\n </svg>\n );\n};\n","import { FC } from \"react\";\nimport { NumeralProps, Text } from \"@orderly.network/ui\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\n\nexport type TickName = \"quote_dp\" | \"base_dp\";\n\nexport const NumeralWithCtx: FC<\n Omit<NumeralProps, \"precision\" | \"tick\"> & {\n tick?: TickName;\n }\n> = (props) => {\n const { tick = \"quote_dp\", ...rest } = props;\n const symbolInfo = useSymbolContext();\n\n if (!symbolInfo) {\n // TODO i18n\n throw new Error(\"NumeralWithCtx must be used inside SymbolProvider\");\n }\n\n // @ts-ignore\n return <Text.numeral as=\"span\" {...rest} dp={symbolInfo[tick]} />;\n};\n","import { FC } from \"react\";\nimport { 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 { FC } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { 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 { useTranslation } from \"@orderly.network/i18n\";\n\nexport const SymbolToken: FC<PositionCellState> = (props) => {\n const { item } = props;\n const isBuy = item.position_qty > 0;\n const { t } = useTranslation();\n return (\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"2xs\"\n suffix={\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? t(\"common.buy\") : t(\"common.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 const { t } = useTranslation();\n return (\n <Flex gap={3}>\n <Flex direction={\"column\"} className=\"oui-text-2xs\" itemAlign={\"end\"}>\n <div>\n <Text intensity={36}>{t(\"common.unrealizedPnl\")}</Text>\n <Text intensity={20}>(USDC)</Text>\n </div>\n\n <Text.numeral\n size=\"xs\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"orderly-font-semibold\"\n suffix={\n <Text.numeral\n rule=\"percentages\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n prefix=\"(\"\n suffix=\")\"\n className={cn(\n \"oui-ml-1\",\n item.unrealized_pnl_ROI > 0\n ? \"oui-text-success-darken\"\n : \"oui-text-danger-darken\"\n )}\n >\n {item.unrealized_pnl_ROI}\n </Text.numeral>\n }\n >\n {item.unrealized_pnl}\n </Text.numeral>\n </Flex>\n <ShareButtonWidget\n position={item}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLBottomSheetId}\n iconSize={12}\n />\n </Flex>\n );\n};\n\nexport const Qty: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.qty\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring>\n {item.position_qty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Margin: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={\n <span>\n {t(\"positions.column.margin\")}\n <Text intensity={20}>(USDC)</Text>\n </span>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} intensity={80}>\n {item.mm}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Notional: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n align=\"end\"\n label={\n <span>\n {t(\"common.notional\")}\n <Text intensity={20}>(USDC)</Text>\n </span>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} intensity={80}>\n {item.notional}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.avgOpen\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} intensity={80}>\n {item.average_open_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MarkPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n return (\n <Statistic\n label={t(\"common.markPrice\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} intensity={80}>\n {item.mark_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const LiqPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n const liqPrice =\n item.est_liq_price && item.est_liq_price > 0 ? item.est_liq_price : \"-\";\n\n return (\n <Statistic\n label={t(\"positions.column.liqPrice\")}\n align=\"end\"\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} color=\"warning\">\n {liqPrice}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const TPSLPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n if (item.tp_trigger_price == null && item.sl_trigger_price == null)\n return <></>;\n\n return (\n <Flex className=\"oui-text-2xs oui-text-base-contrast-36\">\n <Text>{`${t(\"common.tpsl\")}:`}&nbsp;</Text>\n <Flex className=\"oui-gap-[2px]\">\n {item.tp_trigger_price && (\n <Text.numeral color=\"buy\">{item.tp_trigger_price}</Text.numeral>\n )}\n {item.sl_trigger_price && \"/\"}\n {item.sl_trigger_price && (\n <Text.numeral color=\"sell\">{item.sl_trigger_price}</Text.numeral>\n )}\n </Flex>\n </Flex>\n );\n};\n","import { FC } 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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@orderly.network/react-app\";\n\nexport const LimitCloseBtn: FC<LimitCloseBtnState> = (props) => {\n const {\n item,\n sheetOpen,\n setSheetOpen,\n dialogOpen,\n setDialogOpen,\n updatePriceChange,\n base,\n quantity,\n price,\n onClose,\n onConfirm,\n submitting,\n quote_dp,\n closeOrderData,\n onCloseDialog,\n } = props;\n const isBuy = item.position_qty > 0;\n const { t } = useTranslation();\n const { parseErrorMsg } = useOrderEntryFormErrorMsg(props.errors);\n\n const orderQuantityErrorMsg = parseErrorMsg(\"order_quantity\");\n const orderPriceErrorMsg = parseErrorMsg(\"order_price\");\n\n const onBlur = (value: string) => {\n if (props.baseTick && props.baseTick > 0) {\n const formatQty = utils.formatNumber(value, props.baseTick) ?? value;\n props.updateQuantity(formatQty);\n }\n };\n\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={() => {\n updatePriceChange(\"limit\");\n setSheetOpen(true);\n }}\n >\n {t(\"positions.limitClose\")}\n </Button>\n\n {sheetOpen && (\n <SimpleSheet\n title={t(\"positions.limitClose\")}\n open={sheetOpen}\n onOpenChange={setSheetOpen}\n >\n <Flex\n direction={\"column\"}\n gap={3}\n width={\"100%\"}\n itemAlign={\"start\"}\n className=\"oui-text-sm\"\n >\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text.formatted rule={\"symbol\"} showIcon>\n {item.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n {t(\"orderEntry.orderType.limit\")}\n </Badge>\n {isBuy && (\n <Badge color=\"success\" size=\"xs\">\n {t(\"common.buy\")}\n </Badge>\n )}\n {!isBuy && (\n <Badge color=\"danger\" size=\"xs\">\n {t(\"common.sell\")}\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider className=\"oui-w-full\" />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text intensity={54}>{t(\"common.lastPrice\")}</Text>\n <Text.numeral\n dp={(props.item as any)?.symbolInfo?.quote_dp}\n suffix={<Text intensity={36}> USDC</Text>}\n >\n {props.curMarkPrice}\n </Text.numeral>\n </Flex>\n <Flex width={\"100%\"} direction={\"column\"} gap={2}>\n <Input.tooltip\n prefix={t(\"common.price\")}\n suffix={props.quote}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.quote_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={orderPriceErrorMsg}\n color={orderPriceErrorMsg ? \"danger\" : undefined}\n value={props.price}\n onValueChange={(e) => props.updatePriceChange(e)}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-outline-line-12 oui-w-full\",\n orderPriceErrorMsg ? \"oui-outline-danger\" : undefined\n ),\n }}\n />\n <Input\n prefix={t(\"common.quantity\")}\n suffix={props.base}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.base_dp),\n ]}\n // triggerClassName=\"oui-w-full\"\n // tooltip={orderQuantityErrorMsg}\n // color={\n // orderQuantityErrorMsg ? \"danger\" : undefined\n // }\n value={props.quantity}\n onBlur={(event) => onBlur(event.target.value)}\n onValueChange={(e) => {\n props.updateQuantity(e);\n const slider = new Decimal(e)\n .div(props.item.position_qty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n props.setSliderValue(slider);\n }}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-outline-line-12 oui-w-full\"\n // orderQuantityErrorMsg\n // ? \"oui-outline-danger\"\n // : undefined\n ),\n }}\n />\n <Slider\n markCount={4}\n value={[props.sliderValue]}\n color=\"primary\"\n onValueChange={(e) => {\n props.setSliderValue(e[0]);\n const qty = new Decimal(e[0])\n .div(100)\n .mul(props.item.position_qty)\n .toFixed(props.base_dp, Decimal.ROUND_DOWN);\n // props.updateQuantity(qty);\n onBlur(qty);\n }}\n />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text\n color=\"primary\"\n size=\"2xs\"\n >{`${props.sliderValue}%`}</Text>\n <Flex gap={1}>\n <Text size=\"2xs\" color=\"primary\">\n {t(\"common.max\")}\n </Text>\n <Text.numeral intensity={54} size=\"2xs\">\n {Math.abs(props.item.position_qty)}\n </Text.numeral>\n </Flex>\n </Flex>\n </Flex>\n <Flex width={\"100%\"} gap={3} mt={2}>\n <Button\n fullWidth\n color=\"secondary\"\n onClick={(e) => {\n onClose();\n }}\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton\n fullWidth\n disabled={submitting}\n loading={submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n\n if (orderQuantityErrorMsg || orderPriceErrorMsg) {\n toast.error(orderQuantityErrorMsg ?? orderPriceErrorMsg);\n return;\n }\n if (!props.orderConfirm) {\n onConfirm();\n return;\n }\n setDialogOpen(true);\n }}\n // disabled={Object.keys(props.errors ?? {}).length > 0}\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n </Flex>\n </SimpleSheet>\n )}\n\n {dialogOpen && (\n <SimpleDialog open={dialogOpen} onOpenChange={setDialogOpen} size=\"xs\">\n <LimitConfirmDialog\n base={base}\n quantity={quantity}\n price={price}\n onClose={onCloseDialog}\n onConfirm={onConfirm}\n submitting={submitting}\n quoteDp={quote_dp}\n order={closeOrderData}\n hideCloseIcon\n />\n </SimpleDialog>\n )}\n </>\n );\n};\n","import { 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, SimpleDialog } from \"@orderly.network/ui\";\nimport { MarketCloseBtnState } from \"./marketCloseBtn.script\";\nimport { MarketCloseConfirm } from \"../../desktop/closeButton\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const MarketCloseBtn: FC<MarketCloseBtnState> = (props) => {\n const { t } = useTranslation();\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n disabled={props.submitting}\n loading={props.submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n\n props.updateOrderType(OrderType.MARKET);\n\n if (!props.orderConfirm) {\n props.onConfirm();\n return;\n }\n props.setDialogOpen(true);\n }}\n >\n {t(\"positions.marketClose\")}\n </Button>\n <SimpleDialog\n open={props.dialogOpen}\n onOpenChange={props.setDialogOpen}\n size=\"xs\"\n >\n <MarketCloseConfirm\n base={props.base}\n quantity={props.quantity}\n onClose={props.onClose}\n onConfirm={props.onConfirm}\n submitting={props.submitting}\n hideCloseIcon\n />\n </SimpleDialog>\n </>\n );\n};\n","import { useState } from \"react\";\nimport { 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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const TpSLBtn: FC<TpSLBtnState> = (props) => {\n // const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.openTP_SL();\n }}\n >\n {t(\"common.tpsl\")}\n </Button>\n );\n};\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { modal } from \"@orderly.network/ui\";\nimport { PositionTPSLSheet } from \"@orderly.network/ui-tpsl\";\nimport { API } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { usePositionsRowContext } from \"../../desktop/positionRowContext\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const useTpSLBtnScript = (props: { state: PositionCellState }) => {\n const symbolInfo: API.SymbolExt = useSymbolsInfo()[props.state.item.symbol]();\n const { tpslOrder } = usePositionsRowContext();\n const { t } = useTranslation();\n\n const openTP_SL = () => {\n modal.sheet({\n title: t(\"common.tpsl\"),\n content: (\n <PositionTPSLSheet\n position={props.state.item}\n symbolInfo={symbolInfo}\n order={tpslOrder}\n isEditing={false}\n />\n ),\n });\n };\n\n return {\n openTP_SL,\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type TpSLBtnState = ReturnType<typeof useTpSLBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useTpSLBtnScript } from \"./tpSLBtn.script\";\nimport { TpSLBtn } from \"./tpSLBtn.ui\";\n\nexport const TpSLBtnWidget = (props: { state: PositionCellState }) => {\n const state = useTpSLBtnScript(props);\n return (<TpSLBtn {...state} />);\n};\n","import { 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, useMemo } 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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\ntype PositionHistoryProps = PositionHistoryState & {\n sharePnLConfig?: SharePnLConfig;\n};\n\nexport const PositionHistory: FC<PositionHistoryProps> = (props) => {\n const { onSymbolChange, pagination, pnlNotionalDecimalPrecision } = props;\n const column = usePositionHistoryColumn({\n onSymbolChange,\n pnlNotionalDecimalPrecision,\n sharePnLConfig: props.sharePnLConfig,\n });\n\n const { t } = useTranslation();\n\n const dayLabel: Record<number, string> = useMemo(() => {\n return {\n 1: t(\"common.select.1d\"),\n 7: t(\"common.select.7d\"),\n 30: t(\"common.select.30d\"),\n 90: t(\"common.select.90d\"),\n };\n }, [t]);\n\n return (\n <Flex direction=\"column\" width=\"100%\" height=\"100%\" itemAlign=\"start\">\n {/* <Divider className=\"oui-w-full\" /> */}\n <Flex gap={3}>\n {props.filterItems.length > 0 && (\n <DataFilter\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n )}\n {[1, 7, 30, 90].map((value) => {\n return (\n <button 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={cn(\n \"oui-break-normal oui-whitespace-nowrap\",\n props.filterDays !== value\n ? \"oui-text-base-contrast-54\"\n : \"\"\n )}\n >\n {dayLabel[value] || `${value}D`}\n </Text.gradient>\n </div>\n <div\n className=\"oui-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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const usePositionHistoryColumn = (props: {\n onSymbolChange?: (symbol: API.Symbol) => void;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const { onSymbolChange, pnlNotionalDecimalPrecision } = props;\n const { t } = useTranslation();\n\n const column = useMemo(\n () =>\n [\n // instrument\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 200,\n onSort: (r1: any, r2: any) => {\n return r1.symbol.localeCompare(r2.symbol);\n },\n render: (value: string, record) => (\n <SymbolInfo record={record} onSymbolChange={onSymbolChange} />\n ),\n },\n // quantity\n {\n title: t(\"positions.history.column.closed&maxClosed\"),\n dataIndex: \"close_maxClose\",\n width: 200,\n render: (value: string, record) => <Quantity record={record} />,\n },\n // net pnl\n {\n title: t(\"positions.history.column.netPnl\"),\n dataIndex: \"netPnL\",\n width: 140,\n onSort: (a, b) => {\n if (a.netPnL == null || b.netPnL == null) return -1;\n return (a.netPnL ?? 0) - (b.netPnL ?? 0);\n },\n render: (_: any, record) => (\n <Flex gapX={1}>\n <NetPnL\n record={record}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n />\n <ShareButtonWidget\n position={record}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLDialogId}\n isPositionHistory\n />\n </Flex>\n ),\n },\n // avg open\n {\n title: t(\"common.avgOpen\"),\n dataIndex: \"avg_open\",\n width: 140,\n render: (_: any, record) => {\n const avgOpen =\n record.avg_open_price != null\n ? Math.abs(record.avg_open_price)\n : \"--\";\n const { quote_dp } = useSymbolContext();\n return (\n <Text.numeral dp={quote_dp} padding={false}>\n {avgOpen}\n </Text.numeral>\n );\n },\n },\n // avg close\n {\n title: t(\"common.avgClose\"),\n dataIndex: \"avg_close\",\n width: 175,\n render: (_: any, record) => {\n const avgClose =\n record.avg_close_price != null\n ? Math.abs(record.avg_close_price)\n : \"--\";\n const { quote_dp } = useSymbolContext();\n return (\n <Text.numeral dp={quote_dp} padding={false}>\n {avgClose}\n </Text.numeral>\n );\n },\n },\n // time opened\n {\n title: t(\"positions.history.column.timeOpened\"),\n dataIndex: \"open_timestamp\",\n width: 175,\n onSort: true,\n render: (_: any, record) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {record.open_timestamp}\n </Text.formatted>\n ),\n },\n // time close\n {\n title: t(\"positions.history.column.timeClosed\"),\n dataIndex: \"close_timestamp\",\n width: 175,\n onSort: true,\n render: (_: any, record) => {\n if (record.position_status == \"closed\" && record.close_timestamp) {\n return (\n <Text.formatted\n rule={\"date\"}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n >\n {record.close_timestamp ?? \"--\"}\n </Text.formatted>\n );\n }\n return \"--\";\n },\n },\n // updated time\n {\n title: t(\"positions.history.column.updatedTime\"),\n dataIndex: \"last_update_time\",\n width: 175,\n onSort: true,\n render: (_: any, record) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {record.last_update_time}\n </Text.formatted>\n ),\n },\n ] as Column<PositionHistoryExt>[],\n [pnlNotionalDecimalPrecision, t]\n );\n\n return column;\n};\n\nexport const SymbolInfo = (props: {\n record: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}) => {\n const { record, onSymbolChange } = props;\n const { t } = useTranslation();\n\n const tags = useMemo(() => {\n const list: ReactNode[] = [];\n\n const status = record.position_status;\n\n const renderStatus = () => {\n if (status === \"closed\") {\n return t(\"positions.history.status.closed\");\n } else if (status === \"partial_closed\") {\n return t(\"positions.history.status.partialClosed\");\n } else {\n return capitalizeFirstLetter(status.replace(\"_\", \" \"));\n }\n };\n\n list.push(\n <Badge\n color={status !== \"closed\" ? \"primaryLight\" : \"neutral\"}\n size=\"xs\"\n className=\"oui-break-normal oui-whitespace-nowrap\"\n >\n {renderStatus()}\n </Badge>\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge color={\"danger\"} size=\"xs\">\n {/* {capitalizeFirstLetter(record.type)} */}\n {t(\"positions.history.type.adl\")}\n </Badge>\n );\n } else if (record.type === \"liquidated\") {\n list.push(\n <Tooltip\n className=\"oui-min-w-[204px] oui-bg-base-5\"\n arrow={{\n className: \"oui-fill-base-5\",\n }}\n // @ts-ignore\n content={\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {record.liquidation_id != null && (\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.liquidationId\")}\n </Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.liquidatorFee\")}\n </Text>\n <Text color=\"lose\">\n {record.liquidator_fee > 0 && \"-\"}\n {commifyOptional(record.liquidator_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.insFundFee\")}\n </Text>\n <Text color=\"lose\">\n {record.insurance_fund_fee > 0 && \"-\"}\n {commifyOptional(record.insurance_fund_fee)}\n </Text>\n </Flex>\n </Flex>\n }\n >\n <div>\n <Badge size=\"xs\" color=\"danger\" className=\"oui-cursor-pointer\">\n <span className=\"oui-underline oui-decoration-dashed oui-decoration-[1px]\">\n {t(\"positions.history.type.liquidated\")}\n </span>\n </Badge>\n </div>\n </Tooltip>\n );\n }\n\n return list;\n }, [record, t]);\n\n return (\n <Flex gap={2} height={48}>\n <Box\n width={4}\n height={38}\n className={cn(\n \"oui-rounded-[1px] oui-shrink-0\",\n record.side === \"LONG\" ? \"oui-bg-trade-profit\" : \"oui-bg-trade-loss\"\n )}\n />\n\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n <Text.formatted\n // rule={\"symbol\"}\n formatString=\"base-type\"\n className=\"oui-cursor-pointer\"\n onClick={(e) => {\n onSymbolChange?.({ symbol: record.symbol } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${record.symbol.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n <Flex gap={1}>{tags}</Flex>\n </Flex>\n </Flex>\n );\n};\n\nexport const Quantity = (props: { record: PositionHistoryExt }) => {\n const { record } = props;\n\n const { base_dp } = useSymbolContext();\n\n return (\n <Flex\n gap={1}\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-overflow-hidden oui-whitespace-nowrap oui-text-ellipsis\"\n >\n <Text.numeral dp={base_dp} padding={false}>\n {Math.abs(record.closed_position_qty)}\n </Text.numeral>\n <Text.numeral dp={base_dp} padding={false} className=\"oui-truncate\">\n {Math.abs(record.max_position_qty)}\n </Text.numeral>\n {/* <Text className=\"oui-truncate\">{`${record.symbol.split(\"_\")[1]}`}</Text> */}\n </Flex>\n );\n};\n\nexport const NetPnL = (props: {\n record: PositionHistoryExt;\n pnlNotionalDecimalPrecision?: number;\n}) => {\n const { record, pnlNotionalDecimalPrecision } = props;\n const { t } = useTranslation();\n const netPnl = record.netPnL != null ? record.netPnL : undefined;\n\n const text = () => (\n <Text.numeral\n dp={pnlNotionalDecimalPrecision}\n color={\n record.netPnL != null\n ? record.netPnL > 0\n ? \"profit\"\n : \"lose\"\n : undefined\n }\n className={\n netPnl == null\n ? \"\"\n : \"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n }\n >\n {netPnl ?? \"--\"}\n </Text.numeral>\n );\n\n if (record.netPnL == null) return text();\n\n return (\n <Tooltip\n // open={record.max_position_qty == 3.22}\n delayDuration={200}\n // @ts-ignore\n content={\n <Flex direction={\"column\"} itemAlign={\"start\"} className=\"oui-text-2xs\">\n <Text intensity={80}>{t(\"positions.history.column.netPnl\")}</Text>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"common.realizedPnl\")}</Text>\n <Text\n color={record.realized_pnl >= 0 ? \"profit\" : \"lose\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(record.realized_pnl)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.netPnl.fundingFee\")}\n </Text>\n <Text\n color={record.accumulated_funding_fee > 0 ? \"lose\" : \"profit\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(-record.accumulated_funding_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.netPnl.tradingFee\")}\n </Text>\n <Text\n color={record.trading_fee > 0 ? \"lose\" : \"profit\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(-record.trading_fee)}\n </Text>\n </Flex>\n </Flex>\n }\n className=\"oui-min-w-[204px] oui-bg-base-5\"\n arrow={{\n className: \"oui-fill-base-5\",\n }}\n >\n <div>{text()}</div>\n </Tooltip>\n );\n};\n","import { FC } from \"react\";\nimport { 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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nexport const PositionHistoryCell: FC<PositionHistoryCellState> = (props) => {\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n itemAlign={\"start\"}\n className={props.classNames?.root}\n >\n <Header {...props} />\n <Divider intensity={6} className=\"oui-w-full\" />\n <Body {...props} />\n </Flex>\n );\n};\n\nexport const Header: FC<PositionHistoryCellState> = (props) => {\n const { t } = useTranslation();\n\n const showAlert = () => {\n const { item: record } = props;\n\n modal.alert({\n title: t(\"positions.history.column.netPnl\"),\n message: (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n >\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"common.realizedPnl\")}</Text>\n <Text color={record.realized_pnl >= 0 ? \"profit\" : \"lose\"}>\n {commifyOptional(record.realized_pnl)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.netPnl.fundingFee\")}\n </Text>\n <Text\n color={record.accumulated_funding_fee > 0 ? \"lose\" : \"profit\"}\n >\n {commifyOptional(-record.accumulated_funding_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.netPnl.tradingFee\")}\n </Text>\n <Text color={record.trading_fee > 0 ? \"lose\" : \"profit\"}>\n {commifyOptional(-record.trading_fee)}\n </Text>\n </Flex>\n </Flex>\n ),\n });\n };\n\n return (\n <Flex gap={1} width={\"100%\"}>\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1\"\n gap={1}\n >\n <SymbolToken {...props} />\n <PositionHistoryType {...props} />\n </Flex>\n <Flex direction={\"column\"} itemAlign={\"end\"} className=\"oui-flex-1\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"positions.history.column.netPnl\")}\n </Text>\n <Flex gapX={1}>\n <button onClick={showAlert}>\n <Text.numeral size=\"xs\" coloring>\n {props.item.netPnL ?? \"--\"}\n </Text.numeral>\n </button>\n\n <ShareButtonWidget\n position={props.item}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLBottomSheetId}\n iconSize={12}\n isPositionHistory\n />\n </Flex>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<PositionHistoryCellState> = (props) => {\n return (\n <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 { PositionHistorySide } 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 { commifyOptional } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const SymbolToken: FC<PositionHistoryCellState> = (props) => {\n const { side, symbol } = props.item;\n const { t } = useTranslation();\n const isBuy = side === PositionHistorySide.buy;\n\n return (\n <Text.formatted\n intensity={80}\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"sm\"\n // @ts-ignore\n prefix={\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? t(\"common.buy\") : t(\"common.sell\")}\n </Badge>\n }\n onClick={() => {\n props.onSymbolChange?.({ symbol: symbol } as API.Symbol);\n }}\n // showIcon\n >\n {symbol}\n </Text.formatted>\n );\n};\n\nexport const Time: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n\n return (\n <Text.formatted\n rule={\"date\"}\n formatString=\"yyyy-MM-dd hh:mm:ss\"\n intensity={36}\n size=\"2xs\"\n >\n {item.last_update_time}\n </Text.formatted>\n );\n};\n\nexport const PositionHistoryType: FC<PositionHistoryCellState> = (props) => {\n const { item: record } = props;\n const { t } = useTranslation();\n\n const showAlert = () => {\n modal.alert({\n title: t(\"positions.liquidation\"),\n message: (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n >\n {record.liquidation_id != null && (\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.liquidationId\")}</Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.liquidatorFee\")}</Text>\n <Text color=\"lose\">\n {record.liquidator_fee > 0 && \"-\"}\n {commifyOptional(record.liquidator_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.insFundFee\")}</Text>\n <Text color=\"lose\">\n {record.insurance_fund_fee > 0 && \"-\"}\n {commifyOptional(record.insurance_fund_fee)}\n </Text>\n </Flex>\n </Flex>\n ),\n });\n };\n\n const tags = useMemo(() => {\n const list: ReactNode[] = [];\n\n const status = record.position_status;\n\n const renderStatus = () => {\n if (status === \"closed\") {\n return t(\"positions.history.status.closed\");\n } else if (status === \"partial_closed\") {\n return t(\"positions.history.status.partialClosed\");\n } else {\n return capitalizeFirstLetter(status.replace(\"_\", \" \"));\n }\n };\n\n list.push(\n <Badge color={status !== \"closed\" ? \"primaryLight\" : \"neutral\"} size=\"xs\">\n {renderStatus()}\n </Badge>\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge color={\"danger\"} size=\"xs\">\n {/* {capitalizeFirstLetter(record.type)} */}\n {t(\"positions.history.type.adl\")}\n </Badge>\n );\n } else if (record.type === \"liquidated\") {\n list.push(\n <Badge\n size=\"xs\"\n color=\"danger\"\n className=\"oui-cursor-pointer\"\n onClick={showAlert}\n >\n <span className=\"oui-underline oui-decoration-dashed oui-decoration-[1px]\">\n {/* {capitalizeFirstLetter(record.type)} */}\n {t(\"positions.history.type.liquidated\")}\n </span>\n </Badge>\n );\n }\n\n return list;\n }, [record]);\n\n return <Flex gap={1}>{tags}</Flex>;\n};\n\nexport const ClosedQty: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const closedQty =\n item.closed_position_qty != null\n ? Math.abs(item.closed_position_qty)\n : \"--\";\n\n return (\n <Statistic\n // label={\n // <Text>Closed{<Text intensity={20}>{` (${props.base})`}</Text>}</Text>\n // }\n label={<Text>{t(\"positions.history.column.closed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring intensity={80}>\n {closedQty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MaxClosedQty: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const maxClosedQty =\n item.max_position_qty != null ? Math.abs(item.max_position_qty) : \"--\";\n return (\n <Statistic\n // label={\n // <Text>\n // Max closed{<Text intensity={20}>{` (${props.base})`}</Text>}\n // </Text>\n // }\n label={<Text>{t(\"positions.history.column.maxClosed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring intensity={80}>\n {maxClosedQty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const avgOpen =\n item.avg_open_price != null ? Math.abs(item.avg_open_price) : \"--\";\n const { t } = useTranslation();\n return (\n <Statistic\n label={\n <Flex gap={1}>\n {t(\"common.avgOpen\")}\n <Text intensity={20}>(USDC)</Text>\n </Flex>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} padding={false} coloring intensity={80}>\n {avgOpen}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgClosed: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const avgClose =\n item.avg_close_price != null ? Math.abs(item.avg_close_price) : \"--\";\n const { t } = useTranslation();\n return (\n <Statistic\n label={\n <Flex gap={1}>\n {t(\"common.avgClose\")}\n <Text intensity={20}>(USDC)</Text>\n </Flex>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} padding={false} coloring intensity={80}>\n {avgClose}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const OpenTime: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={<Text>{t(\"positions.history.column.timeOpened\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n <Text.formatted\n intensity={80}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n rule={\"date\"}\n >\n {item.open_timestamp}\n </Text.formatted>\n </Statistic>\n );\n};\nexport const ClosedTime: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const child =\n item.position_status == \"closed\" && item.close_timestamp ? (\n <Text.formatted\n intensity={80}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n rule={\"date\"}\n >\n {item.close_timestamp}\n </Text.formatted>\n ) : (\n \"--\"\n );\n\n return (\n <Statistic\n label={<Text>{t(\"positions.history.column.timeClosed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n {child}\n </Statistic>\n );\n};\n","import {\n useAccount,\n usePrivateQuery,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { PositionHistoryProps } from \"./positionHistory.widget\";\nimport { API } from \"@orderly.network/types\";\nimport { usePagination, useScreen } from \"@orderly.network/ui\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { differenceInDays, setDate, setHours, subDays } from \"date-fns\";\nimport {\n areDatesEqual,\n formatDatePickerRange,\n offsetEndOfDay,\n offsetStartOfDay,\n} from \"../../utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type PositionHistoryExt = API.PositionHistory & {\n netPnL?: number;\n};\n\nexport enum PositionHistorySide {\n all = \"all\",\n buy = \"LONG\",\n sell = \"SHORT\",\n}\nexport enum PositionHistoryStatus {\n all = \"all\",\n closed = \"closed\",\n partial_closed = \"partial_closed\",\n}\n\nexport const usePositionHistoryScript = (props: PositionHistoryProps) => {\n const { onSymbolChange, symbol, pnlNotionalDecimalPrecision } = props;\n const { state } = useAccount();\n\n const { data, isLoading } = usePrivateQuery<PositionHistoryExt[]>(\n symbol\n ? `/v1/position_history?symbol=${symbol}&limit=1000`\n : \"/v1/position_history?limit=1000\",\n {\n formatter(data) {\n return (data.rows ?? null)?.map(\n (item: API.PositionHistory): PositionHistoryExt => {\n if (\n item.realized_pnl != null &&\n item.accumulated_funding_fee != null &&\n item.trading_fee != null\n ) {\n const netPnL =\n item.realized_pnl -\n item.accumulated_funding_fee -\n item.trading_fee;\n return {\n ...item,\n netPnL: netPnL,\n };\n }\n return item;\n }\n );\n },\n revalidateOnFocus: true,\n }\n );\n\n const { pagination, setPage } = usePagination({\n pageSize: 10,\n });\n\n const {\n status,\n side,\n dateRange,\n filterDays,\n updateFilterDays,\n filterItems,\n onFilter,\n } = useFilter();\n\n useEffect(() => {\n setPage(1);\n }, [status, side, dateRange, filterDays, symbol]);\n\n const filterData = useMemo(() => {\n if (data == null) return data;\n\n return data.filter((item) => {\n const sideFilter =\n side === PositionHistorySide.all\n ? true\n : item.side.toLowerCase() === side.toLowerCase();\n const statusFilter =\n status === PositionHistoryStatus.all\n ? true\n : item.position_status.toLowerCase() === status.toLowerCase();\n\n // const time = item.close_timestamp ?? item?.last_update_timestamp ?? item.open_timestamp;\n const time = item?.last_update_time ?? item.open_timestamp;\n const dateFilter =\n dateRange.from && dateRange.to\n ? time >= dateRange.from.getTime() && time <= dateRange.to.getTime()\n : true;\n\n const symbolFilter = symbol ? item.symbol == symbol : true;\n\n return sideFilter && statusFilter && dateFilter && symbolFilter;\n });\n }, [status, side, dateRange, data, symbol]);\n\n const dataSource = useDataTap(filterData, {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n fallbackData: [],\n });\n\n return {\n dataSource,\n isLoading,\n onSymbolChange,\n pagination,\n filterItems,\n onFilter,\n symbol,\n filterDays,\n updateFilterDays,\n pnlNotionalDecimalPrecision,\n };\n};\n\nconst useFilter = () => {\n const { t } = useTranslation();\n\n const [status, setStatus] = useState<PositionHistoryStatus>(\n PositionHistoryStatus.all\n );\n const [side, setSide] = useState<PositionHistorySide>(\n PositionHistorySide.all\n );\n const defaultRange = formatDatePickerRange({\n to: offsetEndOfDay(new Date()),\n from: offsetStartOfDay(subDays(new Date(), 89)),\n });\n\n /// default is 90d\n const [filterDays, setFilterDays] = useState<1 | 7 | 30 | 90 | null>(90);\n\n const [dateRange, setDateRange] = useState<{\n from?: Date;\n to?: Date;\n }>(defaultRange);\n\n const updateFilterDays = (days: 1 | 7 | 30 | 90) => {\n setFilterDays(days);\n setDateRange({\n from: offsetStartOfDay(subDays(new Date(), days - 1)),\n to: offsetEndOfDay(new Date()),\n });\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"side\") {\n setSide(filter.value);\n }\n\n if (filter.name === \"status\") {\n setStatus(filter.value);\n }\n\n if (filter.name === \"dateRange\") {\n const newDateRange = formatDatePickerRange(filter.value);\n setDateRange(newDateRange);\n if (newDateRange.from && newDateRange.to) {\n const diffDays =\n Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) + 1;\n const dateRangeMap: { [key: number]: { from: Date; to: Date } } = {\n 1: {\n from: offsetStartOfDay(new Date())!,\n to: offsetEndOfDay(new Date())!,\n },\n 7: {\n from: offsetStartOfDay(subDays(new Date(), 6))!,\n to: offsetEndOfDay(new Date())!,\n },\n 30: {\n from: offsetStartOfDay(subDays(new Date(), 29))!,\n to: offsetEndOfDay(new Date())!,\n },\n 90: {\n from: offsetStartOfDay(subDays(new Date(), 89))!,\n to: offsetEndOfDay(new Date())!,\n },\n };\n\n const dateRange = dateRangeMap[diffDays];\n if (\n dateRange &&\n areDatesEqual(dateRange.from, newDateRange.from) &&\n areDatesEqual(dateRange.to, newDateRange.to)\n ) {\n setFilterDays(diffDays as any);\n } else {\n setFilterDays(null);\n }\n }\n }\n };\n\n const { isMobile } = useScreen();\n\n const filterItems = useMemo((): any[] => {\n const sideFilter = {\n type: \"select\",\n name: \"side\",\n options: [\n {\n label: t(\"common.side.all\"),\n value: \"all\",\n },\n {\n label: t(\"common.buy\"),\n value: PositionHistorySide.buy,\n },\n {\n label: t(\"common.sell\"),\n value: PositionHistorySide.sell,\n },\n ],\n value: side,\n };\n\n const dateRangeFilter = {\n type: \"range\",\n name: \"dateRange\",\n value: dateRange,\n fromDate: offsetStartOfDay(subDays(new Date(), 89)),\n toDate: offsetEndOfDay(new Date()),\n };\n\n const statusFilter = {\n type: \"select\",\n name: \"status\",\n options: [\n {\n label: t(\"common.status.all\"),\n value: \"all\",\n },\n {\n label: t(\"positions.history.status.closed\"),\n value: PositionHistoryStatus.closed,\n },\n {\n label: t(\"positions.history.status.partialClosed\"),\n value: PositionHistoryStatus.partial_closed,\n },\n ],\n value: status,\n };\n\n if (isMobile) {\n return [sideFilter, statusFilter];\n }\n return [sideFilter, statusFilter, dateRangeFilter];\n }, [side, status, dateRange]);\n\n return {\n filterItems,\n onFilter,\n side,\n dateRange,\n status,\n filterDays,\n updateFilterDays,\n };\n};\n\nexport type PositionHistoryState = ReturnType<typeof usePositionHistoryScript>;\n","import { differenceInDays, setDate, setHours, subDays } from \"date-fns\";\n\nexport const parseDateRangeForFilter = (dateRange: {\n from: Date;\n to?: Date;\n}) => {\n let { from, to } = dateRange;\n\n if (typeof to === \"undefined\") {\n to = new Date();\n }\n\n const diff = differenceInDays(from, to);\n\n // console.log(\"diff\", diff);\n\n if (diff === 0) {\n return [from, setHours(to, 23)];\n }\n\n return [from, to];\n};\n\nexport function offsetStartOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(0, 0, 0, 0);\n return newDate;\n}\n\nexport function offsetEndOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(23, 59, 59, 999);\n return newDate;\n}\n\nexport const formatDatePickerRange = (option: { from?: Date; to?: Date }) => ({\n from: offsetStartOfDay(option.from),\n to: offsetEndOfDay(option.to ?? option.from),\n});\n\nexport const areDatesEqual = (date1: Date, date2: Date): boolean => {\n return date1.getTime() === date2.getTime();\n};\n","import { API } from \"@orderly.network/types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { SymbolInfo } from \"../desktop/usePositionHistoryColumn\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const usePositionHistoryCellScript = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const symbolInfo = useSymbolContext();\n\n return {\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type PositionHistoryCellState = ReturnType<\n typeof usePositionHistoryCellScript\n>;\n","import { API } from \"@orderly.network/types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { usePositionHistoryCellScript } from \"./positionHistoryCell.script\";\nimport { PositionHistoryCell } from \"./positionHistoryCell.ui\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const PositionHistoryCellWidget = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const state = usePositionHistoryCellScript(props);\n return <PositionHistoryCell {...state} />;\n};\n","import { API } from \"@orderly.network/types\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { usePositionHistoryScript } from \"./positionHistory.script\";\nimport { MobilePositionHistory, PositionHistory } from \"./positionHistory.ui\";\n\nexport type PositionHistoryProps = {\n onSymbolChange?: (symbol: API.Symbol) => void;\n symbol?: string;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n};\n\nexport const PositionHistoryWidget = (props: PositionHistoryProps) => {\n const state = usePositionHistoryScript(props);\n return <PositionHistory {...state} sharePnLConfig={props.sharePnLConfig} />;\n};\n\nexport const MobilePositionHistoryWidget = (\n props: PositionHistoryProps & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }\n) => {\n const { classNames, ...rest } = props;\n const state = usePositionHistoryScript(rest);\n return (\n <MobilePositionHistory\n {...state}\n classNames={classNames}\n sharePnLConfig={props.sharePnLConfig}\n />\n );\n};\n","import { FC } from \"react\";\nimport {\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 { 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 { commifyOptional } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const useLiquidationColumn = (props: {}) => {\n const { t } = useTranslation();\n\n const column = useMemo(\n () =>\n [\n // Time\n {\n title: t(\"common.time\"),\n dataIndex: \"timestamp\",\n fixed: \"left\",\n width: 202,\n render: (value: string) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {value}\n </Text.formatted>\n ),\n },\n // Liquidation id\n {\n title: t(\"positions.Liquidation.column.liquidationId\"),\n dataIndex: \"liquidation_id\",\n width: 202,\n render: (value) => <Text>{value}</Text>,\n },\n // net pnl\n {\n title: t(\"positions.Liquidation.column.insFundTransfer\"),\n dataIndex: \"transfer_amount_to_insurance_fund\",\n width: 202,\n render: (value) => {\n return <Text>{commifyOptional(value)}</Text>;\n },\n },\n // Symbol\n {\n title: t(\"common.symbol\"),\n dataIndex: \"Symbol\",\n width: 202,\n render: (_: any, record) => (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n <Text.formatted rule={\"symbol\"} formatString=\"base-quote\">\n {item.symbol}\n </Text.formatted>\n ))}\n </Flex>\n ),\n },\n // Price (USDC)\n {\n title: `${t(\"common.price\")} (USDC)`,\n dataIndex: \"Price_(USDC)\",\n width: 202,\n render: (_: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText value={item.transfer_price} type=\"quote\" />\n ))}\n </Flex>\n );\n },\n },\n // Quantity\n {\n title: t(\"common.quantity\"),\n dataIndex: \"Quantity\",\n width: 202,\n render: (_: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText value={item.position_qty} type=\"base\" />\n ))}\n </Flex>\n );\n },\n },\n // Liquidation Fee\n {\n title: t(\"positions.Liquidation.column.liquidationFee\"),\n dataIndex: \"abs_liquidation_fee\",\n width: 202,\n render: (abs_liquidation_fee: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText\n value={item.abs_liquidation_fee}\n type=\"quote\"\n />\n ))}\n </Flex>\n );\n },\n },\n ] as Column<API.Liquidation>[],\n [t]\n );\n\n return column;\n};\n\nconst FormattedText: FC<{ value?: string | number; type: \"base\" | \"quote\" }> = (\n props\n) => {\n // const { quote_dp, base_dp } = useSymbolContext();\n return <Text>{commifyOptional(props.value)}</Text>;\n};\n","import { FC } from \"react\";\nimport { cn, Flex, Grid, Text } from \"@orderly.network/ui\";\nimport { LiquidationCellState } from \"./liquidationCell.script\";\nimport { LiquidationFee, Price, Quantity } from \"./items\";\nimport { API } from \"@orderly.network/types\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const LiquidationCell: FC<\n LiquidationCellState & {\n classNames?: {\n root?: string;\n };\n }\n> = (props) => {\n return (\n <Flex\n key={props.item.timestamp}\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n itemAlign={\"start\"}\n className={props.classNames?.root}\n >\n <Header {...props} />\n <Body {...props} />\n </Flex>\n );\n};\n\nexport const Header: FC<LiquidationCellState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex gap={1} width={\"100%\"}>\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1\"\n gap={1}\n >\n <Text.formatted\n size=\"2xs\"\n intensity={36}\n rule={\"date\"}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n >\n {props.item.timestamp}\n </Text.formatted>\n <Flex gap={1}>\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"positions.Liquidation.column.liquidationId\")}:`}\n </Text>\n <Text\n size=\"2xs\"\n intensity={80}\n >{` ${props.item.liquidation_id}`}</Text>\n </Flex>\n </Flex>\n <Flex direction={\"column\"} itemAlign={\"end\"} className=\"oui-flex-1\">\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"positions.Liquidation.column.insFundTransfer\")}:`}\n </Text>\n <Text intensity={80} size=\"xs\">\n {commifyOptional(props.item.transfer_amount_to_insurance_fund)}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<LiquidationCellState> = (props) => {\n return (\n <Flex direction={\"column\"} width={\"100%\"}>\n {props.item.positions_by_perp?.map((item, index) => {\n return (\n <Cell\n key={`${index}-${item.symbol}`}\n isLast={index === props.item.positions_by_perp.length - 1}\n {...item}\n />\n );\n })}\n </Flex>\n );\n};\n\nconst Cell: FC<\n API.LiquidationPositionByPerp & {\n isLast: boolean;\n key: string;\n }\n> = (props) => {\n return (\n <Flex\n key={props.key}\n width={\"100%\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-border-t-[1px] oui-border-line-6 oui-pt-2\",\n !props.isLast && \"oui-pb-2\"\n )}\n >\n <Text.formatted\n rule={\"symbol\"}\n formatString=\"base-quote\"\n size=\"xs\"\n intensity={80}\n className=\"oui-flex-1\"\n >\n {props.symbol}\n </Text.formatted>\n <Grid cols={1} rows={3} width={\"100%\"} gap={1} className=\"oui-flex-1\">\n <Price {...props} />\n <Quantity {...props} />\n <LiquidationFee {...props} />\n </Grid>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const Price: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n const { t } = useTranslation();\n\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Flex gap={1}>\n <Text size=\"2xs\" intensity={36}>\n {t(\"common.price\")}\n </Text>\n <Text size=\"2xs\" intensity={20}>\n (USDC)\n </Text>\n </Flex>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.transfer_price}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.transfer_price)}\n </Text>\n </Flex>\n );\n};\nexport const Quantity: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n const { t } = useTranslation();\n\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n {t(\"common.quantity\")}\n </Text>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.position_qty}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.position_qty)}\n </Text>\n </Flex>\n );\n};\nexport const LiquidationFee: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n const { t } = useTranslation();\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n {t(\"positions.Liquidation.column.liquidationFee\")}\n </Text>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.abs_liquidation_fee}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.abs_liquidation_fee)}\n </Text>\n </Flex>\n );\n};\n","import { API } from \"@orderly.network/types\";\n\nexport const useLiquidationCellScript = (props: {\n item: API.Liquidation;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n}) => {\n\n return {\n ...props\n };\n};\n\nexport type LiquidationCellState = ReturnType<typeof useLiquidationCellScript>;\n","import { API } from \"@orderly.network/types\";\nimport { useLiquidationCellScript } from \"./liquidationCell.script\";\nimport { LiquidationCell } from \"./liquidationCell.ui\";\n\nexport const LiquidationCellWidget = (props: {\n item: API.Liquidation;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n}) => {\n const { classNames, ...rest } = props;\n const state = useLiquidationCellScript(rest);\n return <LiquidationCell classNames={classNames} {...state} />;\n};\n","import {\n usePrivateInfiniteQuery,\n usePrivateQuery,\n} from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { API } from \"@orderly.network/types\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n areDatesEqual,\n formatDatePickerRange,\n offsetEndOfDay,\n offsetStartOfDay,\n} from \"../../utils\";\nimport { differenceInDays, subDays } from \"date-fns\";\nimport { usePagination, useScreen } from \"@orderly.network/ui\";\nimport { LiquidationProps } from \"./liquidation.widget\";\n\nexport const useLiquidationScript = (props: LiquidationProps) => {\n const { symbol, enableLoadMore } = props;\n const { page, pageSize, setPage, pagination, parsePagination } =\n usePagination({\n pageSize: 10,\n });\n\n const { dateRange, filterDays, updateFilterDays, filterItems, onFilter } =\n useFilter();\n\n useEffect(() => {\n setPage(1);\n }, [symbol, dateRange, filterDays]);\n\n const [data, { meta, isLoading, loadMore }] = useLiquidation({\n page: enableLoadMore ? undefined : page,\n size: pageSize,\n symbol,\n start_t: dateRange.from != null ? dateRange.from.getTime() : undefined,\n end_t: dateRange.to != null ? dateRange.to.getTime() : undefined,\n });\n\n const dataSource = useDataTap(data, {\n fallbackData: [],\n });\n\n // useEffect(() => {\n // setPage(1);\n // }, [dateRange, filterDays]);\n\n // console.log(\"pagination\", pagination, meta);\n\n return {\n dataSource,\n isLoading,\n loadMore,\n\n pagination: parsePagination(meta),\n\n // filter\n dateRange,\n filterDays,\n updateFilterDays,\n filterItems,\n onFilter,\n };\n};\n\nexport type LiquidationState = ReturnType<typeof useLiquidationScript>;\n\n/**\n *\n * @param props size default is 100\n */\nconst useLiquidation = (props: {\n symbol?: string;\n start_t?: number;\n end_t?: number;\n page?: number;\n size?: number;\n}) => {\n const ordersResponse = usePrivateInfiniteQuery<API.Liquidation>(\n generateKeyFun(props),\n {\n initialSize: 1,\n formatter: (data) => data,\n revalidateOnFocus: true,\n }\n );\n\n const meta = useMemo(() => {\n // @ts-ignore\n return ordersResponse.data?.[0]?.meta;\n }, [ordersResponse.data?.[0]]);\n\n const data = useMemo(() => {\n return ordersResponse.data?.map((item: any) => item.rows)?.flat();\n }, [ordersResponse.data]);\n\n const isLoading = ordersResponse.isLoading;\n\n const loadMore = () => {\n ordersResponse.setSize(ordersResponse.size + 1);\n };\n\n return [data, { meta, isLoading, loadMore }] as const;\n};\n\nconst useFilter = () => {\n const defaultRange = formatDatePickerRange({\n to: offsetEndOfDay(new Date()),\n from: offsetStartOfDay(subDays(new Date(), 89)),\n });\n\n /// default is 90d\n const [filterDays, setFilterDays] = useState<1 | 7 | 30 | 90 | null>(90);\n\n const [dateRange, setDateRange] = useState<{\n from?: Date;\n to?: Date;\n }>(defaultRange);\n\n const updateFilterDays = (days: 1 | 7 | 30 | 90) => {\n setFilterDays(days);\n setDateRange({\n from: offsetStartOfDay(subDays(new Date(), days - 1)),\n to: offsetEndOfDay(new Date()),\n });\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"dateRange\") {\n const newDateRange = formatDatePickerRange(filter.value);\n setDateRange(newDateRange);\n if (newDateRange.from && newDateRange.to) {\n const diffDays =\n Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) + 1;\n const dateRangeMap: { [key: number]: { from: Date; to: Date } } = {\n 1: {\n from: offsetStartOfDay(new Date())!,\n to: offsetEndOfDay(new Date())!,\n },\n 7: {\n from: offsetStartOfDay(subDays(new Date(), 6))!,\n to: offsetEndOfDay(new Date())!,\n },\n 30: {\n from: offsetStartOfDay(subDays(new Date(), 29))!,\n to: offsetEndOfDay(new Date())!,\n },\n 90: {\n from: offsetStartOfDay(subDays(new Date(), 89))!,\n to: offsetEndOfDay(new Date())!,\n },\n };\n\n const dateRange = dateRangeMap[diffDays];\n if (\n dateRange &&\n areDatesEqual(dateRange.from, newDateRange.from) &&\n areDatesEqual(dateRange.to, newDateRange.to)\n ) {\n setFilterDays(diffDays as any);\n } else {\n setFilterDays(null);\n }\n }\n }\n };\n\n const { isMobile } = useScreen();\n\n const filterItems = useMemo((): any[] => {\n const dateRangeFilter = {\n type: \"range\",\n name: \"dateRange\",\n value: dateRange,\n fromDate: offsetStartOfDay(subDays(new Date(), 89)),\n toDate: offsetEndOfDay(new Date()),\n };\n\n if (isMobile) {\n return [dateRangeFilter];\n }\n return [dateRangeFilter];\n }, [dateRange]);\n\n return {\n filterItems,\n onFilter,\n dateRange,\n filterDays,\n updateFilterDays,\n };\n};\n\nconst generateKeyFun =\n (args: {\n symbol?: string;\n start_t?: number;\n end_t?: number;\n page?: number;\n size?: number;\n }) =>\n (pageIndex: number, previousPageData: any): string | null => {\n // reached the end\n if (previousPageData && !previousPageData.rows?.length) return null;\n\n const { symbol, size = 10, page, end_t, start_t } = args;\n\n const search = new URLSearchParams([\n [\"size\", size.toString()],\n [\"page\", `${pageIndex + 1}`],\n ]);\n\n if (page) {\n search.set(\"page\", `${page}`);\n }\n\n if (symbol) {\n search.set(`symbol`, symbol);\n }\n\n if (end_t) {\n search.set(`end_t`, `${end_t}`);\n }\n\n if (start_t) {\n search.set(`start_t`, `${start_t}`);\n }\n\n return `/v1/liquidations?${search.toString()}`;\n };\n","import { useLiquidationScript } from \"./liquidation.script\";\nimport { Liquidation, MobileLiquidation } from \"./liquidation.ui\";\n\nexport type LiquidationProps = {\n symbol?: string;\n enableLoadMore?: boolean;\n}\n\nexport const LiquidationWidget = (props: LiquidationProps) => {\n const state = useLiquidationScript(props);\n return (<Liquidation {...state} />);\n};\n\nexport const MobileLiquidationWidget = (props: LiquidationProps & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }) => {\n\n const { classNames, ...rest} = props;\n const state = useLiquidationScript(rest);\n return (<MobileLiquidation classNames={classNames} {...state} />);\n};\n"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/positions/desktop/closeButton.tsx","../src/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","Box","createContext","useContext","useEffect","useMemo","useState","OrderSide","OrderType","useOrderEntry_deprecated","useSymbolsInfo","useTranslation","jsx","PositionsRowContext","usePositionsRowContext","PositionsRowProvider","props","quantity","setQuantity","t","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","useOrderEntryFormErrorMsg","Fragment","jsxs","CloseButton","open","setOpen","base","quote","orderConfirm","parseErrorMsg","onConfirm","res","onClose","disabled","e","quantityMsg","priceMsg","MarketCloseConfirm","LimitConfirmDialog","ConfirmHeader","hideCloseIcon","ConfirmFooter","onCancel","OrderDetail","total","ListView","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","list","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","Label","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","orderQuantityErrorMsg","orderPriceErrorMsg","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","status","renderStatus","netPnl","text","useAccount","usePrivateQuery","AccountStatusEnum","useScreen","differenceInDays","subDays","setHours","offsetStartOfDay","date","newDate","offsetEndOfDay","formatDatePickerRange","option","areDatesEqual","date1","date2","usePositionHistoryScript","netPnL","dateRange","filterDays","updateFilterDays","filterItems","onFilter","useFilter","filterData","sideFilter","statusFilter","time","dateFilter","symbolFilter","setStatus","setSide","defaultRange","setFilterDays","setDateRange","days","filter","newDateRange","diffDays","isMobile","dateRangeFilter","PositionHistoryType","showAlert","ClosedQty","closedQty","MaxClosedQty","maxClosedQty","AvgClosed","OpenTime","ClosedTime","PositionHistoryCell","usePositionHistoryCellScript","PositionHistoryCellWidget","PositionHistory","dayLabel","MobilePositionHistory","PositionHistoryWidget","MobilePositionHistoryWidget","classNames","useLiquidationColumn","FormattedText","abs_liquidation_fee","Price","LiquidationFee","LiquidationCell","Cell","useLiquidationCellScript","LiquidationCellWidget","Liquidation","MobileLiquidation","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 toast,\n Text,\n CloseIcon,\n Flex,\n Divider,\n Badge,\n SimpleDialog,\n ThrottledButton,\n Box,\n} from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { FC, useMemo, useState } from \"react\";\nimport { OrderEntity, OrderSide, OrderType } from \"@orderly.network/types\";\nimport { commify, commifyOptional, Decimal } from \"@orderly.network/utils\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@orderly.network/react-app\";\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 const { base, quote } = useSymbolContext();\n const [orderConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n\n const { t } = useTranslation();\n const { parseErrorMsg } = useOrderEntryFormErrorMsg(errors);\n\n const onConfirm = () => {\n return onSubmit()\n .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 )\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 = parseErrorMsg(\"order_quantity\");\n const priceMsg = parseErrorMsg(\"order_price\");\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 {t(\"positions.column.close\")}\n </Button>\n <SimpleDialog open={open} onOpenChange={setOpen} size=\"sm\">\n {type === OrderType.MARKET ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n onClose={onClose}\n onConfirm={onConfirm}\n submitting={submitting}\n classNames={{\n root: \"oui-items-start\",\n }}\n hideCloseIcon\n />\n ) : (\n <LimitConfirmDialog\n base={base}\n quantity={quantity}\n price={price}\n onClose={onClose}\n onConfirm={onConfirm}\n submitting={submitting}\n quoteDp={quoteDp}\n order={closeOrderData}\n hideCloseIcon\n />\n )}\n </SimpleDialog>\n </>\n );\n};\n\nexport const ConfirmHeader: FC<{\n onClose?: () => void;\n title: string;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { hideCloseIcon = false } = props;\n return (\n <div className=\"oui-pb-3 oui-border-b oui-border-line-4 oui-relative oui-w-full\">\n <Text size={\"base\"}>{props.title}</Text>\n {!hideCloseIcon && (\n <button\n onClick={props.onClose}\n className=\"oui-absolute oui-right-0 oui-top-0 oui-text-base-contrast-54 hover:oui-text-base-contrast-80 oui-p-2\"\n >\n <CloseIcon size={18} color=\"white\" />\n </button>\n )}\n </div>\n );\n};\n\nexport const ConfirmFooter: FC<{\n onConfirm?: () => Promise<any>;\n onCancel?: () => void;\n submitting?: boolean;\n}> = ({ onCancel, onConfirm, submitting }) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n id=\"oui-positions-confirm-footer\"\n gap={2}\n width={\"100%\"}\n className=\"oui-mt-3 oui-pb-1\"\n >\n <Button\n id=\"oui-positions-confirm-footer-cancel-button\"\n color={\"secondary\"}\n fullWidth\n onClick={onCancel}\n size=\"md\"\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton\n id=\"oui-positions-confirm-footer-confirm-button\"\n onClick={onConfirm}\n fullWidth\n loading={submitting}\n size=\"md\"\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n );\n};\n\nexport const OrderDetail = (props: {\n quantity: any;\n price: any;\n side: OrderSide;\n quoteDp: number;\n className?: string;\n}) => {\n const { quantity, price, quoteDp, side } = props;\n const { t } = useTranslation();\n\n const total = useMemo(() => {\n if (price && quantity) {\n return new Decimal(price)\n .mul(quantity)\n .toFixed(quoteDp, Decimal.ROUND_DOWN);\n }\n return \"--\";\n }, [price, quantity]);\n\n return (\n <Flex\n direction={\"column\"}\n gap={1}\n width={\"100%\"}\n className=\"oui-text-sm oui-text-base-contrast-54\"\n py={5}\n >\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.qty\")}</Text>\n <Text color={side === OrderSide.BUY ? \"success\" : \"danger\"}>\n {quantity}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.price\")}</Text>\n <Text.formatted\n intensity={98}\n suffix={<Text intensity={54}>USDC</Text>}\n >\n {price}\n </Text.formatted>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.notional\")}</Text>\n <Text.formatted\n intensity={98}\n suffix={<Text intensity={54}>USDC</Text>}\n >\n {total}\n </Text.formatted>\n </Flex>\n </Flex>\n );\n};\n\nexport const MarketCloseConfirm: FC<{\n base?: string;\n quantity?: string;\n onClose?: () => void;\n close?: () => void;\n onConfirm?: () => Promise<any>;\n submitting?: boolean;\n hideCloseIcon?: boolean;\n classNames?: {\n root?: string;\n };\n}> = (props) => {\n const { t } = useTranslation();\n\n const onCancel = () => {\n const func = props?.onClose ?? props.close;\n func?.();\n };\n return (\n <Flex direction={\"column\"} className={props.classNames?.root}>\n <ConfirmHeader\n onClose={onCancel}\n title={t(\"positions.marketClose\")}\n hideCloseIcon={props.hideCloseIcon}\n />\n <Text intensity={54} size=\"sm\" className=\"oui-my-5\">\n {t(\"positions.marketClose.description\", {\n quantity: commifyOptional(props.quantity),\n base: props.base,\n })}\n </Text>\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={async () => {\n await props.onConfirm?.();\n onCancel();\n }}\n submitting={props.submitting}\n />\n </Flex>\n );\n};\n\nexport const LimitConfirmDialog: FC<{\n base: string;\n quantity: string;\n price: string;\n onClose?: () => void;\n onConfirm: () => Promise<any>;\n order: OrderEntity;\n submitting: boolean;\n quoteDp?: number;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { order, quoteDp, quantity, price, submitting } = props;\n const { side } = order;\n const { t } = useTranslation();\n\n const onCancel = () => {\n props.onClose?.();\n };\n\n return (\n <>\n <ConfirmHeader\n onClose={onCancel}\n title={t(\"positions.limitClose\")}\n hideCloseIcon={props.hideCloseIcon}\n />\n <Box mt={5}>\n <Text intensity={54} size=\"sm\">\n {t(\"positions.limitClose.description\", {\n quantity: commify(props.quantity),\n base: props.base,\n })}\n </Text>\n </Box>\n\n <Flex gap={2} mb={4} mt={5} justify={\"between\"}>\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"base\"\n showIcon\n >\n {order.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n {t(\"orderEntry.orderType.limit\")}\n </Badge>\n <Badge\n color={side === OrderSide.BUY ? \"success\" : \"danger\"}\n size=\"xs\"\n >\n {side === OrderSide.BUY ? t(\"common.buy\") : t(\"common.sell\")}\n </Badge>\n </Flex>\n </Flex>\n\n <Divider className=\"oui-w-full\" />\n\n <OrderDetail\n className=\"oui-text-sm\"\n price={price}\n quantity={quantity}\n side={order.side}\n quoteDp={quoteDp ?? 2}\n />\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={props.onConfirm}\n submitting={props.submitting}\n />\n </>\n );\n};\n","import {\n FC,\n PropsWithChildren,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { API, OrderEntity, OrderSide, OrderType } from \"@orderly.network/types\";\nimport {\n useOrderEntry_deprecated,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 const { t } = useTranslation();\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(t(\"orderEntry.orderPrice.error.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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 { t } = useTranslation();\n\n const column = useMemo(\n () =>\n [\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 140,\n onSort: (r1, r2) => {\n return r1.symbol.localeCompare(r2.symbol);\n // if (sortOrder === \"asc\") {\n // return r1.symbol.localeCompare(r2.symbol);\n // }\n // return r2.symbol.localeCompare(r1.symbol);\n },\n render: (value: string, record) => (\n <Flex gap={2}>\n <Box\n width={4}\n height={20}\n className={cn(\n \"oui-rounded-[1px]\",\n record.position_qty > 0\n ? \"oui-bg-trade-profit\"\n : \"oui-bg-trade-loss\"\n )}\n />\n\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: t(\"common.quantity\"),\n dataIndex: \"position_qty\",\n // onSort: true,\n onSort: (a, b) => {\n return a.position_qty - b.position_qty;\n },\n width: 120,\n className: \"oui-pl-6\",\n // rule: \"price\",\n // numeralProps: {\n // coloring: true,\n // // tick: \"base_dp\",\n // },\n render: renderQuantity,\n // render: (value: string) => (\n // <NumeralWithCtx\n // coloring\n // className=\"oui-font-semibold\"\n // tick=\"base_dp\"\n // >\n // {value}\n // </NumeralWithCtx>\n // ),\n },\n {\n title: t(\"common.avgOpen\"),\n className: \"oui-h-[48px]\",\n width: 120,\n onSort: true,\n dataIndex: \"average_open_price\",\n render: (value: string, record: any) => {\n // const ctx = usePositionsRowContext();\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: t(\"common.markPrice\"),\n dataIndex: \"mark_price\",\n width: 120,\n onSort: true,\n className: \"oui-h-[48px]\",\n\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={t(\"positions.column.liqPrice.tooltip\")}\n >\n <Text>{t(\"positions.column.liqPrice\")}</Text>\n </Tooltip>\n ),\n width: 100,\n onSort: true,\n dataIndex: \"est_liq_price\",\n render: (value: string, 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>{t(\"common.unrealizedPnl\")}</Text>\n </HoverCard>\n ),\n dataIndex: \"unrealized_pnl\",\n width: 180,\n onSort: true,\n rule: \"price\",\n numeralProps: {\n coloring: true,\n // tick: \"base_dp\",\n },\n // hint: <UnrealizedPnLPopoverCard />,\n render: (value: string, record: 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: t(\"common.tpsl\"),\n dataIndex: \"__\",\n width: 150,\n render: (_: string, record) => (\n <TriggerPrice\n stopLossPrice={record.sl_trigger_price}\n takeProfitPrice={record.tp_trigger_price}\n />\n ),\n },\n\n {\n title: t(\"common.notional\"),\n dataIndex: \"notional\",\n className: \"oui-h-[48px]\",\n width: 100,\n onSort: true,\n render: (value: string) => (\n <Text.numeral dp={pnlNotionalDecimalPrecision}>\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 // @ts-ignore\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>{t(\"positions.column.margin.tooltip\")}</span>\n <Divider className=\"oui-w-full\" />\n <span>{t(\"positions.column.margin.formula\")}</span>\n </Flex>\n }\n >\n <Text>{t(\"positions.column.margin\")}</Text>\n </Tooltip>\n ),\n dataIndex: \"mm\",\n onSort: true,\n width: 100,\n rule: \"price\",\n render: (value: string) => <Text.numeral>{value}</Text.numeral>,\n // 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: t(\"common.qty\"),\n dataIndex: \"close_qty\",\n width: 100,\n fixed: \"right\",\n render: renderQuantityInput,\n },\n {\n title: t(\"common.price\"),\n dataIndex: \"close_price\",\n width: 100,\n fixed: \"right\",\n render: renderPriceInput,\n // render: (value: string) => <PriceInput />,\n },\n {\n title: \"\",\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, t]\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 { useState } from \"react\";\nimport {\n CaretDownIcon,\n cn,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Input,\n inputFormatter,\n} from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const PriceInput = () => {\n const { type, quoteDp, price, updatePriceChange, updateOrderType, position } =\n usePositionsRowContext();\n const [hasFocus, setHasFocus] = useState(false);\n const { t } = useTranslation();\n return (\n <DropdownMenuRoot>\n <Input\n size=\"sm\"\n value={\n type === OrderType.LIMIT ? price : t(\"orderEntry.orderType.market\")\n }\n onValueChange={(e) => updatePriceChange(e)}\n formatters={[\n inputFormatter.numberFormatter,\n ...(quoteDp ? [inputFormatter.dpFormatter(quoteDp)] : []),\n ]}\n onFocus={(e) => {\n if (type === OrderType.MARKET) {\n updateOrderType(OrderType.LIMIT, `${position.mark_price}`);\n }\n setHasFocus(true);\n }}\n onBlur={(e) => {\n setTimeout(() => {\n setHasFocus(false);\n }, 100);\n }}\n suffix={\n <DropdownMenuTrigger asChild>\n <button className=\"oui-px-1 oui-h-full\">\n <CaretDownIcon size={12} color=\"white\" />\n </button>\n </DropdownMenuTrigger>\n }\n classNames={{\n root: cn(\n \"oui-outline-line-12 focus-within:oui-outline-primary-light\"\n ),\n }}\n />\n <DropdownMenuContent\n align=\"end\"\n className=\"oui-w-[96px] oui-min-w-[96px]\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DropdownMenuGroup>\n <DropdownMenuItem\n size=\"xs\"\n onSelect={(vent) => {\n updateOrderType(OrderType.MARKET);\n }}\n >\n <span>{t(\"common.marketPrice\")}</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenuRoot>\n );\n};\n","import {\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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 { t } = useTranslation();\n const list = [\n {\n label: \"0%\",\n value: 0,\n },\n {\n label: \"25%\",\n value: 0.25,\n },\n {\n label: \"50%\",\n value: 0.5,\n },\n {\n label: \"75%\",\n value: 0.75,\n },\n {\n label: t(\"common.max\"),\n value: 1,\n },\n ];\n\n return (\n <Flex gap={2} width={\"100%\"}>\n {list.map((item, index) => {\n return (\n <Button\n key={index}\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n onClick={(e) => {\n e.stopPropagation();\n props.onClick(item.value);\n }}\n className=\"oui-w-1/5\"\n >\n {item.label}\n </Button>\n );\n })}\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { modal, ShareIcon } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { ShareButtonState } from \"./shareButton.script\";\n\nexport const ShareButton: FC<ShareButtonState> = (props) => {\n if (props.sharePnLConfig == null) return <></>;\n\n const { position } = props;\n\n const showModal = () => {\n const entity = props.isPositionHistory\n ? {\n side: position.side,\n pnl: position.netPnL,\n openPrice: Math.abs(position.avg_open_price),\n closePrice: Math.abs(position.avg_close_price),\n openTime: position.open_timestamp,\n closeTime: position.close_timestamp,\n quantity: position.closed_position_qty,\n }\n : {\n side: position.position_qty > 0 ? \"LONG\" : \"SHORT\",\n pnl: position.unrealized_pnl,\n roi: new Decimal(position.unrealized_pnl_ROI * 100).toFixed(\n 2,\n Decimal.ROUND_DOWN\n ),\n openPrice: Math.abs(position.average_open_price),\n markPrice: position.mark_price,\n openTime: position.timestamp,\n quantity: position.position_qty,\n };\n\n modal.show(props.modalId, {\n pnl: {\n entity: {\n symbol: position.symbol,\n ...entity,\n },\n refCode: props.refCode,\n ...props.sharePnLConfig,\n leverage: props.isPositionHistory ? undefined : props.leverage,\n },\n });\n };\n return (\n <button\n type=\"button\"\n onClick={(e: any) => {\n e.stopPropagation();\n showModal();\n }}\n >\n <ShareIcon color=\"white\" opacity={0.54} size={props.iconSize ?? 16} />\n </button>\n );\n};\n","import { useMemo } from \"react\";\nimport { useReferralInfo, useSymbolLeverage } from \"@orderly.network/hooks\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport type UseShareButtonScriptOptions = {\n position: any;\n sharePnLConfig?: SharePnLConfig;\n modalId: string;\n iconSize?: number;\n isPositionHistory?: boolean;\n};\n\nexport const useShareButtonScript = (props: UseShareButtonScriptOptions) => {\n const { sharePnLConfig, position, modalId, iconSize, isPositionHistory } =\n props;\n const { getFirstRefCode } = useReferralInfo();\n const refCode = useMemo(() => {\n return getFirstRefCode()?.code;\n }, [getFirstRefCode]);\n const leverage = useSymbolLeverage(props.position.symbol);\n return {\n iconSize,\n position,\n refCode,\n leverage,\n sharePnLConfig,\n modalId,\n isPositionHistory,\n };\n};\n\nexport type ShareButtonState = ReturnType<typeof useShareButtonScript>;\n","import {\n useShareButtonScript,\n UseShareButtonScriptOptions,\n} from \"./shareButton.script\";\nimport { ShareButton } from \"./shareButton.ui\";\n\nexport type ShareButtonWidgetProps = UseShareButtonScriptOptions;\n\nexport const ShareButtonWidget = (props: ShareButtonWidgetProps) => {\n const state = useShareButtonScript(props);\n return <ShareButton {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { AlgoOrderType, API, OrderSide } from \"@orderly.network/types\";\nimport { useSymbolsInfo, utils } from \"@orderly.network/hooks\";\nimport { cn, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { TPSLEditIcon } from \"./components\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const TriggerPrice: FC<{\n stopLossPrice?: number;\n takeProfitPrice?: number;\n}> = (props) => {\n const { stopLossPrice, takeProfitPrice } = props;\n const { tpslOrder, position } = usePositionsRowContext();\n\n return (\n <TPSLTriggerPrice\n stopLossPrice={stopLossPrice}\n takeProfitPrice={takeProfitPrice}\n direction={\"column\"}\n order={tpslOrder}\n position={position}\n tooltip\n />\n );\n};\n\nexport const TriggerPriceItem: FC<{\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n symbolInfo: API.SymbolExt;\n}> = (props) => {\n const { qty, price, entryPrice, orderSide, orderType, symbolInfo } = props;\n const pnl = utils.priceToPnl(\n {\n qty,\n price,\n entryPrice,\n orderSide,\n orderType,\n },\n {\n symbol: symbolInfo,\n }\n );\n\n const type = orderType === AlgoOrderType.TAKE_PROFIT ? \"TP\" : \"SL\";\n\n return (\n <Flex>\n <Text intensity={54} className=\"oui-mr-1\">{`${type} PnL:`}</Text>\n <Text.formatted\n rule=\"price\"\n className={\n pnl === 0\n ? \"oui-text-base-contrast-36\"\n : pnl > 0\n ? \"oui-text-trade-profit oui-gap-0\"\n : \"oui-text-trade-loss oui-gap-0\"\n }\n prefix={<Text>{pnl === 0 ? \"\" : pnl > 0 ? \"+\" : \"-\"}</Text>}\n suffix={\n <Text intensity={36} className=\"oui-ml-1\">\n USDC\n </Text>\n }\n >{`${Math.abs(pnl)}`}</Text.formatted>\n </Flex>\n );\n};\n\nexport const TPSLTriggerPrice: FC<{\n takeProfitPrice: number | undefined;\n stopLossPrice: number | undefined;\n className?: string;\n direction?: \"row\" | \"column\";\n tooltip?: boolean;\n order?: API.AlgoOrder;\n position?: API.PositionTPSLExt;\n}> = (props) => {\n const { direction = \"row\", order, position } = props;\n // const symbolInfo = useSymbolsInfo()[position?.symbol ?? \"\"]();\n const symbolInfo = useSymbolsInfo();\n const { t } = useTranslation();\n const pnl = useMemo(() => {\n const msgs = [];\n\n if (!props.tooltip || !order || !position) return;\n\n let quantity = order.quantity;\n\n if (quantity === 0) {\n if (order.child_orders[0].type === \"CLOSE_POSITION\") {\n quantity = position.position_qty;\n }\n }\n\n if (!!props.takeProfitPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"tp\"}\n qty={quantity}\n price={props.takeProfitPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.TAKE_PROFIT}\n symbolInfo={symbolInfo[order.symbol]()}\n />\n );\n }\n\n if (!!props.stopLossPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"sl\"}\n qty={quantity}\n price={props.stopLossPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.STOP_LOSS}\n symbolInfo={symbolInfo[order.symbol]()}\n />\n );\n }\n\n return <div>{msgs}</div>;\n }, [\n props.takeProfitPrice,\n props.stopLossPrice,\n position?.average_open_price,\n order?.side,\n order?.quantity,\n order?.algo_type,\n ]);\n\n const child = useMemo(() => {\n const children = [];\n\n if (!order?.symbol) return <span>-</span>;\n\n const Label = ({ children }: { children?: string }) => {\n return !props.stopLossPrice || direction === \"column\" ? (\n <Text intensity={54}>{children}</Text>\n ) : (\n \"\"\n );\n };\n\n if (props.takeProfitPrice) {\n children.push(\n <Text.formatted\n className={cn(\n \"oui-text-trade-profit oui-gap-0 oui-decoration-white/20\"\n )}\n key={\"tp\"}\n rule=\"price\"\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={props.takeProfitPrice}\n prefix={\n !props.stopLossPrice || direction === \"column\" ? (\n <Text intensity={54}>{`${t(\"tpsl.tp\")} - `}</Text>\n ) : (\n \"\"\n )\n }\n />\n );\n }\n if (props.stopLossPrice) {\n children.push(\n <Text.formatted\n key={\"sl\"}\n className={cn(\n \"oui-text-trade-loss oui-gap-0 oui-decoration-white/20 \"\n )}\n rule={\"price\"}\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={props.stopLossPrice}\n prefix={\n !props.takeProfitPrice || direction === \"column\" ? (\n <Text intensity={54}>{`${t(\"tpsl.sl\")} - `}</Text>\n ) : (\n \"\"\n )\n }\n />\n );\n }\n\n if (children.length === 0) return <Text>-</Text>;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <Text key={\"split\"}>/</Text>);\n }\n\n return children;\n }, [props.takeProfitPrice, props.stopLossPrice, order?.symbol, t]);\n\n const content = (\n <div\n className={cn(\n \"oui-inline-flex oui-text-base-contrast-36\",\n props.direction === \"column\"\n ? \"oui-flex-col\"\n : \"oui-flex-row oui-gap-1\",\n props.className\n )}\n >\n {child}\n </div>\n );\n\n const showIcon = Array.isArray(child) ? !!child.length : !child;\n\n if (props.tooltip) {\n return (\n <Flex gapX={2}>\n <Tooltip content={pnl}>{content}</Tooltip>\n {showIcon && <TPSLEditIcon />}\n </Flex>\n );\n }\n\n return content;\n};\n","import { PositionTPSLPopover } from \"@orderly.network/ui-tpsl\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { EditIcon } from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\n// ------------ TP/SL Price input end------------\nexport const TPSLButton = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n const { t } = useTranslation();\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n label={t(\"common.tpsl\")}\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing={false}\n />\n );\n};\n\nexport const TPSLEditIcon = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing\n >\n <EditIcon\n opacity={1}\n className=\"oui-text-base-contrast-54 oui-cursor-pointer\"\n size={16}\n />\n </PositionTPSLPopover>\n );\n};\n","import { FC } from \"react\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { Divider, Flex, Text } from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const UnrealizedPnLPopoverCard: FC<{}> = (props) => {\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\"\n );\n const { t } = useTranslation();\n return (\n <Flex\n direction={\"column\"}\n gap={3}\n className=\"oui-text-base-contrast-54 oui-items-start\"\n >\n <Text>{t(\"positions.column.unrealPnl.tooltip\")}</Text>\n <Divider className=\"oui-w-full\" />\n <div className=\"oui-mb-0\">\n {t(\"positions.column.unrealPnl.priceBasis\")}\n </div>\n <UnPnlPriceBasisCheckBox\n value={unPnlPriceBasis}\n onValueChange={setUnPnlPriceBasic}\n />\n </Flex>\n );\n};\n\nconst UnPnlPriceBasisCheckBox = (props: {\n value: string;\n onValueChange: (value: string) => void;\n}) => {\n const { value, onValueChange } = props;\n const { t } = useTranslation();\n\n // \"markPrice\" | \"lastPrice\"\n return (\n <Flex gap={2}>\n <RadioButton\n sel={value === \"markPrice\"}\n label={t(\"common.markPrice\")}\n value={\"markPrice\"}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === \"lastPrice\"}\n label={t(\"common.lastPrice\")}\n value={\"lastPrice\"}\n onCheckChange={onValueChange}\n />\n </Flex>\n );\n};\n\nconst RadioButton = (props: {\n sel: boolean;\n label: any;\n value: any;\n onCheckChange: (value: any) => void;\n}) => {\n const { sel, label, value, onCheckChange } = props;\n return (\n <Flex\n onClick={(e) => {\n onCheckChange(value);\n e.stopPropagation();\n }}\n gap={1}\n className=\"oui-cursor-pointer\"\n >\n {sel ? <SelIcon /> : <UnselIcon />}\n <Text size=\"xs\" intensity={sel ? 98 : 54}>\n {label}\n </Text>\n </Flex>\n );\n};\n\nconst SelIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-fill-white\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".36\"\n />\n <circle cx=\"8\" cy=\"8\" r=\"3.333\" />\n </svg>\n );\n};\n\nconst UnselIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".54\"\n />\n </svg>\n );\n};\n","import { FC } from \"react\";\nimport { NumeralProps, Text } from \"@orderly.network/ui\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\n\nexport type TickName = \"quote_dp\" | \"base_dp\";\n\nexport const NumeralWithCtx: FC<\n Omit<NumeralProps, \"precision\" | \"tick\"> & {\n tick?: TickName;\n }\n> = (props) => {\n const { tick = \"quote_dp\", ...rest } = props;\n const symbolInfo = useSymbolContext();\n\n if (!symbolInfo) {\n // TODO i18n\n throw new Error(\"NumeralWithCtx must be used inside SymbolProvider\");\n }\n\n // @ts-ignore\n return <Text.numeral as=\"span\" {...rest} dp={symbolInfo[tick]} />;\n};\n","import { FC } from \"react\";\nimport { 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 { FC } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { 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 { useTranslation } from \"@orderly.network/i18n\";\n\nexport const SymbolToken: FC<PositionCellState> = (props) => {\n const { item } = props;\n const isBuy = item.position_qty > 0;\n const { t } = useTranslation();\n return (\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"2xs\"\n suffix={\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? t(\"common.buy\") : t(\"common.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 const { t } = useTranslation();\n return (\n <Flex gap={3}>\n <Flex direction={\"column\"} className=\"oui-text-2xs\" itemAlign={\"end\"}>\n <div>\n <Text intensity={36}>{t(\"common.unrealizedPnl\")}</Text>\n <Text intensity={20}>(USDC)</Text>\n </div>\n\n <Text.numeral\n size=\"xs\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"orderly-font-semibold\"\n suffix={\n <Text.numeral\n rule=\"percentages\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n prefix=\"(\"\n suffix=\")\"\n className={cn(\n \"oui-ml-1\",\n item.unrealized_pnl_ROI > 0\n ? \"oui-text-success-darken\"\n : \"oui-text-danger-darken\"\n )}\n >\n {item.unrealized_pnl_ROI}\n </Text.numeral>\n }\n >\n {item.unrealized_pnl}\n </Text.numeral>\n </Flex>\n <ShareButtonWidget\n position={item}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLBottomSheetId}\n iconSize={12}\n />\n </Flex>\n );\n};\n\nexport const Qty: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.qty\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring>\n {item.position_qty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Margin: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={\n <span>\n {t(\"positions.column.margin\")}\n <Text intensity={20}>(USDC)</Text>\n </span>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} intensity={80}>\n {item.mm}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Notional: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n align=\"end\"\n label={\n <span>\n {t(\"common.notional\")}\n <Text intensity={20}>(USDC)</Text>\n </span>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} intensity={80}>\n {item.notional}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.avgOpen\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} intensity={80}>\n {item.average_open_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MarkPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n return (\n <Statistic\n label={t(\"common.markPrice\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} intensity={80}>\n {item.mark_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const LiqPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n const liqPrice =\n item.est_liq_price && item.est_liq_price > 0 ? item.est_liq_price : \"-\";\n\n return (\n <Statistic\n label={t(\"positions.column.liqPrice\")}\n align=\"end\"\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} color=\"warning\">\n {liqPrice}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const TPSLPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n if (item.tp_trigger_price == null && item.sl_trigger_price == null)\n return <></>;\n\n return (\n <Flex className=\"oui-text-2xs oui-text-base-contrast-36\">\n <Text>{`${t(\"common.tpsl\")}:`}&nbsp;</Text>\n <Flex className=\"oui-gap-[2px]\">\n {item.tp_trigger_price && (\n <Text.numeral color=\"buy\">{item.tp_trigger_price}</Text.numeral>\n )}\n {item.sl_trigger_price && \"/\"}\n {item.sl_trigger_price && (\n <Text.numeral color=\"sell\">{item.sl_trigger_price}</Text.numeral>\n )}\n </Flex>\n </Flex>\n );\n};\n","import { FC } 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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@orderly.network/react-app\";\n\nexport const LimitCloseBtn: FC<LimitCloseBtnState> = (props) => {\n const {\n item,\n sheetOpen,\n setSheetOpen,\n dialogOpen,\n setDialogOpen,\n updatePriceChange,\n base,\n quantity,\n price,\n onClose,\n onConfirm,\n submitting,\n quote_dp,\n closeOrderData,\n onCloseDialog,\n } = props;\n const isBuy = item.position_qty > 0;\n const { t } = useTranslation();\n const { parseErrorMsg } = useOrderEntryFormErrorMsg(props.errors);\n\n const orderQuantityErrorMsg = parseErrorMsg(\"order_quantity\");\n const orderPriceErrorMsg = parseErrorMsg(\"order_price\");\n\n const onBlur = (value: string) => {\n if (props.baseTick && props.baseTick > 0) {\n const formatQty = utils.formatNumber(value, props.baseTick) ?? value;\n props.updateQuantity(formatQty);\n }\n };\n\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={() => {\n updatePriceChange(\"limit\");\n setSheetOpen(true);\n }}\n >\n {t(\"positions.limitClose\")}\n </Button>\n\n {sheetOpen && (\n <SimpleSheet\n title={t(\"positions.limitClose\")}\n open={sheetOpen}\n onOpenChange={setSheetOpen}\n >\n <Flex\n direction={\"column\"}\n gap={3}\n width={\"100%\"}\n itemAlign={\"start\"}\n className=\"oui-text-sm\"\n >\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text.formatted rule={\"symbol\"} showIcon>\n {item.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n {t(\"orderEntry.orderType.limit\")}\n </Badge>\n {isBuy && (\n <Badge color=\"success\" size=\"xs\">\n {t(\"common.buy\")}\n </Badge>\n )}\n {!isBuy && (\n <Badge color=\"danger\" size=\"xs\">\n {t(\"common.sell\")}\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider className=\"oui-w-full\" />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text intensity={54}>{t(\"common.lastPrice\")}</Text>\n <Text.numeral\n dp={(props.item as any)?.symbolInfo?.quote_dp}\n suffix={<Text intensity={36}> USDC</Text>}\n >\n {props.curMarkPrice}\n </Text.numeral>\n </Flex>\n <Flex width={\"100%\"} direction={\"column\"} gap={2}>\n <Input.tooltip\n prefix={t(\"common.price\")}\n suffix={props.quote}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.quote_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={orderPriceErrorMsg}\n color={orderPriceErrorMsg ? \"danger\" : undefined}\n value={props.price}\n onValueChange={(e) => props.updatePriceChange(e)}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-outline-line-12 oui-w-full\",\n orderPriceErrorMsg ? \"oui-outline-danger\" : undefined\n ),\n }}\n />\n <Input\n prefix={t(\"common.quantity\")}\n suffix={props.base}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.base_dp),\n ]}\n // triggerClassName=\"oui-w-full\"\n // tooltip={orderQuantityErrorMsg}\n // color={\n // orderQuantityErrorMsg ? \"danger\" : undefined\n // }\n value={props.quantity}\n onBlur={(event) => onBlur(event.target.value)}\n onValueChange={(e) => {\n props.updateQuantity(e);\n const slider = new Decimal(e)\n .div(props.item.position_qty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n props.setSliderValue(slider);\n }}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-outline-line-12 oui-w-full\"\n // orderQuantityErrorMsg\n // ? \"oui-outline-danger\"\n // : undefined\n ),\n }}\n />\n <Slider\n markCount={4}\n value={[props.sliderValue]}\n color=\"primary\"\n onValueChange={(e) => {\n props.setSliderValue(e[0]);\n const qty = new Decimal(e[0])\n .div(100)\n .mul(props.item.position_qty)\n .toFixed(props.base_dp, Decimal.ROUND_DOWN);\n // props.updateQuantity(qty);\n onBlur(qty);\n }}\n />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text\n color=\"primary\"\n size=\"2xs\"\n >{`${props.sliderValue}%`}</Text>\n <Flex gap={1}>\n <Text size=\"2xs\" color=\"primary\">\n {t(\"common.max\")}\n </Text>\n <Text.numeral intensity={54} size=\"2xs\">\n {Math.abs(props.item.position_qty)}\n </Text.numeral>\n </Flex>\n </Flex>\n </Flex>\n <Flex width={\"100%\"} gap={3} mt={2}>\n <Button\n fullWidth\n color=\"secondary\"\n onClick={(e) => {\n onClose();\n }}\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton\n fullWidth\n disabled={submitting}\n loading={submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n\n if (orderQuantityErrorMsg || orderPriceErrorMsg) {\n toast.error(orderQuantityErrorMsg ?? orderPriceErrorMsg);\n return;\n }\n if (!props.orderConfirm) {\n onConfirm();\n return;\n }\n setDialogOpen(true);\n }}\n // disabled={Object.keys(props.errors ?? {}).length > 0}\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n </Flex>\n </SimpleSheet>\n )}\n\n {dialogOpen && (\n <SimpleDialog open={dialogOpen} onOpenChange={setDialogOpen} size=\"xs\">\n <LimitConfirmDialog\n base={base}\n quantity={quantity}\n price={price}\n onClose={onCloseDialog}\n onConfirm={onConfirm}\n submitting={submitting}\n quoteDp={quote_dp}\n order={closeOrderData}\n hideCloseIcon\n />\n </SimpleDialog>\n )}\n </>\n );\n};\n","import { 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, SimpleDialog } from \"@orderly.network/ui\";\nimport { MarketCloseBtnState } from \"./marketCloseBtn.script\";\nimport { MarketCloseConfirm } from \"../../desktop/closeButton\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const MarketCloseBtn: FC<MarketCloseBtnState> = (props) => {\n const { t } = useTranslation();\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n disabled={props.submitting}\n loading={props.submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n\n props.updateOrderType(OrderType.MARKET);\n\n if (!props.orderConfirm) {\n props.onConfirm();\n return;\n }\n props.setDialogOpen(true);\n }}\n >\n {t(\"positions.marketClose\")}\n </Button>\n <SimpleDialog\n open={props.dialogOpen}\n onOpenChange={props.setDialogOpen}\n size=\"xs\"\n >\n <MarketCloseConfirm\n base={props.base}\n quantity={props.quantity}\n onClose={props.onClose}\n onConfirm={props.onConfirm}\n submitting={props.submitting}\n hideCloseIcon\n />\n </SimpleDialog>\n </>\n );\n};\n","import { useState } from \"react\";\nimport { 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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const TpSLBtn: FC<TpSLBtnState> = (props) => {\n // const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.openTP_SL();\n }}\n >\n {t(\"common.tpsl\")}\n </Button>\n );\n};\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { modal } from \"@orderly.network/ui\";\nimport { PositionTPSLSheet } from \"@orderly.network/ui-tpsl\";\nimport { API } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { usePositionsRowContext } from \"../../desktop/positionRowContext\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const useTpSLBtnScript = (props: { state: PositionCellState }) => {\n const symbolInfo: API.SymbolExt = useSymbolsInfo()[props.state.item.symbol]();\n const { tpslOrder } = usePositionsRowContext();\n const { t } = useTranslation();\n\n const openTP_SL = () => {\n modal.sheet({\n title: t(\"common.tpsl\"),\n content: (\n <PositionTPSLSheet\n position={props.state.item}\n symbolInfo={symbolInfo}\n order={tpslOrder}\n isEditing={false}\n />\n ),\n });\n };\n\n return {\n openTP_SL,\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type TpSLBtnState = ReturnType<typeof useTpSLBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useTpSLBtnScript } from \"./tpSLBtn.script\";\nimport { TpSLBtn } from \"./tpSLBtn.ui\";\n\nexport const TpSLBtnWidget = (props: { state: PositionCellState }) => {\n const state = useTpSLBtnScript(props);\n return (<TpSLBtn {...state} />);\n};\n","import { 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, useMemo } 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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\ntype PositionHistoryProps = PositionHistoryState & {\n sharePnLConfig?: SharePnLConfig;\n};\n\nexport const PositionHistory: FC<PositionHistoryProps> = (props) => {\n const { onSymbolChange, pagination, pnlNotionalDecimalPrecision } = props;\n const column = usePositionHistoryColumn({\n onSymbolChange,\n pnlNotionalDecimalPrecision,\n sharePnLConfig: props.sharePnLConfig,\n });\n\n const { t } = useTranslation();\n\n const dayLabel: Record<number, string> = useMemo(() => {\n return {\n 1: t(\"common.select.1d\"),\n 7: t(\"common.select.7d\"),\n 30: t(\"common.select.30d\"),\n 90: t(\"common.select.90d\"),\n };\n }, [t]);\n\n return (\n <Flex direction=\"column\" width=\"100%\" height=\"100%\" itemAlign=\"start\">\n {/* <Divider className=\"oui-w-full\" /> */}\n <Flex gap={3}>\n {props.filterItems.length > 0 && (\n <DataFilter\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n )}\n {[1, 7, 30, 90].map((value) => {\n return (\n <button 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={cn(\n \"oui-break-normal oui-whitespace-nowrap\",\n props.filterDays !== value\n ? \"oui-text-base-contrast-54\"\n : \"\"\n )}\n >\n {dayLabel[value] || `${value}D`}\n </Text.gradient>\n </div>\n <div\n className=\"oui-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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const usePositionHistoryColumn = (props: {\n onSymbolChange?: (symbol: API.Symbol) => void;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const { onSymbolChange, pnlNotionalDecimalPrecision } = props;\n const { t } = useTranslation();\n\n const column = useMemo(\n () =>\n [\n // instrument\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 200,\n onSort: (r1: any, r2: any) => {\n return r1.symbol.localeCompare(r2.symbol);\n },\n render: (value: string, record) => (\n <SymbolInfo record={record} onSymbolChange={onSymbolChange} />\n ),\n },\n // quantity\n {\n title: t(\"positions.history.column.closed&maxClosed\"),\n dataIndex: \"close_maxClose\",\n width: 200,\n render: (value: string, record) => <Quantity record={record} />,\n },\n // net pnl\n {\n title: t(\"positions.history.column.netPnl\"),\n dataIndex: \"netPnL\",\n width: 140,\n onSort: (a, b) => {\n if (a.netPnL == null || b.netPnL == null) return -1;\n return (a.netPnL ?? 0) - (b.netPnL ?? 0);\n },\n render: (_: any, record) => (\n <Flex gapX={1}>\n <NetPnL\n record={record}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n />\n <ShareButtonWidget\n position={record}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLDialogId}\n isPositionHistory\n />\n </Flex>\n ),\n },\n // avg open\n {\n title: t(\"common.avgPrice\"),\n dataIndex: \"avg_open\",\n width: 140,\n render: (_: any, record) => {\n const avgOpen =\n record.avg_open_price != null\n ? Math.abs(record.avg_open_price)\n : \"--\";\n const { quote_dp } = useSymbolContext();\n return (\n <Text.numeral dp={quote_dp} padding={false}>\n {avgOpen}\n </Text.numeral>\n );\n },\n },\n // avg close\n {\n title: t(\"common.avgClose\"),\n dataIndex: \"avg_close\",\n width: 175,\n render: (_: any, record) => {\n const avgClose =\n record.avg_close_price != null\n ? Math.abs(record.avg_close_price)\n : \"--\";\n const { quote_dp } = useSymbolContext();\n return (\n <Text.numeral dp={quote_dp} padding={false}>\n {avgClose}\n </Text.numeral>\n );\n },\n },\n // time opened\n {\n title: t(\"positions.history.column.timeOpened\"),\n dataIndex: \"open_timestamp\",\n width: 175,\n onSort: true,\n render: (_: any, record) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {record.open_timestamp}\n </Text.formatted>\n ),\n },\n // time close\n {\n title: t(\"positions.history.column.timeClosed\"),\n dataIndex: \"close_timestamp\",\n width: 175,\n onSort: true,\n render: (_: any, record) => {\n if (record.position_status == \"closed\" && record.close_timestamp) {\n return (\n <Text.formatted\n rule={\"date\"}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n >\n {record.close_timestamp ?? \"--\"}\n </Text.formatted>\n );\n }\n return \"--\";\n },\n },\n // updated time\n {\n title: t(\"positions.history.column.updatedTime\"),\n dataIndex: \"last_update_time\",\n width: 175,\n onSort: true,\n render: (_: any, record) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {record.last_update_time}\n </Text.formatted>\n ),\n },\n ] as Column<PositionHistoryExt>[],\n [pnlNotionalDecimalPrecision, t]\n );\n\n return column;\n};\n\nexport const SymbolInfo = (props: {\n record: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}) => {\n const { record, onSymbolChange } = props;\n const { t } = useTranslation();\n\n const tags = useMemo(() => {\n const list: ReactNode[] = [];\n\n const status = record.position_status;\n\n const renderStatus = () => {\n if (status === \"closed\") {\n return t(\"positions.history.status.closed\");\n } else if (status === \"partial_closed\") {\n return t(\"positions.history.status.partialClosed\");\n } else {\n return capitalizeFirstLetter(status.replace(\"_\", \" \"));\n }\n };\n\n list.push(\n <Badge\n color={status !== \"closed\" ? \"primaryLight\" : \"neutral\"}\n size=\"xs\"\n className=\"oui-break-normal oui-whitespace-nowrap\"\n >\n {renderStatus()}\n </Badge>\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge color={\"danger\"} size=\"xs\">\n {/* {capitalizeFirstLetter(record.type)} */}\n {t(\"positions.history.type.adl\")}\n </Badge>\n );\n } else if (record.type === \"liquidated\") {\n list.push(\n <Tooltip\n className=\"oui-min-w-[204px] oui-bg-base-5\"\n arrow={{\n className: \"oui-fill-base-5\",\n }}\n // @ts-ignore\n content={\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {record.liquidation_id != null && (\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.liquidationId\")}\n </Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.liquidatorFee\")}\n </Text>\n <Text color=\"lose\">\n {record.liquidator_fee > 0 && \"-\"}\n {commifyOptional(record.liquidator_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.insFundFee\")}\n </Text>\n <Text color=\"lose\">\n {record.insurance_fund_fee > 0 && \"-\"}\n {commifyOptional(record.insurance_fund_fee)}\n </Text>\n </Flex>\n </Flex>\n }\n >\n <div>\n <Badge size=\"xs\" color=\"danger\" className=\"oui-cursor-pointer\">\n <span className=\"oui-underline oui-decoration-dashed oui-decoration-[1px]\">\n {t(\"positions.history.type.liquidated\")}\n </span>\n </Badge>\n </div>\n </Tooltip>\n );\n }\n\n return list;\n }, [record, t]);\n\n return (\n <Flex gap={2} height={48}>\n <Box\n width={4}\n height={38}\n className={cn(\n \"oui-rounded-[1px] oui-shrink-0\",\n record.side === \"LONG\" ? \"oui-bg-trade-profit\" : \"oui-bg-trade-loss\"\n )}\n />\n\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n <Text.formatted\n // rule={\"symbol\"}\n formatString=\"base-type\"\n className=\"oui-cursor-pointer\"\n onClick={(e) => {\n onSymbolChange?.({ symbol: record.symbol } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${record.symbol.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n <Flex gap={1}>{tags}</Flex>\n </Flex>\n </Flex>\n );\n};\n\nexport const Quantity = (props: { record: PositionHistoryExt }) => {\n const { record } = props;\n\n const { base_dp } = useSymbolContext();\n\n return (\n <Flex\n gap={1}\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-overflow-hidden oui-whitespace-nowrap oui-text-ellipsis\"\n >\n <Text.numeral dp={base_dp} padding={false}>\n {Math.abs(record.closed_position_qty)}\n </Text.numeral>\n <Text.numeral dp={base_dp} padding={false} className=\"oui-truncate\">\n {Math.abs(record.max_position_qty)}\n </Text.numeral>\n {/* <Text className=\"oui-truncate\">{`${record.symbol.split(\"_\")[1]}`}</Text> */}\n </Flex>\n );\n};\n\nexport const NetPnL = (props: {\n record: PositionHistoryExt;\n pnlNotionalDecimalPrecision?: number;\n}) => {\n const { record, pnlNotionalDecimalPrecision } = props;\n const { t } = useTranslation();\n const netPnl = record.netPnL != null ? record.netPnL : undefined;\n\n const text = () => (\n <Text.numeral\n dp={pnlNotionalDecimalPrecision}\n color={\n record.netPnL != null\n ? record.netPnL > 0\n ? \"profit\"\n : \"lose\"\n : undefined\n }\n className={\n netPnl == null\n ? \"\"\n : \"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n }\n >\n {netPnl ?? \"--\"}\n </Text.numeral>\n );\n\n if (record.netPnL == null) return text();\n\n return (\n <Tooltip\n // open={record.max_position_qty == 3.22}\n delayDuration={200}\n // @ts-ignore\n content={\n <Flex direction={\"column\"} itemAlign={\"start\"} className=\"oui-text-2xs\">\n <Text intensity={80}>{t(\"positions.history.column.netPnl\")}</Text>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"common.realizedPnl\")}</Text>\n <Text\n color={record.realized_pnl >= 0 ? \"profit\" : \"lose\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(record.realized_pnl)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.netPnl.fundingFee\")}\n </Text>\n <Text\n color={record.accumulated_funding_fee > 0 ? \"lose\" : \"profit\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(-record.accumulated_funding_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.netPnl.tradingFee\")}\n </Text>\n <Text\n color={record.trading_fee > 0 ? \"lose\" : \"profit\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(-record.trading_fee)}\n </Text>\n </Flex>\n </Flex>\n }\n className=\"oui-min-w-[204px] oui-bg-base-5\"\n arrow={{\n className: \"oui-fill-base-5\",\n }}\n >\n <div>{text()}</div>\n </Tooltip>\n );\n};\n\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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nexport const PositionHistoryCell: FC<PositionHistoryCellState> = (props) => {\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n itemAlign={\"start\"}\n className={props.classNames?.root}\n >\n <Header {...props} />\n <Divider intensity={6} className=\"oui-w-full\" />\n <Body {...props} />\n </Flex>\n );\n};\n\nexport const Header: FC<PositionHistoryCellState> = (props) => {\n const { t } = useTranslation();\n\n const showAlert = () => {\n const { item: record } = props;\n\n modal.alert({\n title: t(\"positions.history.column.netPnl\"),\n message: (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n >\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"common.realizedPnl\")}</Text>\n <Text color={record.realized_pnl >= 0 ? \"profit\" : \"lose\"}>\n {commifyOptional(record.realized_pnl)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.netPnl.fundingFee\")}\n </Text>\n <Text\n color={record.accumulated_funding_fee > 0 ? \"lose\" : \"profit\"}\n >\n {commifyOptional(-record.accumulated_funding_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.netPnl.tradingFee\")}\n </Text>\n <Text color={record.trading_fee > 0 ? \"lose\" : \"profit\"}>\n {commifyOptional(-record.trading_fee)}\n </Text>\n </Flex>\n </Flex>\n ),\n });\n };\n\n return (\n <Flex gap={1} width={\"100%\"}>\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1\"\n gap={1}\n >\n <SymbolToken {...props} />\n <PositionHistoryType {...props} />\n </Flex>\n <Flex direction={\"column\"} itemAlign={\"end\"} className=\"oui-flex-1\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"positions.history.column.netPnl\")}\n </Text>\n <Flex gapX={1}>\n <button onClick={showAlert}>\n <Text.numeral size=\"xs\" coloring>\n {props.item.netPnL ?? \"--\"}\n </Text.numeral>\n </button>\n\n <ShareButtonWidget\n position={props.item}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLBottomSheetId}\n iconSize={12}\n isPositionHistory\n />\n </Flex>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<PositionHistoryCellState> = (props) => {\n return (\n <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 { PositionHistorySide } 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 { commifyOptional } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const SymbolToken: FC<PositionHistoryCellState> = (props) => {\n const { side, symbol } = props.item;\n const { t } = useTranslation();\n const isBuy = side === PositionHistorySide.buy;\n\n return (\n <Text.formatted\n intensity={80}\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"sm\"\n // @ts-ignore\n prefix={\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? t(\"common.buy\") : t(\"common.sell\")}\n </Badge>\n }\n onClick={() => {\n props.onSymbolChange?.({ symbol: symbol } as API.Symbol);\n }}\n // showIcon\n >\n {symbol}\n </Text.formatted>\n );\n};\n\nexport const Time: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n\n return (\n <Text.formatted\n rule={\"date\"}\n formatString=\"yyyy-MM-dd hh:mm:ss\"\n intensity={36}\n size=\"2xs\"\n >\n {item.last_update_time}\n </Text.formatted>\n );\n};\n\nexport const PositionHistoryType: FC<PositionHistoryCellState> = (props) => {\n const { item: record } = props;\n const { t } = useTranslation();\n\n const showAlert = () => {\n modal.alert({\n title: t(\"positions.liquidation\"),\n message: (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n >\n {record.liquidation_id != null && (\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.liquidationId\")}</Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.liquidatorFee\")}</Text>\n <Text color=\"lose\">\n {record.liquidator_fee > 0 && \"-\"}\n {commifyOptional(record.liquidator_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.insFundFee\")}</Text>\n <Text color=\"lose\">\n {record.insurance_fund_fee > 0 && \"-\"}\n {commifyOptional(record.insurance_fund_fee)}\n </Text>\n </Flex>\n </Flex>\n ),\n });\n };\n\n const tags = useMemo(() => {\n const list: ReactNode[] = [];\n\n const status = record.position_status;\n\n const renderStatus = () => {\n if (status === \"closed\") {\n return t(\"positions.history.status.closed\");\n } else if (status === \"partial_closed\") {\n return t(\"positions.history.status.partialClosed\");\n } else {\n return capitalizeFirstLetter(status.replace(\"_\", \" \"));\n }\n };\n\n list.push(\n <Badge color={status !== \"closed\" ? \"primaryLight\" : \"neutral\"} size=\"xs\">\n {renderStatus()}\n </Badge>\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge color={\"danger\"} size=\"xs\">\n {/* {capitalizeFirstLetter(record.type)} */}\n {t(\"positions.history.type.adl\")}\n </Badge>\n );\n } else if (record.type === \"liquidated\") {\n list.push(\n <Badge\n size=\"xs\"\n color=\"danger\"\n className=\"oui-cursor-pointer\"\n onClick={showAlert}\n >\n <span className=\"oui-underline oui-decoration-dashed oui-decoration-[1px]\">\n {/* {capitalizeFirstLetter(record.type)} */}\n {t(\"positions.history.type.liquidated\")}\n </span>\n </Badge>\n );\n }\n\n return list;\n }, [record]);\n\n return <Flex gap={1}>{tags}</Flex>;\n};\n\nexport const ClosedQty: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const closedQty =\n item.closed_position_qty != null\n ? Math.abs(item.closed_position_qty)\n : \"--\";\n\n return (\n <Statistic\n // label={\n // <Text>Closed{<Text intensity={20}>{` (${props.base})`}</Text>}</Text>\n // }\n label={<Text>{t(\"positions.history.column.closed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring intensity={80}>\n {closedQty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MaxClosedQty: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const maxClosedQty =\n item.max_position_qty != null ? Math.abs(item.max_position_qty) : \"--\";\n return (\n <Statistic\n // label={\n // <Text>\n // Max closed{<Text intensity={20}>{` (${props.base})`}</Text>}\n // </Text>\n // }\n label={<Text>{t(\"positions.history.column.maxClosed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring intensity={80}>\n {maxClosedQty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const avgOpen =\n item.avg_open_price != null ? Math.abs(item.avg_open_price) : \"--\";\n const { t } = useTranslation();\n return (\n <Statistic\n label={\n <Flex gap={1}>\n {t(\"common.avgOpen\")}\n <Text intensity={20}>(USDC)</Text>\n </Flex>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} padding={false} coloring intensity={80}>\n {avgOpen}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgClosed: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const avgClose =\n item.avg_close_price != null ? Math.abs(item.avg_close_price) : \"--\";\n const { t } = useTranslation();\n return (\n <Statistic\n label={\n <Flex gap={1}>\n {t(\"common.avgClose\")}\n <Text intensity={20}>(USDC)</Text>\n </Flex>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} padding={false} coloring intensity={80}>\n {avgClose}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const OpenTime: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={<Text>{t(\"positions.history.column.timeOpened\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n <Text.formatted\n intensity={80}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n rule={\"date\"}\n >\n {item.open_timestamp}\n </Text.formatted>\n </Statistic>\n );\n};\nexport const ClosedTime: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const child =\n item.position_status == \"closed\" && item.close_timestamp ? (\n <Text.formatted\n intensity={80}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n rule={\"date\"}\n >\n {item.close_timestamp}\n </Text.formatted>\n ) : (\n \"--\"\n );\n\n return (\n <Statistic\n label={<Text>{t(\"positions.history.column.timeClosed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n {child}\n </Statistic>\n );\n};\n","import {\n useAccount,\n usePrivateQuery,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { PositionHistoryProps } from \"./positionHistory.widget\";\nimport { API } from \"@orderly.network/types\";\nimport { usePagination, useScreen } from \"@orderly.network/ui\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { differenceInDays, setDate, setHours, subDays } from \"date-fns\";\nimport {\n areDatesEqual,\n formatDatePickerRange,\n offsetEndOfDay,\n offsetStartOfDay,\n} from \"../../utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type PositionHistoryExt = API.PositionHistory & {\n netPnL?: number;\n};\n\nexport enum PositionHistorySide {\n all = \"all\",\n buy = \"LONG\",\n sell = \"SHORT\",\n}\nexport enum PositionHistoryStatus {\n all = \"all\",\n closed = \"closed\",\n partial_closed = \"partial_closed\",\n}\n\nexport const usePositionHistoryScript = (props: PositionHistoryProps) => {\n const { onSymbolChange, symbol, pnlNotionalDecimalPrecision } = props;\n const { state } = useAccount();\n\n const { data, isLoading } = usePrivateQuery<PositionHistoryExt[]>(\n symbol\n ? `/v1/position_history?symbol=${symbol}&limit=1000`\n : \"/v1/position_history?limit=1000\",\n {\n formatter(data) {\n return (data.rows ?? null)?.map(\n (item: API.PositionHistory): PositionHistoryExt => {\n if (\n item.realized_pnl != null &&\n item.accumulated_funding_fee != null &&\n item.trading_fee != null\n ) {\n const netPnL =\n item.realized_pnl -\n item.accumulated_funding_fee -\n item.trading_fee;\n return {\n ...item,\n netPnL: netPnL,\n };\n }\n return item;\n }\n );\n },\n revalidateOnFocus: true,\n }\n );\n\n const { pagination, setPage } = usePagination({\n pageSize: 10,\n });\n\n const {\n status,\n side,\n dateRange,\n filterDays,\n updateFilterDays,\n filterItems,\n onFilter,\n } = useFilter();\n\n useEffect(() => {\n setPage(1);\n }, [status, side, dateRange, filterDays, symbol]);\n\n const filterData = useMemo(() => {\n if (data == null) return data;\n\n return data.filter((item) => {\n const sideFilter =\n side === PositionHistorySide.all\n ? true\n : item.side.toLowerCase() === side.toLowerCase();\n const statusFilter =\n status === PositionHistoryStatus.all\n ? true\n : item.position_status.toLowerCase() === status.toLowerCase();\n\n // const time = item.close_timestamp ?? item?.last_update_timestamp ?? item.open_timestamp;\n const time = item?.last_update_time ?? item.open_timestamp;\n const dateFilter =\n dateRange.from && dateRange.to\n ? time >= dateRange.from.getTime() && time <= dateRange.to.getTime()\n : true;\n\n const symbolFilter = symbol ? item.symbol == symbol : true;\n\n return sideFilter && statusFilter && dateFilter && symbolFilter;\n });\n }, [status, side, dateRange, data, symbol]);\n\n const dataSource = useDataTap(filterData, {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n fallbackData: [],\n });\n\n return {\n dataSource,\n isLoading,\n onSymbolChange,\n pagination,\n filterItems,\n onFilter,\n symbol,\n filterDays,\n updateFilterDays,\n pnlNotionalDecimalPrecision,\n };\n};\n\nconst useFilter = () => {\n const { t } = useTranslation();\n\n const [status, setStatus] = useState<PositionHistoryStatus>(\n PositionHistoryStatus.all\n );\n const [side, setSide] = useState<PositionHistorySide>(\n PositionHistorySide.all\n );\n const defaultRange = formatDatePickerRange({\n to: offsetEndOfDay(new Date()),\n from: offsetStartOfDay(subDays(new Date(), 89)),\n });\n\n /// default is 90d\n const [filterDays, setFilterDays] = useState<1 | 7 | 30 | 90 | null>(90);\n\n const [dateRange, setDateRange] = useState<{\n from?: Date;\n to?: Date;\n }>(defaultRange);\n\n const updateFilterDays = (days: 1 | 7 | 30 | 90) => {\n setFilterDays(days);\n setDateRange({\n from: offsetStartOfDay(subDays(new Date(), days - 1)),\n to: offsetEndOfDay(new Date()),\n });\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"side\") {\n setSide(filter.value);\n }\n\n if (filter.name === \"status\") {\n setStatus(filter.value);\n }\n\n if (filter.name === \"dateRange\") {\n const newDateRange = formatDatePickerRange(filter.value);\n setDateRange(newDateRange);\n if (newDateRange.from && newDateRange.to) {\n const diffDays =\n Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) + 1;\n const dateRangeMap: { [key: number]: { from: Date; to: Date } } = {\n 1: {\n from: offsetStartOfDay(new Date())!,\n to: offsetEndOfDay(new Date())!,\n },\n 7: {\n from: offsetStartOfDay(subDays(new Date(), 6))!,\n to: offsetEndOfDay(new Date())!,\n },\n 30: {\n from: offsetStartOfDay(subDays(new Date(), 29))!,\n to: offsetEndOfDay(new Date())!,\n },\n 90: {\n from: offsetStartOfDay(subDays(new Date(), 89))!,\n to: offsetEndOfDay(new Date())!,\n },\n };\n\n const dateRange = dateRangeMap[diffDays];\n if (\n dateRange &&\n areDatesEqual(dateRange.from, newDateRange.from) &&\n areDatesEqual(dateRange.to, newDateRange.to)\n ) {\n setFilterDays(diffDays as any);\n } else {\n setFilterDays(null);\n }\n }\n }\n };\n\n const { isMobile } = useScreen();\n\n const filterItems = useMemo((): any[] => {\n const sideFilter = {\n type: \"select\",\n name: \"side\",\n options: [\n {\n label: t(\"common.side.all\"),\n value: \"all\",\n },\n {\n label: t(\"common.buy\"),\n value: PositionHistorySide.buy,\n },\n {\n label: t(\"common.sell\"),\n value: PositionHistorySide.sell,\n },\n ],\n value: side,\n };\n\n const dateRangeFilter = {\n type: \"range\",\n name: \"dateRange\",\n value: dateRange,\n fromDate: offsetStartOfDay(subDays(new Date(), 89)),\n toDate: offsetEndOfDay(new Date()),\n };\n\n const statusFilter = {\n type: \"select\",\n name: \"status\",\n options: [\n {\n label: t(\"common.status.all\"),\n value: \"all\",\n },\n {\n label: t(\"positions.history.status.closed\"),\n value: PositionHistoryStatus.closed,\n },\n {\n label: t(\"positions.history.status.partialClosed\"),\n value: PositionHistoryStatus.partial_closed,\n },\n ],\n value: status,\n };\n\n if (isMobile) {\n return [sideFilter, statusFilter];\n }\n return [sideFilter, statusFilter, dateRangeFilter];\n }, [side, status, dateRange]);\n\n return {\n filterItems,\n onFilter,\n side,\n dateRange,\n status,\n filterDays,\n updateFilterDays,\n };\n};\n\nexport type PositionHistoryState = ReturnType<typeof usePositionHistoryScript>;\n","import { differenceInDays, setDate, setHours, subDays } from \"date-fns\";\n\nexport const parseDateRangeForFilter = (dateRange: {\n from: Date;\n to?: Date;\n}) => {\n let { from, to } = dateRange;\n\n if (typeof to === \"undefined\") {\n to = new Date();\n }\n\n const diff = differenceInDays(from, to);\n\n // console.log(\"diff\", diff);\n\n if (diff === 0) {\n return [from, setHours(to, 23)];\n }\n\n return [from, to];\n};\n\nexport function offsetStartOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(0, 0, 0, 0);\n return newDate;\n}\n\nexport function offsetEndOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(23, 59, 59, 999);\n return newDate;\n}\n\nexport const formatDatePickerRange = (option: { from?: Date; to?: Date }) => ({\n from: offsetStartOfDay(option.from),\n to: offsetEndOfDay(option.to ?? option.from),\n});\n\nexport const areDatesEqual = (date1: Date, date2: Date): boolean => {\n return date1.getTime() === date2.getTime();\n};\n","import { API } from \"@orderly.network/types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { SymbolInfo } from \"../desktop/usePositionHistoryColumn\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const usePositionHistoryCellScript = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const symbolInfo = useSymbolContext();\n\n return {\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type PositionHistoryCellState = ReturnType<\n typeof usePositionHistoryCellScript\n>;\n","import { API } from \"@orderly.network/types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { usePositionHistoryCellScript } from \"./positionHistoryCell.script\";\nimport { PositionHistoryCell } from \"./positionHistoryCell.ui\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const PositionHistoryCellWidget = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const state = usePositionHistoryCellScript(props);\n return <PositionHistoryCell {...state} />;\n};\n","import { API } from \"@orderly.network/types\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { usePositionHistoryScript } from \"./positionHistory.script\";\nimport { MobilePositionHistory, PositionHistory } from \"./positionHistory.ui\";\n\nexport type PositionHistoryProps = {\n onSymbolChange?: (symbol: API.Symbol) => void;\n symbol?: string;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n};\n\nexport const PositionHistoryWidget = (props: PositionHistoryProps) => {\n const state = usePositionHistoryScript(props);\n return <PositionHistory {...state} sharePnLConfig={props.sharePnLConfig} />;\n};\n\nexport const MobilePositionHistoryWidget = (\n props: PositionHistoryProps & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }\n) => {\n const { classNames, ...rest } = props;\n const state = usePositionHistoryScript(rest);\n return (\n <MobilePositionHistory\n {...state}\n classNames={classNames}\n sharePnLConfig={props.sharePnLConfig}\n />\n );\n};\n","import { FC } from \"react\";\nimport {\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 { 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 { commifyOptional } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const useLiquidationColumn = (props: {}) => {\n const { t } = useTranslation();\n\n const column = useMemo(\n () =>\n [\n // Time\n {\n title: t(\"common.time\"),\n dataIndex: \"timestamp\",\n fixed: \"left\",\n width: 202,\n render: (value: string) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {value}\n </Text.formatted>\n ),\n },\n // Liquidation id\n {\n title: t(\"positions.Liquidation.column.liquidationId\"),\n dataIndex: \"liquidation_id\",\n width: 202,\n render: (value) => <Text>{value}</Text>,\n },\n // net pnl\n {\n title: t(\"positions.Liquidation.column.insFundTransfer\"),\n dataIndex: \"transfer_amount_to_insurance_fund\",\n width: 202,\n render: (value) => {\n return <Text>{commifyOptional(value)}</Text>;\n },\n },\n // Symbol\n {\n title: t(\"common.symbol\"),\n dataIndex: \"Symbol\",\n width: 202,\n render: (_: any, record) => (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n <Text.formatted rule={\"symbol\"} formatString=\"base-quote\">\n {item.symbol}\n </Text.formatted>\n ))}\n </Flex>\n ),\n },\n // Price (USDC)\n {\n title: `${t(\"common.price\")} (USDC)`,\n dataIndex: \"Price_(USDC)\",\n width: 202,\n render: (_: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText value={item.transfer_price} type=\"quote\" />\n ))}\n </Flex>\n );\n },\n },\n // Quantity\n {\n title: t(\"common.quantity\"),\n dataIndex: \"Quantity\",\n width: 202,\n render: (_: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText value={item.position_qty} type=\"base\" />\n ))}\n </Flex>\n );\n },\n },\n // Liquidation Fee\n {\n title: t(\"positions.Liquidation.column.liquidationFee\"),\n dataIndex: \"abs_liquidation_fee\",\n width: 202,\n render: (abs_liquidation_fee: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText\n value={item.abs_liquidation_fee}\n type=\"quote\"\n />\n ))}\n </Flex>\n );\n },\n },\n ] as Column<API.Liquidation>[],\n [t]\n );\n\n return column;\n};\n\nconst FormattedText: FC<{ value?: string | number; type: \"base\" | \"quote\" }> = (\n props\n) => {\n // const { quote_dp, base_dp } = useSymbolContext();\n return <Text>{commifyOptional(props.value)}</Text>;\n};\n","import { FC } from \"react\";\nimport { cn, Flex, Grid, Text } from \"@orderly.network/ui\";\nimport { LiquidationCellState } from \"./liquidationCell.script\";\nimport { LiquidationFee, Price, Quantity } from \"./items\";\nimport { API } from \"@orderly.network/types\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const LiquidationCell: FC<\n LiquidationCellState & {\n classNames?: {\n root?: string;\n };\n }\n> = (props) => {\n return (\n <Flex\n key={props.item.timestamp}\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n itemAlign={\"start\"}\n className={props.classNames?.root}\n >\n <Header {...props} />\n <Body {...props} />\n </Flex>\n );\n};\n\nexport const Header: FC<LiquidationCellState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex gap={1} width={\"100%\"}>\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1\"\n gap={1}\n >\n <Text.formatted\n size=\"2xs\"\n intensity={36}\n rule={\"date\"}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n >\n {props.item.timestamp}\n </Text.formatted>\n <Flex gap={1}>\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"positions.Liquidation.column.liquidationId\")}:`}\n </Text>\n <Text\n size=\"2xs\"\n intensity={80}\n >{` ${props.item.liquidation_id}`}</Text>\n </Flex>\n </Flex>\n <Flex direction={\"column\"} itemAlign={\"end\"} className=\"oui-flex-1\">\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"positions.Liquidation.column.insFundTransfer\")}:`}\n </Text>\n <Text intensity={80} size=\"xs\">\n {commifyOptional(props.item.transfer_amount_to_insurance_fund)}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<LiquidationCellState> = (props) => {\n return (\n <Flex direction={\"column\"} width={\"100%\"}>\n {props.item.positions_by_perp?.map((item, index) => {\n return (\n <Cell\n key={`${index}-${item.symbol}`}\n isLast={index === props.item.positions_by_perp.length - 1}\n {...item}\n />\n );\n })}\n </Flex>\n );\n};\n\nconst Cell: FC<\n API.LiquidationPositionByPerp & {\n isLast: boolean;\n key: string;\n }\n> = (props) => {\n return (\n <Flex\n key={props.key}\n width={\"100%\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-border-t-[1px] oui-border-line-6 oui-pt-2\",\n !props.isLast && \"oui-pb-2\"\n )}\n >\n <Text.formatted\n rule={\"symbol\"}\n formatString=\"base-quote\"\n size=\"xs\"\n intensity={80}\n className=\"oui-flex-1\"\n >\n {props.symbol}\n </Text.formatted>\n <Grid cols={1} rows={3} width={\"100%\"} gap={1} className=\"oui-flex-1\">\n <Price {...props} />\n <Quantity {...props} />\n <LiquidationFee {...props} />\n </Grid>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const Price: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n const { t } = useTranslation();\n\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Flex gap={1}>\n <Text size=\"2xs\" intensity={36}>\n {t(\"common.price\")}\n </Text>\n <Text size=\"2xs\" intensity={20}>\n (USDC)\n </Text>\n </Flex>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.transfer_price}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.transfer_price)}\n </Text>\n </Flex>\n );\n};\nexport const Quantity: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n const { t } = useTranslation();\n\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n {t(\"common.quantity\")}\n </Text>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.position_qty}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.position_qty)}\n </Text>\n </Flex>\n );\n};\nexport const LiquidationFee: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n const { t } = useTranslation();\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n {t(\"positions.Liquidation.column.liquidationFee\")}\n </Text>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.abs_liquidation_fee}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.abs_liquidation_fee)}\n </Text>\n </Flex>\n );\n};\n","import { API } from \"@orderly.network/types\";\n\nexport const useLiquidationCellScript = (props: {\n item: API.Liquidation;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n}) => {\n\n return {\n ...props\n };\n};\n\nexport type LiquidationCellState = ReturnType<typeof useLiquidationCellScript>;\n","import { API } from \"@orderly.network/types\";\nimport { useLiquidationCellScript } from \"./liquidationCell.script\";\nimport { LiquidationCell } from \"./liquidationCell.ui\";\n\nexport const LiquidationCellWidget = (props: {\n item: API.Liquidation;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n}) => {\n const { classNames, ...rest } = props;\n const state = useLiquidationCellScript(rest);\n return <LiquidationCell classNames={classNames} {...state} />;\n};\n","import {\n usePrivateInfiniteQuery,\n usePrivateQuery,\n} from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { API } from \"@orderly.network/types\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n areDatesEqual,\n formatDatePickerRange,\n offsetEndOfDay,\n offsetStartOfDay,\n} from \"../../utils\";\nimport { differenceInDays, subDays } from \"date-fns\";\nimport { usePagination, useScreen } from \"@orderly.network/ui\";\nimport { LiquidationProps } from \"./liquidation.widget\";\n\nexport const useLiquidationScript = (props: LiquidationProps) => {\n const { symbol, enableLoadMore } = props;\n const { page, pageSize, setPage, pagination, parsePagination } =\n usePagination({\n pageSize: 10,\n });\n\n const { dateRange, filterDays, updateFilterDays, filterItems, onFilter } =\n useFilter();\n\n useEffect(() => {\n setPage(1);\n }, [symbol, dateRange, filterDays]);\n\n const [data, { meta, isLoading, loadMore }] = useLiquidation({\n page: enableLoadMore ? undefined : page,\n size: pageSize,\n symbol,\n start_t: dateRange.from != null ? dateRange.from.getTime() : undefined,\n end_t: dateRange.to != null ? dateRange.to.getTime() : undefined,\n });\n\n const dataSource = useDataTap(data, {\n fallbackData: [],\n });\n\n // useEffect(() => {\n // setPage(1);\n // }, [dateRange, filterDays]);\n\n // console.log(\"pagination\", pagination, meta);\n\n return {\n dataSource,\n isLoading,\n loadMore,\n\n pagination: parsePagination(meta),\n\n // filter\n dateRange,\n filterDays,\n updateFilterDays,\n filterItems,\n onFilter,\n };\n};\n\nexport type LiquidationState = ReturnType<typeof useLiquidationScript>;\n\n/**\n *\n * @param props size default is 100\n */\nconst useLiquidation = (props: {\n symbol?: string;\n start_t?: number;\n end_t?: number;\n page?: number;\n size?: number;\n}) => {\n const ordersResponse = usePrivateInfiniteQuery<API.Liquidation>(\n generateKeyFun(props),\n {\n initialSize: 1,\n formatter: (data) => data,\n revalidateOnFocus: true,\n }\n );\n\n const meta = useMemo(() => {\n // @ts-ignore\n return ordersResponse.data?.[0]?.meta;\n }, [ordersResponse.data?.[0]]);\n\n const data = useMemo(() => {\n return ordersResponse.data?.map((item: any) => item.rows)?.flat();\n }, [ordersResponse.data]);\n\n const isLoading = ordersResponse.isLoading;\n\n const loadMore = () => {\n ordersResponse.setSize(ordersResponse.size + 1);\n };\n\n return [data, { meta, isLoading, loadMore }] as const;\n};\n\nconst useFilter = () => {\n const defaultRange = formatDatePickerRange({\n to: offsetEndOfDay(new Date()),\n from: offsetStartOfDay(subDays(new Date(), 89)),\n });\n\n /// default is 90d\n const [filterDays, setFilterDays] = useState<1 | 7 | 30 | 90 | null>(90);\n\n const [dateRange, setDateRange] = useState<{\n from?: Date;\n to?: Date;\n }>(defaultRange);\n\n const updateFilterDays = (days: 1 | 7 | 30 | 90) => {\n setFilterDays(days);\n setDateRange({\n from: offsetStartOfDay(subDays(new Date(), days - 1)),\n to: offsetEndOfDay(new Date()),\n });\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"dateRange\") {\n const newDateRange = formatDatePickerRange(filter.value);\n setDateRange(newDateRange);\n if (newDateRange.from && newDateRange.to) {\n const diffDays =\n Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) + 1;\n const dateRangeMap: { [key: number]: { from: Date; to: Date } } = {\n 1: {\n from: offsetStartOfDay(new Date())!,\n to: offsetEndOfDay(new Date())!,\n },\n 7: {\n from: offsetStartOfDay(subDays(new Date(), 6))!,\n to: offsetEndOfDay(new Date())!,\n },\n 30: {\n from: offsetStartOfDay(subDays(new Date(), 29))!,\n to: offsetEndOfDay(new Date())!,\n },\n 90: {\n from: offsetStartOfDay(subDays(new Date(), 89))!,\n to: offsetEndOfDay(new Date())!,\n },\n };\n\n const dateRange = dateRangeMap[diffDays];\n if (\n dateRange &&\n areDatesEqual(dateRange.from, newDateRange.from) &&\n areDatesEqual(dateRange.to, newDateRange.to)\n ) {\n setFilterDays(diffDays as any);\n } else {\n setFilterDays(null);\n }\n }\n }\n };\n\n const { isMobile } = useScreen();\n\n const filterItems = useMemo((): any[] => {\n const dateRangeFilter = {\n type: \"range\",\n name: \"dateRange\",\n value: dateRange,\n fromDate: offsetStartOfDay(subDays(new Date(), 89)),\n toDate: offsetEndOfDay(new Date()),\n };\n\n if (isMobile) {\n return [dateRangeFilter];\n }\n return [dateRangeFilter];\n }, [dateRange]);\n\n return {\n filterItems,\n onFilter,\n dateRange,\n filterDays,\n updateFilterDays,\n };\n};\n\nconst generateKeyFun =\n (args: {\n symbol?: string;\n start_t?: number;\n end_t?: number;\n page?: number;\n size?: number;\n }) =>\n (pageIndex: number, previousPageData: any): string | null => {\n // reached the end\n if (previousPageData && !previousPageData.rows?.length) return null;\n\n const { symbol, size = 10, page, end_t, start_t } = args;\n\n const search = new URLSearchParams([\n [\"size\", size.toString()],\n [\"page\", `${pageIndex + 1}`],\n ]);\n\n if (page) {\n search.set(\"page\", `${page}`);\n }\n\n if (symbol) {\n search.set(`symbol`, symbol);\n }\n\n if (end_t) {\n search.set(`end_t`, `${end_t}`);\n }\n\n if (start_t) {\n search.set(`start_t`, `${start_t}`);\n }\n\n return `/v1/liquidations?${search.toString()}`;\n };\n","import { useLiquidationScript } from \"./liquidation.script\";\nimport { Liquidation, MobileLiquidation } from \"./liquidation.ui\";\n\nexport type LiquidationProps = {\n symbol?: string;\n enableLoadMore?: boolean;\n}\n\nexport const LiquidationWidget = (props: LiquidationProps) => {\n const state = useLiquidationScript(props);\n return (<Liquidation {...state} />);\n};\n\nexport const MobileLiquidationWidget = (props: LiquidationProps & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }) => {\n\n const { classNames, ...rest} = props;\n const state = useLiquidationScript(rest);\n return (<MobileLiquidation classNames={classNames} {...state} />);\n};\n"]}