@orderly.network/ui-tpsl 2.6.1 → 2.6.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tpsl.widget.tsx","../src/tpsl.ui.tsx","../src/components/orderInfo.tsx","../src/components/pnlInfo.tsx","../src/components/tpslInputRow/tpslInputRow.script.ts","../src/components/tpslInputRow/tpslInputRow.ui.tsx","../src/pnlInput/pnlInput.ui.tsx","../src/pnlInput/useBuilder.script.ts","../src/pnlInput/pnlInput.widget.tsx","../src/components/orderPriceType.tsx","../src/components/tpslInputRow/tpslInputRow.widget.tsx","../src/components/tpslPostionType/tpslPositionType.script.tsx","../src/components/tpslPostionType/tpslPositionType.ui.tsx","../src/components/tpslPostionType/tpslPostionType.widget.tsx","../src/components/tpslQty.tsx","../src/useTPSL.script.tsx","../src/editorPopover.tsx","../src/editorSheet.tsx","../src/tpslAdvanced.widget.tsx","../src/tpslAdvanced.ui.tsx","../src/useTPSLAdvanced.script.ts","../src/tpslDetail/tpslDetail.widget.tsx","../src/tpslDetail/tpslDetail.script.tsx","../src/tpslDetail/tpslDetailProvider.tsx","../src/tpslDetail/tsplDetail.ui.tsx","../src/tpslDetail/ordersTable.tsx","../src/tpslDetail/useColum.tsx","../src/tpslDetail/components/estPnl.tsx","../src/tpslDetail/components/common.tsx","../src/tpslDetail/components/orderPrice.tsx","../src/tpslDetail/components/qty.tsx","../src/tpslDetail/components/triggerPrice.tsx","../src/tpslDetail/components/type.tsx","../src/tpslDetail/ordersTable.mobile.tsx","../src/tpslSimpleDialog/tpslSimpleDialog.widget.tsx","../src/tpslSimpleDialog/tpslSimpleDialog.script.tsx","../src/tpslSimpleDialog/tpslSimpleDialog.ui.tsx"],"names":["registerSimpleDialog","registerSimpleSheet","useState","useLocalStorage","useTranslation","useOrderEntryFormErrorMsg","OrderSide","OrderType","PositionType","Badge","Box","Button","Divider","Flex","Grid","Input","Text","textVariants","cn","inputFormatter","Checkbox","ThrottledButton","ScrollArea","useScreen","transSymbolformString","useIndexPrice","useMarkPrice","useSymbolLeverage","TokenIcon","jsx","jsxs","OrderInfo","props","order","symbol","side","markPrice","indexPrice","symbolLeverage","useMemo","Decimal","PnlInfo","tp_pnl","sl_pnl","riskRatio","ratio","useTPSLInputRowScript","Fragment","Trans","useEffect","CaretDownIcon","SimpleDropdownMenu","useRef","todpIfNeed","usePNLInputBuilder","type","values","mode","setMode","focus","setFocus","t","key","value","modes","percentageSuffix","onValueChange","formatter","options","dp","endStr","PNLInput","onModeChange","quote","quote_dp","pnl","prefix","setPrefix","placeholder","setPlaceholder","color","num","label","item","PNLMenus","PnlInputWidget","testId","rest","state","Select","OrderPriceType","option","displayLabel","TPSLInputRowUI","parseErrorMsg","positionType","roi","_roi","_entryPrice","rootOrderPrice","checked","PriceInput","RenderROI","price","className","orderType","TPSLInputRowWidget","useTPSLPositionTypeScript","ExclamationFillIcon","Tooltip","positionTypeKey","TPSLPositionTypeUI","event","TPSLPositionTypeWidget","utils","convertValueToPercentage","Slider","TPSLQuantity","inputRef","currentQtyPercentage","formatQuantity","qty","_qty","errorMsg","e","TPSL","TPSL_OrderEntity","symbolInfo","onCancel","onComplete","status","errors","valid","position","setValues","onClose","isEditing","isMobile","renderQtyInput","err","PositionTPSLConfirm","tpPrice","slPrice","maxQty","quoteDP","baseDP","_isPositionTPSL","needConfirm","setNeedConfirm","renderPositionType","renderTPSLPrice","isOrderPrice","isEnable","colorType","isPositionTPSL","TPSLOrderType","check","usePositionStream","useSymbolsInfo","useTPSLOrder","AlgoOrderRootType","SDKError","modal","toast","useTPSLBuilder","triggerPrice","withTriggerPrice","prevTPSLType","positions","tpslOrder","submit","deleteOrder","setValue","validate","isCreateMutating","isUpdateMutating","setQuantity","setOrderPrice","name","setPnL","dirty","quantity","diff","tp_trigger_price","sl_trigger_price","tp_order_price","sl_order_price","cancel","onConfirm","res","onSubmit","error","TPSLWidget","close","TPSLSheetId","TPSLDialogId","PositionTPSLPopover","buttonProps","useModal","PositionTPSLSheet","resolve","hide","updateArgs","updateSheetTitle","title","onCompleted","base_dp","finalIsEditing","reject","i18n","TPSLAdvancedUI","validated","formattedOrder","setOrderValue","tpValues","setTpValuse","slValues","setSlValues","prev","ArrowRightIcon","useOrderEntry","isTPSLEnable","useTPSLAdvanced","innerMetaState","setInnerMetaState","helper","metaState","TPSLAdvancedWidget","TPSLAdvancedSheetId","TPSLAdvancedDialogId","findPositionTPSLFromOrders","useOrderStream","OrderStatus","useTPSLDetail","fullPositionOrders","setFullPositionOrders","partialPositionOrders","setPartialPositionOrders","tpslOrders","cancelAlgoOrder","cancelPostionOrdersByTypes","refresh","onCancelOrder","onCancelAllTPSLOrders","showTPSLDialog","dialogId","editTPSLOrder","addTPSLOrder","fullPositionOrder","createContext","useContext","TPSLDetailContext","TPSLDetailProvider","useTPSLDetailContext","ChevronDownIcon","AuthGuardDataTable","findTPSLFromOrder","perpPositions","FlexCell","EstPnlRender","tp_unrealPnl","sl_unrealPnl","findTPSLOrderPriceFromOrder","OrderPriceRender","QtyRender","TriggerPrice","TypeRender","useColumn","moblieColumns","_","record","desktopColums","CancelAllBtn","DeleteIcon","size","loading","setLoading","OrdersTable","orders","columns","OrdersTableMobile","orderIds","acc","curr","row","DeleteBtn","TPSLDetailUI","FullPositionPart","PartialPositionPart","open","setOpen","PositionTypeDescription","AddButton","TPSLDetailWidget","TPSLDetailDialogId","TPSLDetailSheetId","useTPSLSimpleDialog","positionsInfo","TPSLSimpleDialogUI","footer","errorMessage","tpError","slError","text","renderPnl","TPSLSimpleDialogWidget","showAdvancedTPSLDialog","TPSLSimpleSheetId","TPSLSimpleDialogId"],"mappings":"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","sourcesContent":["import { i18n } from \"@orderly.network/i18n\";\nimport { type AlgoOrderRootType } from \"@orderly.network/types\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { TPSL, TPSLProps } from \"./tpsl.ui\";\nimport { TPSLBuilderOptions, useTPSLBuilder } from \"./useTPSL.script\";\n\nexport type TPSLWidgetProps = {\n onTPSLTypeChange?: (type: AlgoOrderRootType) => void;\n} & TPSLBuilderOptions &\n TPSLProps;\n\nexport const TPSLWidget = (props: TPSLWidgetProps) => {\n const { onCancel, onComplete, close, ...rest } = props;\n const state = useTPSLBuilder(rest);\n\n return (\n <TPSL\n {...state}\n onCancel={onCancel}\n onComplete={onComplete}\n close={close}\n />\n );\n};\n\nexport const TPSLSheetId = \"TPSLSheetId\";\nexport const TPSLDialogId = \"TPSLDialogId\";\n\nregisterSimpleSheet(TPSLSheetId, TPSLWidget);\n\nregisterSimpleDialog(TPSLDialogId, TPSLWidget, {\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\n","import { useRef, useState } from \"react\";\nimport {\n ComputedAlgoOrder,\n useLocalStorage,\n utils,\n} from \"@orderly.network/hooks\";\nimport { OrderValidationResult } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@orderly.network/react-app\";\nimport {\n API,\n OrderlyOrder,\n OrderSide,\n OrderType,\n PositionType,\n} from \"@orderly.network/types\";\nimport {\n Badge,\n Box,\n Button,\n Divider,\n Flex,\n Grid,\n Input,\n Slider,\n Text,\n textVariants,\n cn,\n inputFormatter,\n Checkbox,\n convertValueToPercentage,\n ThrottledButton,\n ScrollArea,\n useScreen,\n} from \"@orderly.network/ui\";\nimport { transSymbolformString } from \"@orderly.network/utils\";\nimport { OrderInfo } from \"./components/orderInfo\";\nimport { PnlInfo } from \"./components/pnlInfo\";\nimport { TPSLInputRowWidget } from \"./components/tpslInputRow\";\nimport { TPSLPositionTypeWidget } from \"./components/tpslPostionType\";\nimport { TPSLQuantity } from \"./components/tpslQty\";\nimport { TPSLBuilderState } from \"./useTPSL.script\";\n\nexport type TPSLProps = {\n close?: () => void;\n onClose?: () => void;\n onCancel?: () => void;\n onComplete?: () => void;\n withTriggerPrice?: boolean;\n};\n\n//------------- TPSL form start ---------------\nexport const TPSL = (props: TPSLBuilderState & TPSLProps) => {\n const {\n TPSL_OrderEntity,\n symbolInfo,\n onCancel,\n onComplete,\n status,\n errors,\n valid,\n position,\n setValues,\n onClose,\n isEditing,\n } = props;\n\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n const { parseErrorMsg } = useOrderEntryFormErrorMsg(errors);\n\n const renderQtyInput = () => {\n if (TPSL_OrderEntity.position_type === PositionType.FULL) {\n return null;\n }\n\n return (\n <Box className=\"oui-px-0.5\">\n <TPSLQuantity\n maxQty={props.maxQty}\n quantity={(props.orderQuantity ?? props.maxQty) as number}\n baseTick={symbolInfo(\"base_tick\")}\n dp={symbolInfo(\"base_dp\")}\n onQuantityChange={props.setQuantity}\n quote={symbolInfo(\"base\")}\n isEditing={props.isEditing}\n errorMsg={parseErrorMsg(\"quantity\")}\n />\n </Box>\n );\n };\n\n return (\n <div id=\"orderly-tp_sl-order-edit-content\">\n <ScrollArea className={cn(isMobile && \"oui-h-[calc(100vh-200px)]\")}>\n <OrderInfo\n baseDP={symbolInfo(\"base_dp\")}\n quoteDP={symbolInfo(\"quote_dp\")}\n classNames={{\n root: \"oui-mb-3\",\n container: \"oui-gap-x-[30px]\",\n }}\n order={{\n symbol: position.symbol,\n order_quantity: position.position_qty.toString(),\n order_price: position.average_open_price.toString(),\n }}\n />\n <Flex\n direction=\"column\"\n justify=\"start\"\n itemAlign={\"start\"}\n gap={3}\n className=\"oui-w-full oui-mb-3\"\n >\n {!isEditing && (\n <TPSLPositionTypeWidget\n disableSelector\n value={TPSL_OrderEntity.position_type ?? PositionType.PARTIAL}\n onChange={(key, value) => {\n if (value === PositionType.FULL) {\n setValues({\n position_type: value,\n quantity: Math.abs(position.position_qty).toString(),\n tp_order_price: \"\",\n tp_order_type: OrderType.MARKET,\n tp_trigger_price: \"\",\n sl_order_price: \"\",\n sl_order_type: OrderType.MARKET,\n sl_trigger_price: \"\",\n });\n } else {\n setValues({\n position_type: value,\n quantity: \"\",\n tp_order_price: \"\",\n tp_order_type: OrderType.MARKET,\n tp_trigger_price: \"\",\n sl_order_price: \"\",\n sl_order_type: OrderType.MARKET,\n sl_trigger_price: \"\",\n });\n }\n }}\n />\n )}\n {TPSL_OrderEntity.position_type === PositionType.FULL && (\n <Text className=\"oui-text-warning oui-text-2xs\">\n {t(\"tpsl.positionType.full.tips.market\")}\n </Text>\n )}\n </Flex>\n {renderQtyInput()}\n <Flex\n direction=\"column\"\n itemAlign={\"start\"}\n justify={\"start\"}\n gap={6}\n className=\"oui-w-full oui-mt-3\"\n >\n <TPSLInputRowWidget\n symbol={position.symbol}\n rootOrderPrice={position.average_open_price.toString()}\n type=\"tp\"\n values={{\n enable: TPSL_OrderEntity.tp_enable ?? true,\n trigger_price:\n TPSL_OrderEntity.tp_trigger_price?.toString() ?? undefined,\n PnL: TPSL_OrderEntity.tp_pnl?.toString() ?? undefined,\n Offset: TPSL_OrderEntity.tp_offset?.toString() ?? undefined,\n \"Offset%\":\n TPSL_OrderEntity.tp_offset_percentage?.toString() ?? undefined,\n order_price:\n TPSL_OrderEntity.tp_order_price?.toString() ?? undefined,\n order_type: TPSL_OrderEntity.tp_order_type ?? OrderType.MARKET,\n }}\n hideOrderPrice={\n TPSL_OrderEntity.position_type === PositionType.FULL\n }\n errors={errors}\n disableOrderTypeSelector={isEditing}\n quote_dp={symbolInfo(\"quote_dp\")}\n positionType={\n TPSL_OrderEntity.position_type ?? PositionType.PARTIAL\n }\n onChange={(key, value) => {\n console.log(\"key\", key, \"value\", value);\n props.setOrderValue(key as keyof OrderlyOrder, value);\n }}\n />\n\n <TPSLInputRowWidget\n symbol={position.symbol}\n rootOrderPrice={position.average_open_price.toString()}\n type=\"sl\"\n values={{\n enable: TPSL_OrderEntity.sl_enable ?? true,\n trigger_price:\n TPSL_OrderEntity.sl_trigger_price?.toString() ?? undefined,\n PnL: TPSL_OrderEntity.sl_pnl?.toString() ?? undefined,\n Offset: TPSL_OrderEntity.sl_offset?.toString() ?? undefined,\n \"Offset%\":\n TPSL_OrderEntity.sl_offset_percentage?.toString() ?? undefined,\n order_price:\n TPSL_OrderEntity.sl_order_price?.toString() ?? undefined,\n order_type: TPSL_OrderEntity.sl_order_type ?? OrderType.MARKET,\n }}\n hideOrderPrice={\n TPSL_OrderEntity.position_type === PositionType.FULL\n }\n errors={errors}\n quote_dp={symbolInfo(\"quote_dp\")}\n positionType={\n TPSL_OrderEntity.position_type ?? PositionType.PARTIAL\n }\n disableOrderTypeSelector={isEditing}\n onChange={(key, value) => {\n console.log(\"key\", key, \"value\", value);\n props.setOrderValue(key as keyof OrderlyOrder, value);\n }}\n />\n </Flex>\n\n {/* <TPSLPrice\n sl_pnl={TPSL_OrderEntity.sl_pnl}\n tp_pnl={TPSL_OrderEntity.tp_pnl}\n quote={symbolInfo(\"quote\")}\n quote_dp={symbolInfo(\"quote_dp\")}\n onPriceChange={props.setOrderPrice}\n onPnLChange={props.setPnL}\n errors={errors}\n tp_values={{\n PnL: `${TPSL_OrderEntity.tp_pnl ?? \"\"}`,\n Offset: `${TPSL_OrderEntity.tp_offset ?? \"\"}`,\n \"Offset%\": `${TPSL_OrderEntity.tp_offset_percentage ?? \"\"}`,\n }}\n sl_values={{\n PnL: `${TPSL_OrderEntity.sl_pnl ?? \"\"}`,\n Offset: `${TPSL_OrderEntity.sl_offset ?? \"\"}`,\n \"Offset%\": `${TPSL_OrderEntity.sl_offset_percentage ?? \"\"}`,\n }}\n tp_trigger_price={TPSL_OrderEntity.tp_trigger_price ?? \"\"}\n sl_trigger_price={TPSL_OrderEntity.sl_trigger_price ?? \"\"}\n /> */}\n <PnlInfo\n tp_pnl={TPSL_OrderEntity.tp_pnl}\n sl_pnl={TPSL_OrderEntity.sl_pnl}\n className=\"oui-my-3\"\n />\n </ScrollArea>\n <Grid cols={2} gap={3} mt={4}>\n <Button\n size={\"md\"}\n color={\"secondary\"}\n data-testid={\"tpsl-cancel\"}\n onClick={() => {\n props.close?.();\n }}\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton\n size={\"md\"}\n data-testid={\"tpsl-confirm\"}\n disabled={!props.valid || status.isCreateMutating}\n loading={status.isCreateMutating || status.isUpdateMutating}\n onClick={() => {\n props\n .onSubmit()\n .then(() => {\n props.close?.();\n onComplete?.();\n })\n .catch((err) => {\n console.log(\"--->>>cancel order\", err);\n });\n }}\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Grid>\n </div>\n );\n};\n\nexport const PriceInput: React.FC<{\n type: string;\n label?: string;\n value?: string | number;\n error?: string;\n onValueChange: (value: string) => void;\n quote_dp: number;\n disabled?: boolean;\n}> = (props) => {\n const [placeholder, setPlaceholder] = useState<string>(\"USDC\");\n const { t } = useTranslation();\n\n return (\n <Input.tooltip\n data-testid={`oui-testid-tpsl-popUp-${props.type.toLowerCase()}-input`}\n prefix={props.label ?? t(\"common.markPrice\")}\n size={{ initial: \"lg\", lg: \"md\" }}\n tooltip={props.error}\n placeholder={placeholder}\n disabled={props.disabled}\n align={\"right\"}\n autoComplete={\"off\"}\n value={props.value}\n color={props.error ? \"danger\" : undefined}\n classNames={{\n input: \"oui-text-2xs placeholder:oui-text-2xs\",\n prefix: \"oui-text-base-contrast-54 oui-text-2xs\",\n root: \"oui-w-full\",\n // root: \"oui-outline-line-12 focus-within:oui-outline-primary-light\",\n }}\n onValueChange={props.onValueChange}\n onFocus={() => {\n setPlaceholder(\"\");\n }}\n onBlur={() => {\n setPlaceholder(\"USDC\");\n }}\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.quote_dp),\n inputFormatter.currencyFormatter,\n inputFormatter.decimalPointFormatter,\n ]}\n />\n );\n};\n\nexport type PositionTPSLConfirmProps = {\n symbol: string;\n qty: number;\n tpPrice?: number;\n slPrice?: number;\n maxQty: number;\n side: OrderSide;\n // symbolConfig:API.SymbolExt\n baseDP: number;\n quoteDP: number;\n isEditing?: boolean;\n isPositionTPSL?: boolean;\n orderInfo: ComputedAlgoOrder;\n};\n\n// ------------ Position TP/SL Confirm dialog start------------\nexport const PositionTPSLConfirm = (props: PositionTPSLConfirmProps) => {\n const {\n symbol,\n tpPrice,\n slPrice,\n qty,\n maxQty,\n side,\n quoteDP,\n baseDP,\n isEditing,\n isPositionTPSL: _isPositionTPSL,\n orderInfo: order,\n } = props;\n const { t } = useTranslation();\n\n const [needConfirm, setNeedConfirm] = useLocalStorage(\n \"orderly_order_confirm\",\n true,\n );\n const renderPositionType = () => {\n if (order.position_type === PositionType.FULL) {\n return <Text>{t(\"tpsl.positionType.full\")}</Text>;\n }\n return <Text>{t(\"tpsl.positionType.partial\")}</Text>;\n };\n // console.log(\"PositionTPSLConfirm\", qty, maxQty, quoteDP);\n\n const renderTPSLPrice = ({\n price,\n isOrderPrice,\n isEnable,\n colorType,\n }: {\n price: string | number;\n isOrderPrice?: boolean;\n isEnable?: boolean;\n colorType: \"TP\" | \"SL\";\n }) => {\n if (!isEnable) {\n return <Text className=\"oui-text-base-contrast-36\">-- USDC</Text>;\n }\n if (!price) {\n if (isOrderPrice) {\n return (\n <Text className=\"oui-text-base-contrast-36\">\n {t(\"common.market\")}\n </Text>\n );\n }\n }\n return (\n <Text.numeral\n unit={\"USDC\"}\n rule={\"price\"}\n className={cn(\n \"oui-text-base-contrast\",\n colorType === \"TP\" ? \"oui-text-trade-profit\" : \"oui-text-trade-loss\",\n )}\n unitClassName={\"oui-text-base-contrast-36 oui-ml-1\"}\n dp={quoteDP}\n padding={false}\n >\n {price}\n </Text.numeral>\n );\n };\n\n const isPositionTPSL = _isPositionTPSL;\n\n return (\n <>\n {isEditing && (\n <Text as=\"div\" size=\"2xs\" intensity={80} className=\"oui-mb-3\">\n {t(\"tpsl.agreement\", { symbol: transSymbolformString(symbol) })}\n </Text>\n )}\n\n <Flex pb={4}>\n <Box grow>\n <Text.formatted\n rule={\"symbol\"}\n formatString=\"base-type\"\n size=\"base\"\n showIcon\n as=\"div\"\n intensity={80}\n >\n {symbol}\n </Text.formatted>\n </Box>\n <Flex gap={1}>\n {isPositionTPSL && (\n <Badge size=\"xs\" color={\"primary\"}>\n {t(\"common.position\")}\n </Badge>\n )}\n\n {/* <Badge size=\"xs\" color=\"neutral\">\n TP/SL\n </Badge> */}\n <TPSLOrderType tpPrice={tpPrice} slPrice={slPrice} />\n {side === OrderSide.SELL ? (\n <Badge size=\"xs\" color=\"success\">\n {t(\"common.buy\")}\n </Badge>\n ) : (\n <Badge size=\"xs\" color=\"danger\">\n {t(\"common.sell\")}\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider />\n {order.tp_trigger_price || order.sl_trigger_price ? (\n <>\n <Divider className=\"oui-my-4\" />\n <div\n className={textVariants({\n size: \"sm\",\n intensity: 54,\n className:\n \"oui-space-y-1 oui-w-full oui-flex oui-flex-col oui-gap-3\",\n })}\n >\n <Text className=\"oui-text-base-contrast\">\n {renderPositionType()}\n </Text>\n <Flex justify={\"between\"}>\n <Text>{t(\"common.orderQty\")}</Text>\n <Text.numeral\n rule={\"price\"}\n dp={baseDP}\n padding={false}\n className=\"oui-text-base-contrast\"\n >\n {order.quantity ?? \"-\"}\n </Text.numeral>\n </Flex>\n\n <Flex\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n gap={1}\n className=\"oui-w-full\"\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.tpTriggerPrice\")}</Text>{\" \"}\n {renderTPSLPrice({\n price: order.tp_trigger_price ?? \"\",\n isOrderPrice: false,\n isEnable: !!order.tp_trigger_price,\n colorType: \"TP\",\n })}\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.tpOrderPrice\")}</Text>\n {renderTPSLPrice({\n price: order.tp_order_price ?? \"\",\n isOrderPrice: true,\n isEnable: !!order.tp_trigger_price,\n colorType: \"TP\",\n })}\n </Flex>\n </Flex>\n\n <Flex\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n gap={1}\n className=\"oui-w-full\"\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.slTriggerPrice\")}</Text>\n {renderTPSLPrice({\n price: order.sl_trigger_price ?? \"\",\n isOrderPrice: false,\n isEnable: !!order.sl_trigger_price,\n colorType: \"SL\",\n })}\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.slOrderPrice\")}</Text>\n {renderTPSLPrice({\n price: order.sl_order_price ?? \"\",\n isOrderPrice: true,\n isEnable: !!order.sl_trigger_price,\n colorType: \"SL\",\n })}\n </Flex>\n </Flex>\n </div>\n </>\n ) : null}\n <Box pt={2}>\n <Flex gap={1}>\n <Checkbox\n id=\"disabledConfirm\"\n color=\"white\"\n checked={!needConfirm}\n onCheckedChange={(check) => {\n setNeedConfirm(!check);\n }}\n />\n <label\n htmlFor=\"disabledConfirm\"\n className={textVariants({\n size: \"xs\",\n intensity: 54,\n className: \"oui-ml-1\",\n })}\n >\n {t(\"orderEntry.disableOrderConfirm\")}\n </label>\n </Flex>\n </Box>\n </>\n );\n};\n\n//------------- Position TP/SL Confirm dialog end------------\n\nconst TPSLOrderType = (props: { tpPrice?: number; slPrice?: number }) => {\n const { tpPrice, slPrice } = props;\n const { t } = useTranslation();\n\n if (!!tpPrice && !!slPrice) {\n return (\n <Badge size=\"xs\" color=\"neutral\">\n {t(\"common.tpsl\")}\n </Badge>\n );\n }\n\n if (!!tpPrice) {\n return (\n <Badge size=\"xs\" color=\"neutral\">\n {t(\"tpsl.tp\")}\n </Badge>\n );\n }\n\n if (!!slPrice) {\n return (\n <Badge size=\"xs\" color=\"neutral\">\n {t(\"tpsl.sl\")}\n </Badge>\n );\n }\n\n return null;\n};\n","import {\n useIndexPrice,\n useMarkPrice,\n useSymbolLeverage,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { OrderlyOrder } from \"@orderly.network/types\";\nimport { cn, Flex, Grid, Text, TokenIcon } from \"@orderly.network/ui\";\n\ntype Props = {\n order: Partial<OrderlyOrder>;\n baseDP?: number;\n quoteDP?: number;\n className?: string;\n classNames?: {\n root?: string;\n symbol?: string;\n container?: string;\n };\n};\nexport const OrderInfo = (props: Props) => {\n const { t } = useTranslation();\n const { order } = props;\n const { symbol, side } = order;\n const markPrice = useMarkPrice(symbol!);\n const indexPrice = useIndexPrice(symbol!);\n const symbolLeverage = useSymbolLeverage(symbol!);\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-w-full oui-gap-3 oui-font-semibold \",\n props.classNames?.root,\n )}\n >\n <Flex\n itemAlign={\"center\"}\n className={cn(\"oui-gap-2 \", props.classNames?.symbol)}\n >\n <Flex gap={1} itemAlign={\"center\"}>\n <TokenIcon symbol={symbol} className=\"oui-w-5 oui-h-5\" />\n <Text.formatted\n className=\"oui-break-normal oui-whitespace-nowrap\"\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"sm\"\n weight=\"semibold\"\n intensity={98}\n >\n {symbol}\n </Text.formatted>\n </Flex>\n <Text\n size=\"2xs\"\n className=\"oui-text-base-contrast-36 oui-h-[18px] oui-px-2 oui-bg-base-7 oui-rounded oui-font-semibold\"\n >\n {symbolLeverage}x\n </Text>\n </Flex>\n <Grid\n cols={2}\n gapX={2}\n gapY={1}\n className={cn(\"oui-w-full oui-gap-x-2 \", props.classNames?.container)}\n >\n <Flex justify={\"between\"} className=\" oui-text-base-contrast-36\">\n <Text size=\"2xs\">{t(\"tpsl.advanced.quantity\")}</Text>\n <Text.numeral\n rule=\"price\"\n className=\"oui-text-base-contrast-80\"\n size=\"2xs\"\n dp={props.baseDP ?? 2}\n >\n {Number(order.order_quantity)}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-text-base-contrast-36\">\n <Text size=\"2xs\">{t(\"tpsl.advanced.lastPrice\")}</Text>\n <Text.numeral\n rule=\"price\"\n className=\"oui-text-base-contrast-80\"\n size=\"2xs\"\n dp={props.quoteDP ?? 2}\n >\n {indexPrice?.data}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-text-base-contrast-36\">\n <Text size=\"2xs\">{t(\"tpsl.advanced.orderPrice\")}</Text>\n <Text.numeral\n rule=\"price\"\n className=\"oui-text-base-contrast-80\"\n size=\"2xs\"\n dp={props.quoteDP ?? 2}\n >\n {Number(order.order_price)}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-text-base-contrast-36\">\n <Text size=\"2xs\">{t(\"common.markPrice\")}</Text>\n <Text.numeral\n rule=\"price\"\n className=\"oui-text-base-contrast-80\"\n size=\"2xs\"\n dp={props.quoteDP ?? 2}\n >\n {markPrice?.data}\n </Text.numeral>\n </Flex>\n </Grid>\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\ntype Props = {\n tp_pnl?: string | number;\n sl_pnl?: string | number;\n className?: string;\n};\n\nexport const PnlInfo = (props: Props) => {\n const { t } = useTranslation();\n const { tp_pnl, sl_pnl } = props;\n const riskRatio = useMemo(() => {\n if (tp_pnl && sl_pnl) {\n const ratio = new Decimal(tp_pnl).div(sl_pnl).abs().toNumber().toFixed(2);\n return (\n <Flex\n gap={1}\n itemAlign={\"center\"}\n className=\"oui-text-base-contrast-80\"\n >\n <Text>{ratio}</Text>\n <Text className=\"oui-text-base-contrast-36\">x</Text>\n </Flex>\n );\n }\n return <Text className=\"oui-text-base-contrast-36\">-- x</Text>;\n }, [tp_pnl, sl_pnl]);\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-w-full oui-gap-1 oui-text-2xs oui-text-base-contrast-36\",\n props.className,\n )}\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.totalEstTpPnl\")}</Text>\n <Text.numeral\n suffix={\n <Text className=\"oui-text-base-contrast-36 oui-ml-1\">USDC</Text>\n }\n rule=\"price\"\n coloring\n visible={true}\n size=\"2xs\"\n dp={2}\n >\n {tp_pnl ? Number(tp_pnl) : \"--\"}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.totalEstSlPnl\")}</Text>\n {sl_pnl ? (\n <Text.numeral\n suffix={\n <Text className=\"oui-text-base-contrast-36 oui-ml-1\">USDC</Text>\n }\n coloring\n visible={true}\n size=\"2xs\"\n dp={2}\n >\n {Number(sl_pnl)}\n </Text.numeral>\n ) : (\n <Text size=\"2xs\">-- USDC</Text>\n )}\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.riskRewardRatio\")}</Text>\n <Text className=\"oui-text-base-contrast-80\" size=\"2xs\">\n {riskRatio}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { OrderValidationResult } from \"@orderly.network/hooks\";\nimport { OrderType, PositionType } from \"@orderly.network/types\";\n\nexport type Props = {\n disableOrderTypeSelector?: boolean;\n type: \"tp\" | \"sl\";\n quote_dp: number;\n positionType: PositionType;\n errors: OrderValidationResult | null;\n hideOrderPrice?: boolean;\n values: {\n enable: boolean;\n trigger_price: string | undefined;\n PnL: string | undefined;\n Offset: string | undefined;\n \"Offset%\": string | undefined;\n ROI?: string | undefined;\n order_price: string | undefined;\n order_type: OrderType;\n };\n onChange: (key: string, value: string | boolean | number) => void;\n rootOrderPrice: string | undefined;\n symbol: string;\n};\nexport const useTPSLInputRowScript = (props: Props) => {\n return {\n disableOrderTypeSelector: props.disableOrderTypeSelector,\n values: props.values,\n onChange: props.onChange,\n type: props.type,\n quote_dp: props.quote_dp,\n positionType: props.positionType,\n errors: props.errors,\n hideOrderPrice: props.hideOrderPrice,\n rootOrderPrice: props.rootOrderPrice,\n symbol: props.symbol,\n };\n};\n","import React, { Fragment, useMemo } from \"react\";\nimport { useSymbolLeverage } from \"@orderly.network/hooks\";\nimport { useTranslation, Trans } from \"@orderly.network/i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@orderly.network/react-app\";\nimport { OrderType, PositionType } from \"@orderly.network/types\";\nimport { Flex, Text, Grid, Checkbox, cn } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { PnlInputWidget } from \"../../pnlInput/pnlInput.widget\";\nimport { PriceInput } from \"../../tpsl.ui\";\nimport { OrderPriceType } from \"../orderPriceType\";\nimport { useTPSLInputRowScript } from \"./tpslInputRow.script\";\n\ntype TPSLInputRowProps = ReturnType<typeof useTPSLInputRowScript>;\n\nexport const TPSLInputRowUI: React.FC<TPSLInputRowProps> = (props) => {\n const { t } = useTranslation();\n const { parseErrorMsg } = useOrderEntryFormErrorMsg(props.errors);\n const { values, positionType } = props;\n const symbolLeverage = useSymbolLeverage(props.symbol);\n const roi = useMemo(() => {\n let _roi = null;\n if (!props.rootOrderPrice) {\n return null;\n }\n\n if (!values.trigger_price && !values.order_price) {\n return null;\n }\n let _entryPrice = new Decimal(0);\n if (values.order_type === OrderType.MARKET) {\n if (!values.trigger_price) {\n return null;\n }\n _entryPrice = new Decimal(values.trigger_price);\n } else if (values.order_type === OrderType.LIMIT) {\n if (!values.order_price) {\n return null;\n }\n _entryPrice = new Decimal(values.order_price);\n }\n const rootOrderPrice = new Decimal(props.rootOrderPrice);\n _roi = _entryPrice\n .minus(rootOrderPrice)\n .div(rootOrderPrice)\n .mul(symbolLeverage)\n .abs()\n .mul(100)\n .mul(props.type === \"tp\" ? 1 : -1)\n .toNumber();\n return _roi;\n }, [values, props.rootOrderPrice, symbolLeverage, props.type]);\n\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n justify={\"start\"}\n className=\"oui-w-full\"\n >\n <Flex className=\"oui-w-full\" itemAlign={\"center\"} justify={\"start\"}>\n <Checkbox\n data-testid={`oui-testid-orderEntry-${props.type}-enable-checkBox`}\n id={`enable_${props.type}`}\n color={\"white\"}\n checked={values.enable}\n onCheckedChange={(checked: boolean) => {\n props.onChange(`${props.type}_enable`, !!checked);\n }}\n />\n <label\n htmlFor={`enable_${props.type}`}\n className={\n \"oui-ml-1 oui-cursor-pointer oui-text-sm oui-text-base-contrast-36\"\n }\n >\n {props.type === \"tp\"\n ? t(\"tpsl.advanced.TP.label\")\n : t(\"tpsl.advanced.SL.label\")}\n </label>\n </Flex>\n <Flex\n direction={\"column\"}\n gap={2}\n itemAlign={\"start\"}\n className={cn(\"oui-w-full oui-pt-2\", values.enable ? \"\" : \"oui-hidden\")}\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-w-full oui-gap-0.5\"\n >\n <Text className=\"oui-text-2xs oui-text-base-contrast-54\">\n {t(\"tpsl.advanced.triggerPrice\")}\n </Text>\n <Grid cols={2} gap={2} className=\"oui-w-full oui-px-0.5\">\n <PriceInput\n type={`${props.type} price`}\n value={values.trigger_price}\n error={parseErrorMsg(`${props.type}_trigger_price`)}\n onValueChange={(value) => {\n props.onChange(`${props.type}_trigger_price`, value);\n }}\n quote_dp={props.quote_dp}\n />\n <PnlInputWidget\n type={props.type === \"tp\" ? \"TP\" : \"SL\"}\n onChange={(key, value) => {\n props.onChange(key, value as string);\n }}\n quote={\"USDC\"}\n quote_dp={2}\n values={values}\n />\n </Grid>\n </Flex>\n <Flex\n direction={\"column\"}\n className={cn(\n \"oui-w-full oui-gap-0.5\",\n props.hideOrderPrice ? \"oui-hidden\" : \"\",\n )}\n itemAlign={\"start\"}\n >\n <Text className=\"oui-text-2xs oui-text-base-contrast-54\">\n {t(\"tpsl.advanced.orderPrice\")}\n </Text>\n <Grid cols={2} gap={2} className=\"oui-w-full oui-px-0.5\">\n <PriceInput\n disabled={\n positionType === PositionType.FULL ||\n values.order_type === OrderType.MARKET\n }\n type={\"order price\"}\n label={\n values.order_type === OrderType.LIMIT\n ? t(\"tpsl.advanced.limit\")\n : t(\"tpsl.advanced.market\")\n }\n value={values.order_price}\n error={parseErrorMsg(`${props.type}_order_price`)}\n onValueChange={(value) => {\n props.onChange(`${props.type}_order_price`, value);\n }}\n quote_dp={props.quote_dp}\n />\n <OrderPriceType\n disabled={\n positionType === PositionType.FULL ||\n props.disableOrderTypeSelector\n }\n type={values.order_type}\n onChange={(value) => {\n props.onChange(`${props.type}_order_type`, value as OrderType);\n }}\n />\n </Grid>\n </Flex>\n </Flex>\n <RenderROI\n price={\n values.order_type === OrderType.MARKET\n ? values.trigger_price\n : values.order_price\n }\n orderType={values.order_type}\n pnl={values.PnL}\n roi={roi}\n dp={props.quote_dp}\n className=\"oui-mt-1\"\n />\n </Flex>\n );\n};\n\nconst RenderROI: React.FC<{\n className?: string;\n price?: number | string;\n pnl?: number | string;\n roi?: number | null;\n dp: number;\n orderType: OrderType;\n}> = (props) => {\n const { t } = useTranslation();\n const { price, pnl, roi, dp, className, orderType } = props;\n if (!roi || !price || !pnl) {\n return null;\n }\n return (\n <Text className={cn(\"oui-text-2xs oui-text-base-contrast-36\", className)}>\n <Trans\n i18nKey=\"tpsl.advanced.ROI\"\n components={[\n <Fragment key=\"price\">\n <Text.numeral\n className=\"oui-px-1 oui-text-base-contrast\"\n dp={dp}\n suffix={<Text className=\"oui-pl-0.5\">USDC</Text>}\n >\n {price}\n </Text.numeral>\n </Fragment>,\n <Fragment key=\"orderType\">\n <Text className=\"oui-px-1 oui-text-base-contrast\">\n {orderType === OrderType.MARKET\n ? t(\"common.market\")\n : t(\"common.limit\")}\n </Text>\n </Fragment>,\n <Fragment key=\"pnl\">\n <Text.numeral\n coloring\n className=\"oui-whitespace-nowrap oui-px-1\"\n dp={2}\n suffix={<Text className=\"oui-pl-0.5\">USDC</Text>}\n >\n {pnl}\n </Text.numeral>\n </Fragment>,\n\n <Fragment key=\"roi\">\n <Text.numeral\n coloring\n className=\"oui-whitespace-nowrap oui-px-1\"\n dp={2}\n suffix=\"%\"\n >\n {roi}\n </Text.numeral>\n </Fragment>,\n ]}\n />\n </Text>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n CaretDownIcon,\n cn,\n Input,\n MenuItem,\n SimpleDropdownMenu,\n} from \"@orderly.network/ui\";\nimport { inputFormatter, Text } from \"@orderly.network/ui\";\nimport { PNLInputState, PnLMode } from \"./useBuilder.script\";\n\nexport type PNLInputProps = PNLInputState & { testId?: string; quote: string };\n\nexport const PNLInput = (props: PNLInputProps) => {\n const {\n mode,\n modes,\n onModeChange,\n onValueChange,\n quote,\n quote_dp,\n value,\n pnl,\n } = props;\n const { t } = useTranslation();\n\n const [prefix, setPrefix] = useState<string>(mode);\n const [placeholder, setPlaceholder] = useState<string>(\n mode === PnLMode.PERCENTAGE ? \"%\" : quote,\n );\n\n const color = useMemo(() => {\n const num = Number(pnl);\n\n if (isNaN(num) || num === 0) return \"\";\n\n if (num > 0) return \"oui-text-trade-profit\";\n if (num < 0) return \"oui-text-trade-loss\";\n }, [pnl]);\n\n useEffect(() => {\n const label = modes.find((item) => item.value === mode)?.label;\n setPrefix(label!);\n setPlaceholder(mode === PnLMode.PERCENTAGE ? \"%\" : quote);\n }, [mode, modes]);\n\n return (\n <Input\n prefix={prefix}\n size={{\n initial: \"lg\",\n lg: \"md\",\n }}\n placeholder={placeholder}\n align={\"right\"}\n value={value}\n data-testid={props.testId}\n autoComplete={\"off\"}\n onValueChange={onValueChange}\n formatters={[\n // inputFormatter.numberFormatter,\n props.formatter({ dp: quote_dp, mode }),\n inputFormatter.currencyFormatter,\n inputFormatter.decimalPointFormatter,\n ]}\n // className={color}\n classNames={{\n input: cn(\"oui-text-2xs\", color),\n prefix: \"oui-text-base-contrast-54 oui-text-2xs\",\n root: \"oui-outline-line-12 focus-within:oui-outline-primary-light\",\n }}\n onFocus={() => {\n setPlaceholder(\"\");\n props.setFocus(true);\n }}\n onBlur={() => {\n setPlaceholder(mode === PnLMode.PERCENTAGE ? \"%\" : quote);\n props.setFocus(false);\n }}\n // value={props.value}\n suffix={\n <>\n {mode === PnLMode.PERCENTAGE && !!value && (\n <Text\n size={\"2xs\"}\n color=\"inherit\"\n className={cn(\"oui-ml-[2px]\", color)}\n >\n %\n </Text>\n )}\n <PNLMenus\n mode={mode}\n modes={modes}\n onModeChange={(item) => onModeChange(item.value as PnLMode)}\n />\n </>\n }\n />\n );\n};\n\nconst PNLMenus = (props: {\n mode?: string;\n modes: MenuItem[];\n onModeChange: (value: MenuItem) => void;\n}) => {\n return (\n <SimpleDropdownMenu\n currentValue={props.mode}\n menu={props.modes}\n align={\"end\"}\n size={\"xs\"}\n className={\"oui-min-w-[80px]\"}\n onSelect={(item) => props.onModeChange(item as MenuItem)}\n >\n <button className={\"oui-p-2\"}>\n <CaretDownIcon size={12} color={\"white\"} />\n </button>\n </SimpleDropdownMenu>\n );\n};\n","import { useMemo, useRef, useState } from \"react\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { MenuItem } from \"@orderly.network/ui\";\nimport type {\n InputFormatter,\n InputFormatterOptions,\n} from \"@orderly.network/ui\";\nimport { Decimal, todpIfNeed } from \"@orderly.network/utils\";\n\nexport enum PnLMode {\n PnL = \"PnL\",\n OFFSET = \"Offset\",\n PERCENTAGE = \"Offset%\",\n}\n\nexport type PNL_Values = {\n PnL: string | undefined;\n Offset: string | undefined;\n \"Offset%\": string | undefined;\n};\n\nexport type BuilderProps = {\n type: \"TP\" | \"SL\";\n\n quote_dp?: number;\n onChange: (key: string, value: number | string) => void;\n\n values: PNL_Values;\n};\n\nexport const usePNLInputBuilder = (props: BuilderProps) => {\n const { type, values } = props;\n const [mode, setMode] = useLocalStorage<PnLMode>(\n \"TP/SL_Mode\",\n PnLMode.PERCENTAGE,\n );\n const [focus, setFocus] = useState(true);\n\n const { t } = useTranslation();\n\n const key = useMemo(() => {\n switch (mode) {\n case PnLMode.OFFSET:\n return `${type.toLowerCase()}_offset`;\n case PnLMode.PERCENTAGE:\n return `${type.toLowerCase()}_offset_percentage`;\n default:\n return `${type.toLowerCase()}_pnl`;\n }\n }, [mode]);\n\n const value = useMemo(() => {\n return values[mode as keyof PNL_Values];\n }, [values, mode]);\n\n const modes = useMemo<MenuItem[]>(() => {\n return [\n {\n label: t(\"tpsl.pnl\"),\n value: PnLMode.PnL,\n testId: `${PnLMode.PnL}_menu_item`,\n },\n {\n label: t(\"tpsl.offset\"),\n value: PnLMode.OFFSET,\n testId: `${PnLMode.OFFSET}_mneu_item`,\n },\n {\n label: `${t(\"tpsl.offset\")}%`,\n value: PnLMode.PERCENTAGE,\n testId: `${PnLMode.PERCENTAGE}_menu_item`,\n },\n ];\n }, [t]);\n\n const percentageSuffix = useRef<string>(\"\");\n\n const onValueChange = (value: string) => {\n props.onChange(key, value);\n };\n\n const formatter = (options: {\n dp?: number;\n mode: PnLMode;\n }): InputFormatter => {\n const { dp = 2 } = options;\n return {\n onRenderBefore: (\n value: string | number,\n options: InputFormatterOptions,\n ) => {\n value = `${value}`; // convert to string\n\n if (focus) {\n if (type === \"SL\" && mode === PnLMode.PnL) {\n value = value.startsWith(\"-\") ? value : \"-\" + value;\n }\n }\n\n if (value === \"\" || value === \"-\") return \"\";\n // if (mode === PnLMode.PnL || mode === PnLMode.OFFSET) {\n // return commify(value);\n // }\n\n if (mode === PnLMode.PERCENTAGE) {\n return `${new Decimal(\n value.replace(\n new RegExp(percentageSuffix.current.replace(\".\", \"\\\\.\") + \"$\"),\n \"\",\n ),\n )\n .mul(100)\n .todp(2, 4)\n .toString()}${percentageSuffix.current}`;\n } else if (mode === PnLMode.OFFSET) {\n value = todpIfNeed(value, dp);\n } else {\n // value = new Decimal(value).todp(2).toString();\n }\n\n return `${value}`;\n },\n onSendBefore: (value: string) => {\n if (/^\\-?0{2,}$/.test(value)) {\n return \"0\";\n }\n\n if (mode === PnLMode.PERCENTAGE) {\n // console.log(\"value\", value);\n if (value !== \"\") {\n // percentageSuffix.current = value.endsWith(\".\") ? \".\" : \"\";\n value = todpIfNeed(value, 2);\n const endStr = value.match(/\\.0{0,2}$/);\n if (!!endStr) {\n percentageSuffix.current = endStr[0];\n } else {\n percentageSuffix.current = \"\";\n }\n value = new Decimal(value).div(100).toString();\n value = `${value}${percentageSuffix.current}`;\n }\n } else if (mode === PnLMode.PnL && type === \"SL\" && focus) {\n value = value.startsWith(\"-\") ? value : \"-\" + value;\n } else {\n value = todpIfNeed(value, dp);\n }\n\n if (value === \"\" || value === \"-\") return \"\";\n\n return value;\n },\n };\n // return {\n // onRenderBefore: (\n // value: string | number,\n // options: InputFormatterOptions\n // ) => {\n // // console.log(\"???\", options);\n // const { isFocused } = options;\n // value = `${value}`;\n // if (value === \"\" || value === \"-\") return \"\";\n\n // // if (type === \"SL\" && mode === PnLMode.PnL) {\n // // if (isFocused) {\n // // value = value.startsWith(\"-\") ? value : \"-\" + value;\n // // }\n // // }\n\n // if (mode === PnLMode.PERCENTAGE) {\n // return `${todpIfNeed(new Decimal(value).mul(100).toString(), 2)}${\n // percentageSuffix.current\n // }`;\n // // return (Number(value) * 100).toFixed(2);\n // } else if (mode === PnLMode.OFFSET) {\n // value = todpIfNeed(value, 2);\n // } else {\n // // value = new Decimal(value).todp(2).toString();\n // }\n\n // return value;\n // },\n // onSendBefore: (value: string, options: InputFormatterOptions) => {\n // const { isFocused } = options;\n\n // if (mode === PnLMode.PERCENTAGE) {\n // if (value !== \"\") {\n // percentageSuffix.current = value.endsWith(\".\") ? \".\" : \"\";\n // value = new Decimal(value).div(100).toString();\n // value = todpIfNeed(value, 4);\n // }\n // } else {\n // // value = todpIfNeed(value, quote_dp);\n // if (isFocused) {\n // if (type === \"SL\" && mode === PnLMode.PnL) {\n // // if (\n // // typeof values[PnLMode.PnL] !== \"undefined\" &&\n // // values[PnLMode.PnL] !== \"\"\n // // )\n // // return value;\n // const num = Number(value);\n // if (!isNaN(num) && num !== 0) {\n // value = (Math.abs(num) * -1).toString();\n // } else {\n // value = \"\";\n // }\n // }\n // }\n // }\n\n // return value;\n // },\n // };\n };\n\n return {\n mode,\n modes,\n type: props.type,\n formatter,\n onModeChange: (mode: PnLMode) => {\n setMode(mode);\n },\n value,\n pnl: values[PnLMode.PnL],\n onValueChange,\n quote_dp: props.quote_dp,\n setFocus,\n };\n};\n\nexport type PNLInputState = ReturnType<typeof usePNLInputBuilder>;\n","import { PNLInput } from \"./pnlInput.ui\";\nimport { BuilderProps, usePNLInputBuilder } from \"./useBuilder.script\";\n\nexport const PnlInputWidget = (\n props: BuilderProps & {\n testId?: string;\n quote: string;\n }\n) => {\n const { testId, quote, ...rest } = props;\n const state = usePNLInputBuilder(rest);\n return <PNLInput {...state} testId={testId} quote={quote} />;\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { Select, Text } from \"@orderly.network/ui\";\n\ntype Props = {\n type: OrderType;\n onChange: (type: OrderType) => void;\n disabled?: boolean;\n};\n\nexport const OrderPriceType = (props: Props) => {\n const { t } = useTranslation();\n const options = [\n { label: t(\"orderEntry.orderType.limitOrder\"), value: OrderType.LIMIT },\n { label: t(\"orderEntry.orderType.marketOrder\"), value: OrderType.MARKET },\n ];\n return (\n <Select.options\n value={props.type}\n options={options}\n disabled={props.disabled}\n onValueChange={props.onChange}\n size={\"xs\"}\n classNames={{\n trigger:\n \"oui-bg-transparent oui-w-auto oui-outline-line-1 oui-input-root oui-bg-base-6 oui-h-10 lg:oui-h-8 oui-outline-line-12 \",\n }}\n valueFormatter={(value, option) => {\n const displayLabel = {\n [OrderType.LIMIT]: t(\"orderEntry.orderType.limit\"),\n [OrderType.MARKET]: t(\"common.marketPrice\"),\n }[value];\n return <Text size={\"2xs\"}>{displayLabel}</Text>;\n }}\n />\n );\n};\n","import { Props, useTPSLInputRowScript } from \"./tpslInputRow.script\";\nimport { TPSLInputRowUI } from \"./tpslInputRow.ui\";\n\nexport const TPSLInputRowWidget = (props: Props) => {\n const state = useTPSLInputRowScript(props);\n return <TPSLInputRowUI {...state} />;\n};\n","import { useState } from \"react\";\nimport { OrderlyOrder, PositionType } from \"@orderly.network/types\";\n\ntype OrderValueKeys = keyof OrderlyOrder;\nexport type PositionTypeProps = {\n disableSelector?: boolean;\n value: PositionType;\n onChange: (key: OrderValueKeys, value: any) => void;\n};\n\nexport const useTPSLPositionTypeScript = (props: PositionTypeProps) => {\n return {\n value: props.value,\n onChange: props.onChange,\n disableSelector: props.disableSelector,\n };\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { PositionType } from \"@orderly.network/types\";\nimport {\n ExclamationFillIcon,\n Flex,\n Select,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { useTPSLPositionTypeScript } from \"./tpslPositionType.script\";\n\ntype TPSLPositionTypeUIProps = ReturnType<typeof useTPSLPositionTypeScript>;\n\nconst positionTypeKey = \"position_type\";\nexport const TPSLPositionTypeUI = (props: TPSLPositionTypeUIProps) => {\n const { t } = useTranslation();\n const options = [\n {\n label: t(\"tpsl.positionType.partial\"),\n value: PositionType.PARTIAL,\n },\n {\n label: t(\"tpsl.positionType.full\"),\n value: PositionType.FULL,\n },\n ];\n\n return (\n <Flex gap={1} itemAlign={\"center\"} justify={\"start\"}>\n <Tooltip\n className=\"oui-w-[280px] oui-p-3\"\n content={\n props.value === PositionType.FULL\n ? t(\"tpsl.positionType.full.tips\")\n : t(\"tpsl.positionType.partial.tips\")\n }\n >\n <ExclamationFillIcon\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={12}\n />\n </Tooltip>\n {props.disableSelector ? (\n props.value === PositionType.FULL ? (\n <Text className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-54\">\n {t(\"tpsl.positionType.full\")}\n </Text>\n ) : (\n <Text className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-54\">\n {t(\"tpsl.positionType.partial\")}\n </Text>\n )\n ) : (\n <Select.options\n value={props.value}\n options={options}\n onValueChange={(event) => {\n props.onChange(positionTypeKey, event as PositionType);\n }}\n size={\"xs\"}\n classNames={{\n trigger: \" oui-bg-transparent oui-border-0 oui-w-auto oui-px-0\",\n }}\n contentProps={{\n className: \" oui-bg-base-8 oui-border-0\",\n }}\n />\n )}\n </Flex>\n );\n};\n","import {\n PositionTypeProps,\n useTPSLPositionTypeScript,\n} from \"./tpslPositionType.script\";\nimport { TPSLPositionTypeUI } from \"./tpslPositionType.ui\";\n\nexport const TPSLPositionTypeWidget = (props: PositionTypeProps) => {\n const state = useTPSLPositionTypeScript(props);\n return <TPSLPositionTypeUI {...state} />;\n};\n","import { useRef } from \"react\";\nimport { utils } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n convertValueToPercentage,\n Flex,\n Input,\n Slider,\n Text,\n} from \"@orderly.network/ui\";\nimport { inputFormatter } from \"@orderly.network/ui\";\nimport { cn } from \"@orderly.network/ui\";\n\nexport const TPSLQuantity = (props: {\n maxQty: number;\n baseTick: number;\n dp: number;\n quote: string;\n onQuantityChange?: (value: number | string) => void;\n quantity: number;\n isEditing?: boolean;\n setOrderValue?: (key: string, value: number | string) => void;\n errorMsg?: string;\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const currentQtyPercentage =\n convertValueToPercentage(props.quantity, 0, props.maxQty) / 100;\n const { t } = useTranslation();\n\n const formatQuantity = (qty: string) => {\n let _qty = qty;\n if (Number(qty) > props.maxQty) {\n _qty = props.maxQty.toString();\n }\n if (props.baseTick > 0) {\n props.onQuantityChange?.(utils.formatNumber(_qty, props.baseTick) ?? qty);\n }\n };\n\n const errorMsg =\n props.quantity.toString().length > 0 ? props.errorMsg : undefined;\n\n return (\n <>\n <Flex gap={2}>\n <div className={\"oui-flex-1\"}>\n <Input.tooltip\n data-testid=\"oui-testid-tpsl-popUp-quantity-input\"\n ref={inputRef}\n prefix={t(\"common.quantity\")}\n size={{\n initial: \"md\",\n lg: \"sm\",\n }}\n align=\"right\"\n value={props.quantity}\n autoComplete=\"off\"\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-bg-base-5 oui-outline-line-12\",\n errorMsg && \"oui-outline-danger\",\n ),\n }}\n tooltipProps={{\n content: {\n className: \"oui-bg-base-6 oui-text-base-contrast-80\",\n },\n arrow: {\n className: \"oui-fill-base-6\",\n },\n }}\n tooltip={errorMsg}\n color={errorMsg ? \"danger\" : undefined}\n formatters={[\n inputFormatter.dpFormatter(props.dp),\n inputFormatter.numberFormatter,\n inputFormatter.currencyFormatter,\n inputFormatter.decimalPointFormatter,\n ]}\n onValueChange={(value) => {\n props.onQuantityChange?.(value);\n const qty = Number(value);\n console.log(\"qty\", value, Number(value), qty);\n if (qty && qty > props.maxQty) {\n const qty = props.maxQty;\n props.onQuantityChange?.(qty);\n inputRef.current?.blur();\n }\n }}\n onBlur={(e) => formatQuantity(e.target.value)}\n suffix={\n <span className=\"oui-text-2xs oui-text-base-contrast-54 oui-px-3\">\n {props.quote}\n </span>\n }\n />\n </div>\n </Flex>\n <Flex mt={2} itemAlign={\"center\"} height={\"15px\"}>\n <Slider.single\n markCount={5}\n color=\"primary\"\n max={props.maxQty}\n min={0}\n showTip\n step={props.baseTick}\n value={props.quantity}\n onValueCommit={(value) => {\n formatQuantity(`${value}`);\n }}\n onValueChange={(value) => {\n props.onQuantityChange?.(value);\n }}\n />\n </Flex>\n <Flex justify={\"between\"}>\n <Text.numeral rule={\"percentages\"} color={\"primary\"} size={\"2xs\"}>\n {currentQtyPercentage}\n </Text.numeral>\n <Flex itemAlign={\"center\"} gap={1}>\n <button\n className={\"oui-leading-none\"}\n style={{ lineHeight: 0 }}\n onClick={() => {\n props.onQuantityChange?.(props.maxQty);\n }}\n >\n <Text color={\"primary\"} size={\"2xs\"}>\n {t(\"common.max\")}\n </Text>\n </button>\n\n <Text.numeral\n rule={\"price\"}\n size={\"2xs\"}\n intensity={54}\n tick={props.baseTick}\n >\n {props.maxQty}\n </Text.numeral>\n </Flex>\n </Flex>\n </>\n );\n};\n","import { useEffect, useMemo, useRef } from \"react\";\nimport {\n type ComputedAlgoOrder,\n useLocalStorage,\n usePositionStream,\n useSymbolsInfo,\n useTPSLOrder,\n utils,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n AlgoOrderRootType,\n AlgoOrderType,\n API,\n OrderType,\n PositionType,\n SDKError,\n} from \"@orderly.network/types\";\nimport { modal, toast } from \"@orderly.network/ui\";\nimport { PositionTPSLConfirm } from \"./tpsl.ui\";\n\ntype PropsWithTriggerPrice = {\n withTriggerPrice?: boolean;\n triggerPrice?: number;\n type?: \"tp\" | \"sl\";\n qty?: number;\n};\n\nexport type TPSLBuilderOptions = {\n symbol: string;\n position?: API.Position;\n order?: API.AlgoOrder;\n onTPSLTypeChange?: (type: AlgoOrderRootType) => void;\n isEditing?: boolean;\n positionType?: PositionType;\n /**\n * either show the confirm dialog or not,\n * if the Promise reject or return false, cancel the submit action\n */\n onConfirm?: (\n order: ComputedAlgoOrder,\n options: {\n position: API.Position;\n submit: (params?: { accountId?: string }) => Promise<any>;\n cancel: () => Promise<any>;\n },\n ) => Promise<boolean>;\n close?: () => void;\n};\n\nexport const useTPSLBuilder = (\n options: TPSLBuilderOptions & PropsWithTriggerPrice,\n) => {\n const {\n symbol,\n order,\n isEditing,\n positionType,\n triggerPrice,\n type,\n withTriggerPrice,\n } = options;\n const { t } = useTranslation();\n // const isEditing = !!order;\n if (isEditing && !order) {\n throw new SDKError(\"order is required when isEditing is true\");\n }\n // const symbol = isEditing ? order!.symbol : position.symbol;\n const symbolInfo = useSymbolsInfo();\n\n const prevTPSLType = useRef<AlgoOrderRootType>(AlgoOrderRootType.TP_SL);\n const [{ rows: positions }] = usePositionStream();\n\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n const position = positions.find((item) => item.symbol === symbol);\n if (!position) {\n throw new SDKError(\"position not found\");\n }\n\n const [\n tpslOrder,\n {\n submit,\n deleteOrder,\n setValue,\n setValues,\n validate,\n errors,\n isCreateMutating,\n isUpdateMutating,\n },\n ] = useTPSLOrder(\n {\n symbol,\n position_qty: position?.position_qty ?? 0,\n average_open_price: position?.average_open_price ?? 0,\n },\n {\n defaultOrder: order,\n positionType: triggerPrice ? PositionType.PARTIAL : positionType,\n tpslEnable: {\n tp_enable: !withTriggerPrice ? true : type === \"tp\",\n sl_enable: !withTriggerPrice ? true : type === \"sl\",\n },\n isEditing,\n },\n );\n\n const setQuantity = (value: number | string) => {\n setValue(\"quantity\", value);\n };\n\n const setOrderPrice = (\n name: \"tp_trigger_price\" | \"sl_trigger_price\",\n value: number | string,\n ) => {\n setValue(name, value);\n };\n\n const setPnL = (type: string, value: number | string) => {\n setValue(type, value);\n };\n\n const maxQty = useMemo(\n () => Math.abs(Number(position.position_qty)),\n [position.position_qty],\n );\n\n const dirty = useMemo(() => {\n const quantity =\n order?.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? maxQty\n : order?.quantity;\n\n let diff: number = 0;\n\n if (Number(tpslOrder.quantity) !== quantity) {\n diff = 1;\n } else if (!isEditing && !!tpslOrder.quantity) {\n diff = 1;\n }\n\n if (order && isEditing) {\n const { tp_trigger_price, sl_trigger_price } =\n utils.findTPSLFromOrder(order);\n const { tp_order_price, sl_order_price } =\n utils.findTPSLOrderPriceFromOrder(order);\n\n if (\n tp_trigger_price !== Number(tpslOrder.tp_trigger_price) &&\n typeof typeof tpslOrder.tp_trigger_price !== \"undefined\"\n ) {\n diff = 2;\n }\n\n if (\n sl_trigger_price !== Number(tpslOrder.sl_trigger_price) &&\n typeof tpslOrder.sl_trigger_price !== \"undefined\"\n ) {\n diff = 3;\n }\n if (\n typeof tpslOrder.tp_order_price !== \"undefined\" &&\n tp_order_price !== OrderType.MARKET &&\n tp_order_price !== Number(tpslOrder.tp_order_price)\n ) {\n diff = 4;\n }\n if (\n typeof tpslOrder.sl_order_price !== \"undefined\" &&\n sl_order_price !== OrderType.MARKET &&\n sl_order_price !== Number(tpslOrder.sl_order_price)\n ) {\n diff = 5;\n }\n }\n\n if (\n diff === 1 &&\n !tpslOrder.tp_trigger_price &&\n !tpslOrder.sl_trigger_price\n ) {\n diff = -1;\n }\n\n return diff;\n }, [\n tpslOrder.tp_trigger_price,\n tpslOrder.tp_order_price,\n tpslOrder.sl_trigger_price,\n tpslOrder.sl_order_price,\n tpslOrder.quantity,\n order,\n isEditing,\n ]);\n\n const valid = useMemo(() => {\n /**\n * if the order is a POSITIONAL_TP_SL and the quantity is less than the maxQty,\n * and the tp/sl trigger price is not set, then the order is not valid\n */\n if (\n order?.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL &&\n Number(tpslOrder.quantity) < maxQty &&\n !tpslOrder.tp_trigger_price &&\n !tpslOrder.sl_trigger_price\n ) {\n return false;\n }\n\n return dirty > 0 && !!tpslOrder.quantity && !errors;\n }, [tpslOrder.quantity, maxQty, dirty, errors]);\n\n // const isPositionTPSL = useMemo(() => {\n // if (!isEditing) return Number(tpslOrder.quantity) >= maxQty;\n // /**\n // * if current order is not a POSITIONAL_TP_SL, then it's always a general TP/SL\n // */\n // if (!!order && order.algo_type !== AlgoOrderRootType.POSITIONAL_TP_SL) {\n // return false;\n // }\n // if (tpslOrder.algo_order_id && tpslOrder.quantity == 0) return true;\n // return Number(tpslOrder.quantity) >= maxQty;\n // }, [tpslOrder.quantity, maxQty, order?.algo_type, isEditing]);\n\n // useEffect(() => {\n // if (!isEditing && isPositionTPSL) {\n // const trigger_prices = utils.findTPSLFromOrder(order!);\n // if (!tpslOrder.tp_trigger_price && trigger_prices.tp_trigger_price) {\n // setOrderPrice(\"tp_trigger_price\", trigger_prices.tp_trigger_price);\n // }\n // if (!tpslOrder.sl_trigger_price && trigger_prices.sl_trigger_price) {\n // setOrderPrice(\"sl_trigger_price\", trigger_prices.sl_trigger_price);\n // }\n // }\n // }, [isEditing, isPositionTPSL, tpslOrder]);\n\n // useEffect(() => {\n // const type =\n // Number(tpslOrder.quantity) < maxQty\n // ? AlgoOrderRootType.TP_SL\n // : AlgoOrderRootType.POSITIONAL_TP_SL;\n // if (\n // typeof options.onTPSLTypeChange === \"function\" &&\n // prevTPSLType.current !== type\n // ) {\n // options.onTPSLTypeChange(type);\n // }\n\n // prevTPSLType.current = type;\n // }, [tpslOrder.quantity, maxQty]);\n\n useEffect(() => {\n if (!withTriggerPrice) {\n return;\n }\n if (!triggerPrice) {\n return;\n }\n if (type === \"tp\") {\n setValue(\"tp_trigger_price\", triggerPrice);\n } else {\n setValue(\"sl_trigger_price\", triggerPrice);\n }\n if (options.qty) {\n setValue(\"quantity\", options.qty);\n }\n }, [type, triggerPrice, options.qty]);\n\n const cancel = (): Promise<void> => {\n if (order?.algo_order_id && order?.symbol) {\n return deleteOrder(order?.algo_order_id, order?.symbol);\n }\n return Promise.reject(\"order id or symbol is invalid\");\n };\n\n const onConfirm = (\n order: ComputedAlgoOrder,\n options: {\n position: API.Position;\n submit: (params?: { accountId?: string }) => Promise<any>;\n cancel: () => Promise<any>;\n },\n ) => {\n if (!needConfirm) {\n return Promise.resolve(true);\n }\n\n const maxQty = Math.abs(Number(position.position_qty));\n if (\n `${order.tp_trigger_price ?? \"\"}`.length === 0 &&\n `${order.sl_trigger_price ?? \"\"}`.length === 0\n ) {\n return modal\n .confirm({\n title: t(\"orders.cancelOrder\"),\n content: t(\"tpsl.cancelOrder.description\"),\n onOk: () => {\n return options.cancel();\n },\n })\n .then(\n () => {\n return true;\n },\n () => {\n return Promise.reject(false);\n },\n );\n }\n\n return modal\n .confirm({\n title: t(\"tpsl.confirmOrder\"),\n // bodyClassName: \"lg:oui-py-0\",\n onOk: async () => {\n try {\n const res = await options.submit({\n accountId: position.account_id,\n });\n\n if (res.success) {\n return res;\n }\n\n if (res.message) {\n toast.error(res.message);\n }\n\n return false;\n } catch (err: any) {\n if (err?.message) {\n toast.error(err.message);\n }\n return false;\n }\n },\n classNames: {\n body: \"!oui-pb-0\",\n },\n content: (\n <PositionTPSLConfirm\n isPositionTPSL={positionType === PositionType.FULL}\n isEditing={false}\n symbol={order.symbol!}\n qty={Number(order.quantity)}\n maxQty={maxQty}\n tpPrice={Number(order.tp_trigger_price)}\n slPrice={Number(order.sl_trigger_price)}\n side={order.side!}\n orderInfo={order}\n quoteDP={symbolInfo[symbol](\"quote_dp\") ?? 2}\n baseDP={symbolInfo[symbol](\"base_dp\") ?? 2}\n />\n ),\n })\n .then(\n () => {\n return true;\n },\n () => {\n return Promise.reject(false);\n },\n );\n };\n\n const onSubmit = async () => {\n try {\n const validOrder = await validate();\n console.log(\"validOrder\", validOrder);\n if (validOrder) {\n if (!needConfirm) {\n return submit({ accountId: position.account_id })\n .then(() => true)\n .catch((err) => {\n if (err?.message) {\n toast.error(err.message);\n }\n throw false;\n });\n }\n\n return onConfirm(tpslOrder, {\n position,\n submit,\n cancel,\n });\n }\n } catch (error) {\n return Promise.reject(error);\n }\n };\n\n return {\n isEditing,\n symbolInfo: symbolInfo[symbol],\n maxQty,\n setQuantity,\n orderQuantity: tpslOrder.quantity,\n // isPosition: isPositionTPSL,\n\n TPSL_OrderEntity: tpslOrder,\n setOrderValue: setValue,\n setPnL,\n setOrderPrice,\n // needConfirm,\n onSubmit,\n valid,\n errors,\n status: {\n isCreateMutating,\n isUpdateMutating,\n },\n position,\n setValues,\n } as const;\n};\n\nexport type TPSLBuilderState = ReturnType<typeof useTPSLBuilder>;\n","import { ReactNode } from \"react\";\nimport { ComputedAlgoOrder, useLocalStorage } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AlgoOrderRootType, API, PositionType } from \"@orderly.network/types\";\nimport { Box, Button, modal, toast } from \"@orderly.network/ui\";\nimport { ButtonProps } from \"@orderly.network/ui\";\nimport { PositionTPSLConfirm } from \"./tpsl.ui\";\nimport { TPSLDialogId } from \"./tpsl.widget\";\n\nexport const PositionTPSLPopover = (props: {\n position: API.Position;\n order?: API.AlgoOrder;\n label?: string;\n baseDP?: number;\n quoteDP?: number;\n /**\n * Button props\n */\n buttonProps?: ButtonProps;\n isEditing?: boolean;\n children?: ReactNode;\n}) => {\n const { position, order, baseDP, quoteDP, buttonProps, isEditing } = props;\n\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n\n const { t } = useTranslation();\n\n const isPositionTPSL = isEditing\n ? order?.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n : undefined;\n\n const onEdit = () => {\n modal.show(TPSLDialogId, {\n order: order,\n symbol: position.symbol,\n baseDP: baseDP,\n quoteDP: quoteDP,\n positionType: isPositionTPSL ? PositionType.FULL : PositionType.PARTIAL,\n isEditing: isEditing,\n });\n };\n\n return (\n <Box onClick={onEdit} className=\"oui-cursor-pointer\">\n {props.children || (\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"secondary\"\n {...buttonProps}\n // onClick={() => {\n // setOpen(true);\n // }}\n >\n {props.label}\n </Button>\n )}\n </Box>\n );\n};\n","import { useMemo } from \"react\";\nimport { useLocalStorage, useMarkPrice } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AlgoOrderRootType, API, PositionType } from \"@orderly.network/types\";\nimport {\n Flex,\n modal,\n useModal,\n Text,\n Box,\n Badge,\n Divider,\n toast,\n} from \"@orderly.network/ui\";\nimport { PositionTPSLConfirm } from \"./tpsl.ui\";\nimport { TPSLWidget, TPSLWidgetProps } from \"./tpsl.widget\";\n\ntype TPSLSheetProps = {\n position: API.Position;\n order?: API.AlgoOrder;\n // label: string;\n // baseDP?: number;\n // quoteDP?: number;\n symbolInfo: API.SymbolExt;\n isEditing?: boolean;\n};\n\nexport const PositionTPSLSheet = (props: TPSLWidgetProps & TPSLSheetProps) => {\n const { position, order, symbolInfo, isEditing } = props;\n const { resolve, hide, updateArgs } = useModal();\n\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n const { t } = useTranslation();\n\n const isPositionTPSL = isEditing\n ? order?.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n : undefined;\n\n const updateSheetTitle = (title: string) => {\n if (isEditing) return;\n updateArgs({ title });\n };\n\n const onCompleted = () => {\n resolve();\n hide();\n };\n\n const { quote_dp, base_dp } = symbolInfo;\n\n return (\n <>\n <TPSLWidget\n {...props}\n positionType={\n props.positionType ??\n (isPositionTPSL ? PositionType.FULL : PositionType.PARTIAL)\n }\n onComplete={onCompleted}\n onConfirm={(order, options) => {\n if (!needConfirm) {\n return Promise.resolve(true);\n }\n\n const maxQty = Math.abs(Number(position.position_qty));\n\n const finalIsEditing =\n isEditing ||\n (!!order &&\n order.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL &&\n order.quantity === maxQty);\n\n return modal\n .confirm({\n title: finalIsEditing\n ? t(\"orders.editOrder\")\n : t(\"tpsl.confirmOrder\"),\n bodyClassName: \"oui-pb-0 lg:oui-pb-0\",\n onOk: async () => {\n try {\n const res = await options.submit({\n accountId: position.account_id,\n });\n\n if (res.success) {\n return res;\n }\n\n if (res.message) {\n toast.error(res.message);\n }\n\n return false;\n } catch (err: any) {\n if (err?.message) {\n toast.error(err.message);\n }\n return false;\n }\n },\n content: (\n <PositionTPSLConfirm\n isPositionTPSL={isPositionTPSL}\n isEditing={isEditing}\n symbol={order.symbol!}\n qty={Number(order.quantity)}\n maxQty={maxQty}\n tpPrice={Number(order.tp_trigger_price)}\n slPrice={Number(order.sl_trigger_price)}\n side={order.side!}\n quoteDP={quote_dp ?? 2}\n baseDP={base_dp ?? 2}\n orderInfo={order}\n />\n ),\n })\n .then(\n () => {\n // setOpen(false);\n // setVisible(true);\n return true;\n },\n (reject) => {\n if (reject?.message) {\n toast.error(reject.message);\n }\n\n // setVisible(true);\n return Promise.reject(false);\n },\n );\n }}\n onCancel={() => {\n hide();\n }}\n />\n </>\n );\n};\n","import { i18n } from \"@orderly.network/i18n\";\nimport { OrderlyOrder } from \"@orderly.network/types\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { TPSLAdvancedUI } from \"./tpslAdvanced.ui\";\nimport { useTPSLAdvanced } from \"./useTPSLAdvanced.script\";\n\ntype Props = {\n order: OrderlyOrder;\n setOrderValue: (key: string, value: any) => void;\n onSubmit: (formattedOrder: OrderlyOrder) => void;\n onClose: () => void;\n};\n\nexport const TPSLAdvancedWidget = (props: Props) => {\n const state = useTPSLAdvanced({\n order: props.order,\n setOrderValue: props.setOrderValue,\n onSubmit: props.onSubmit,\n onClose: props.onClose,\n });\n return <TPSLAdvancedUI {...state} />;\n};\n\nexport const TPSLAdvancedSheetId = \"TPSLAdvancedSheetId\";\nexport const TPSLAdvancedDialogId = \"TPSLAdvancedDialogId\";\n\nregisterSimpleSheet(TPSLAdvancedSheetId, TPSLAdvancedWidget, {\n title: () => i18n.t(\"common.settings\"),\n});\n\nregisterSimpleDialog(TPSLAdvancedDialogId, TPSLAdvancedWidget, {\n title: () => i18n.t(\"common.settings\"),\n});\n","import { useEffect, useState, SVGProps } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n OrderlyOrder,\n OrderSide,\n OrderType,\n PositionType,\n} from \"@orderly.network/types\";\nimport {\n Button,\n cn,\n Divider,\n Flex,\n ScrollArea,\n Text,\n} from \"@orderly.network/ui\";\nimport { OrderInfo } from \"./components/orderInfo\";\nimport { PnlInfo } from \"./components/pnlInfo\";\nimport { TPSLInputRowWidget } from \"./components/tpslInputRow\";\nimport { TPSLPositionTypeWidget } from \"./components/tpslPostionType\";\nimport { useTPSLAdvanced } from \"./useTPSLAdvanced.script\";\n\ntype Props = ReturnType<typeof useTPSLAdvanced>;\n\nexport const TPSLAdvancedUI = (props: Props) => {\n const { t } = useTranslation();\n const { errors, validated } = props.metaState;\n\n const {\n formattedOrder,\n setValue: setOrderValue,\n symbolInfo,\n setValues,\n } = props;\n const [tpValues, setTpValuse] = useState<{\n enable: boolean;\n trigger_price: string;\n PnL: string;\n Offset: string;\n \"Offset%\": string;\n ROI: string;\n order_price: string;\n order_type: OrderType;\n }>({\n enable: true,\n order_type: formattedOrder.tp_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.tp_order_price ?? \"\",\n trigger_price: formattedOrder.tp_trigger_price ?? \"\",\n PnL: formattedOrder.tp_pnl ?? \"\",\n Offset: formattedOrder.tp_offset ?? \"\",\n \"Offset%\": formattedOrder.tp_offset_percentage ?? \"\",\n ROI: formattedOrder.tp_ROI ?? \"\",\n });\n\n const [slValues, setSlValues] = useState<{\n enable: boolean;\n trigger_price: string;\n PnL: string;\n Offset: string;\n \"Offset%\": string;\n ROI: string;\n order_price: string;\n order_type: OrderType;\n }>({\n enable: true,\n order_type: formattedOrder.sl_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.sl_order_price ?? \"\",\n trigger_price: formattedOrder.sl_trigger_price ?? \"\",\n PnL: formattedOrder.sl_pnl ?? \"\",\n Offset: formattedOrder.sl_offset ?? \"\",\n \"Offset%\": formattedOrder.sl_offset_percentage ?? \"\",\n ROI: formattedOrder.sl_ROI ?? \"\",\n });\n\n // Update tpValues when formattedOrder changes\n useEffect(() => {\n setTpValuse((prev) => ({\n ...prev,\n enable: formattedOrder.tp_enable ?? true,\n order_type: formattedOrder.tp_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.tp_order_price ?? \"\",\n trigger_price: formattedOrder.tp_trigger_price ?? \"\",\n PnL: formattedOrder.tp_pnl ?? \"\",\n Offset: formattedOrder.tp_offset ?? \"\",\n \"Offset%\": formattedOrder.tp_offset_percentage ?? \"\",\n ROI: formattedOrder.tp_ROI ?? \"\",\n }));\n }, [formattedOrder]);\n\n useEffect(() => {\n setSlValues((prev) => ({\n ...prev,\n enable: formattedOrder.sl_enable ?? true,\n order_type: formattedOrder.sl_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.sl_order_price ?? \"\",\n trigger_price: formattedOrder.sl_trigger_price ?? \"\",\n PnL: formattedOrder.sl_pnl ?? \"\",\n Offset: formattedOrder.sl_offset ?? \"\",\n \"Offset%\": formattedOrder.sl_offset_percentage ?? \"\",\n ROI: formattedOrder.sl_ROI ?? \"\",\n }));\n }, [formattedOrder]);\n\n return (\n <div className=\"oui-rounded-[16px] oui-py-3 oui-flex oui-flex-col oui-justify-between oui-h-full\">\n <div className=\"oui-px-3\">\n <Flex\n className=\"oui-mb-5 oui-cursor-pointer oui-text-base oui-text-base-contrast-80\"\n gap={1}\n itemAlign={\"center\"}\n onClick={props.onClose}\n >\n <ArrowRightIcon className=\" oui-text-base-contrast-80\" />\n <Text>{t(\"tpsl.advanced.title\")}</Text>\n </Flex>\n </div>\n <ScrollArea className=\"oui-flex-1\">\n <div className=\"oui-px-3\">\n <OrderInfo\n order={formattedOrder as OrderlyOrder}\n baseDP={symbolInfo.base_dp}\n quoteDP={symbolInfo.quote_dp}\n />\n </div>\n <Divider className=\"oui-my-3\" />\n <div className=\"oui-px-3\">\n <Flex className=\"oui-gap-[6px]\">\n <Button\n onClick={() => {\n setOrderValue(\"side\", OrderSide.BUY);\n }}\n size={\"sm\"}\n fullWidth\n data-type={OrderSide.BUY}\n // color={side === OrderSide.BUY ? \"buy\" : \"secondary\"}\n className={cn(\n formattedOrder.side === OrderSide.BUY\n ? \"oui-bg-success-darken hover:oui-bg-success-darken/80 active:oui-bg-success-darken/80\"\n : \"oui-bg-base-7 oui-text-base-contrast-36 hover:oui-bg-base-6 active:oui-bg-base-6\",\n )}\n data-testid=\"oui-testid-orderEntry-side-buy-button\"\n >\n {t(\"common.buy\")}\n </Button>\n <Button\n onClick={() => {\n setOrderValue(\"side\", OrderSide.SELL);\n }}\n data-type={OrderSide.SELL}\n fullWidth\n size={\"sm\"}\n // color={side === OrderSide.SELL ? \"sell\" : \"secondary\"}\n className={cn(\n formattedOrder.side === OrderSide.SELL\n ? \"oui-bg-danger-darken hover:oui-bg-danger-darken/80 active:oui-bg-danger-darken/80\"\n : \"oui-bg-base-7 oui-text-base-contrast-36 hover:oui-bg-base-6 active:oui-bg-base-6\",\n )}\n data-testid=\"oui-testid-orderEntry-side-sell-button\"\n >\n {t(\"common.sell\")}\n </Button>\n </Flex>\n <div className=\"oui-py-3\">\n <TPSLPositionTypeWidget\n value={formattedOrder.position_type ?? PositionType.PARTIAL}\n onChange={(key, value) => {\n // setOrderValue(\"position_type\", value);\n if (value === PositionType.FULL) {\n setValues({\n position_type: PositionType.FULL,\n tp_order_type: OrderType.MARKET,\n tp_order_price: undefined,\n sl_order_type: OrderType.MARKET,\n sl_order_price: undefined,\n });\n // setOrderValue(\"tp_order_type\", OrderType.MARKET);\n // setOrderValue(\"sl_order_type\", OrderType.MARKET);\n return;\n }\n setOrderValue(\"position_type\", value);\n }}\n />\n {formattedOrder.position_type === PositionType.FULL && (\n <Flex\n justify={\"start\"}\n itemAlign={\"start\"}\n gap={2}\n className=\"oui-mt-3 oui-w-full\"\n >\n <div className=\"oui-relative oui-top-[7px] oui-size-1 oui-rounded-full oui-bg-[#D25f00]\" />\n <Text className=\"oui-text-2xs oui-text-[#D25f00]\">\n {t(\"tpsl.positionType.full.tips.market\")}\n </Text>\n </Flex>\n )}\n </div>\n <Flex direction={\"column\"} gap={6}>\n <TPSLInputRowWidget\n rootOrderPrice={formattedOrder.order_price}\n symbol={symbolInfo.symbol}\n type=\"tp\"\n values={tpValues}\n errors={validated ? errors : null}\n quote_dp={symbolInfo.quote_dp}\n hideOrderPrice={\n formattedOrder.position_type === PositionType.FULL\n }\n onChange={(key, value) => {\n console.log(\"key\", key, \"value\", value);\n // setTpValuse((prev) => ({ ...prev, [key]: value }));\n setOrderValue(key as keyof OrderlyOrder, value);\n }}\n positionType={\n formattedOrder.position_type ?? PositionType.PARTIAL\n }\n />\n <TPSLInputRowWidget\n rootOrderPrice={formattedOrder.order_price}\n symbol={symbolInfo.symbol}\n type=\"sl\"\n values={slValues}\n hideOrderPrice={\n formattedOrder.position_type === PositionType.FULL\n }\n errors={validated ? errors : null}\n quote_dp={symbolInfo.quote_dp}\n positionType={\n formattedOrder.position_type ?? PositionType.PARTIAL\n }\n onChange={(key, value) => {\n setOrderValue(key as keyof OrderlyOrder, value);\n }}\n />\n </Flex>\n\n <PnlInfo\n tp_pnl={formattedOrder.tp_pnl}\n sl_pnl={formattedOrder.sl_pnl}\n className=\"oui-mt-6\"\n />\n </div>\n </ScrollArea>\n <Flex className=\"oui-mt-6 oui-px-3\" gap={2}>\n <Button\n size=\"md\"\n fullWidth\n color=\"gray\"\n variant=\"outlined\"\n className=\"oui-text-base-contrast-36\"\n onClick={props.onClose}\n >\n {t(\"common.cancel\")}\n </Button>\n <Button\n size=\"md\"\n fullWidth\n color=\"success\"\n className={cn(\n formattedOrder.side === OrderSide.SELL\n ? \"oui-bg-danger-darken hover:oui-bg-danger-darken/80 active:oui-bg-danger-darken/80\"\n : \"oui-bg-success-darken hover:oui-bg-success-darken/80 active:oui-bg-success-darken/80\",\n )}\n onClick={props.onSubmit}\n >\n {t(\"tpsl.advanced.submit\")}\n </Button>\n </Flex>\n </div>\n );\n};\n\nexport const ArrowRightIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M8.03752 2.9294C7.89169 2.95857 7.74527 3.03207 7.65661 3.16624L5.33145 6.66624C5.20137 6.86224 5.20137 7.12648 5.33145 7.32248L7.65661 10.8225C7.83452 11.0902 8.20669 11.1655 8.47385 10.9864C8.74044 10.8079 8.8151 10.434 8.63719 10.1662L6.53019 6.99408L8.63719 3.82249C8.8151 3.55416 8.74044 3.18082 8.47385 3.00232C8.34027 2.91249 8.18335 2.89965 8.03752 2.9294Z\" />\n </svg>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { OrderValidationResult, useOrderEntry } from \"@orderly.network/hooks\";\nimport { OrderlyOrder, OrderType, PositionType } from \"@orderly.network/types\";\n\ntype Props = {\n order: OrderlyOrder;\n setOrderValue: (key: string, value: any) => void;\n onSubmit: (formattedOrder: OrderlyOrder) => void;\n onClose: () => void;\n};\n\nconst isTPSLEnable = (order: OrderlyOrder, type: \"tp\" | \"sl\") => {\n if (order.tp_trigger_price || order.sl_trigger_price) {\n if (type === \"tp\") {\n return !!order.tp_trigger_price;\n }\n if (type === \"sl\") {\n return !!order.sl_trigger_price;\n }\n }\n // no edit, enable tp /sl\n return true;\n};\n\nexport const useTPSLAdvanced = (props: Props) => {\n const { order, setOrderValue, onClose } = props;\n const [innerMetaState, setInnerMetaState] =\n useState<OrderValidationResult | null>(null);\n const {\n formattedOrder,\n setValue,\n setValues,\n helper,\n symbolInfo,\n metaState,\n ...state\n } = useOrderEntry(order.symbol, {\n initialOrder: {\n symbol: order.symbol,\n order_type: order.order_type,\n side: order.side,\n order_price: order.order_price,\n order_quantity: order.order_quantity,\n position_type: order.position_type ?? PositionType.PARTIAL,\n trigger_price: order.trigger_price,\n tp_enable: isTPSLEnable(order, \"tp\"),\n sl_enable: isTPSLEnable(order, \"sl\"),\n tp_trigger_price: order.tp_trigger_price,\n sl_trigger_price: order.sl_trigger_price,\n tp_order_price: order.tp_order_price,\n sl_order_price: order.sl_order_price,\n tp_order_type: order.tp_order_type,\n sl_order_type: order.sl_order_type,\n sl_pnl: order.sl_pnl,\n sl_offset: order.sl_offset,\n sl_offset_percentage: order.sl_offset_percentage,\n tp_pnl: order.tp_pnl,\n tp_offset: order.tp_offset,\n tp_offset_percentage: order.tp_offset_percentage,\n },\n });\n\n const onSubmit = () => {\n helper\n .validate()\n .then(() => {\n props.onSubmit(formattedOrder as OrderlyOrder);\n })\n .catch((err) => {\n console.log(\"metaState\", metaState);\n console.log(\"err\", err);\n });\n };\n\n return {\n order,\n formattedOrder,\n symbolInfo,\n setValue,\n setValues,\n onSubmit,\n onClose,\n metaState,\n };\n};\n","import { AlgoOrder, API } from \"@orderly.network/types\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { useTPSLDetail } from \"./tpslDetail.script\";\nimport { TPSLDetailProvider } from \"./tpslDetailProvider\";\nimport { TPSLDetailUI } from \"./tsplDetail.ui\";\n\nexport type TPSLDetailProps = {\n position: API.Position;\n order: AlgoOrder;\n baseDP: number;\n quoteDP: number;\n};\n\nexport const TPSLDetailWidget = (props: TPSLDetailProps) => {\n const state = useTPSLDetail(props);\n return (\n <TPSLDetailProvider\n symbol={props.position.symbol}\n position={props.position}\n >\n <TPSLDetailUI {...state} />\n </TPSLDetailProvider>\n );\n};\nexport const TPSLDetailDialogId = \"TPSLDetailDialogId \";\nexport const TPSLDetailSheetId = \"TPSLDetailSheetId\";\nregisterSimpleDialog(TPSLDetailDialogId, TPSLDetailWidget, {\n classNames: {\n content: \"oui-w-[420px] lg:oui-pt-4 lg:oui-pb-2 !oui-px-0\",\n body: \"lg:oui-py-0\",\n },\n});\n\nregisterSimpleSheet(TPSLDetailSheetId, TPSLDetailWidget, {\n classNames: {\n content: \"!oui-p-0\",\n },\n});\n","import { useEffect, useState } from \"react\";\nimport {\n ComputedAlgoOrder,\n findPositionTPSLFromOrders,\n findTPSLFromOrder,\n useLocalStorage,\n useOrderStream,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n AlgoOrder,\n AlgoOrderRootType,\n API,\n OrderStatus,\n PositionType,\n} from \"@orderly.network/types\";\nimport { modal, toast, useScreen } from \"@orderly.network/ui\";\nimport { PositionTPSLConfirm } from \"../tpsl.ui\";\nimport { TPSLDialogId, TPSLSheetId } from \"../tpsl.widget\";\nimport { TPSLDetailProps } from \"./tpslDetail.widget\";\n\nexport const useTPSLDetail = (props: TPSLDetailProps) => {\n const { position } = props;\n const symbol = position.symbol;\n const symbolInfo = useSymbolsInfo()[symbol];\n\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n\n const { isMobile } = useScreen();\n const { t } = useTranslation();\n const [fullPositionOrders, setFullPositionOrders] = useState<API.AlgoOrder[]>(\n [],\n );\n const [partialPositionOrders, setPartialPositionOrders] = useState<\n API.AlgoOrder[]\n >([]);\n\n const [tpslOrders, { cancelAlgoOrder, cancelPostionOrdersByTypes, refresh }] =\n useOrderStream(\n {\n symbol: position.symbol,\n status: OrderStatus.INCOMPLETE,\n includes: [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL],\n size: 500,\n },\n {\n keeplive: true,\n },\n );\n\n const onCancelOrder = async (order: API.AlgoOrder) => {\n return await cancelAlgoOrder(order.algo_order_id, order.symbol);\n };\n const onCancelAllTPSLOrders = async () => {\n return await cancelPostionOrdersByTypes(symbol, [AlgoOrderRootType.TP_SL]);\n };\n\n const showTPSLDialog = ({\n order,\n positionType,\n isEditing,\n }: {\n order?: API.AlgoOrder;\n positionType: PositionType;\n isEditing: boolean;\n }) => {\n const dialogId = isMobile ? TPSLSheetId : TPSLDialogId;\n modal.show(dialogId, {\n order: order,\n symbol: position.symbol,\n positionType,\n isEditing,\n });\n };\n\n const editTPSLOrder = (order: API.AlgoOrder, positionType: PositionType) => {\n showTPSLDialog({ order, positionType, isEditing: true });\n };\n\n const addTPSLOrder = (positionType: PositionType) => {\n showTPSLDialog({ positionType, isEditing: false });\n };\n\n useEffect(() => {\n if (tpslOrders) {\n const { fullPositionOrder, partialPositionOrders } =\n findPositionTPSLFromOrders(tpslOrders, symbol);\n\n setFullPositionOrders(fullPositionOrder ? [fullPositionOrder] : []);\n setPartialPositionOrders(partialPositionOrders ?? []);\n }\n }, [tpslOrders, symbol]);\n\n return {\n symbolInfo,\n position,\n symbol,\n fullPositionOrders,\n partialPositionOrders,\n cancelPostionOrdersByTypes,\n onCancelOrder,\n onCancelAllTPSLOrders,\n editTPSLOrder,\n addTPSLOrder,\n };\n};\n\nexport type TPSLDetailState = ReturnType<typeof useTPSLDetail>;\n","import { createContext, PropsWithChildren, useContext } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\n\nexport interface TPSLDetailContextState {\n base_dp: number;\n quote_dp: number;\n position: API.Position;\n}\n\nexport const TPSLDetailContext = createContext({} as TPSLDetailContextState);\n\ninterface TPSLDetailProviderProps {\n symbol: string;\n position: API.Position;\n}\n\nexport const TPSLDetailProvider = (\n props: PropsWithChildren<TPSLDetailProviderProps>,\n) => {\n const symbolInfo = useSymbolsInfo()[props.symbol];\n return (\n <TPSLDetailContext.Provider\n value={{\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n position: props.position,\n }}\n >\n {props.children}\n </TPSLDetailContext.Provider>\n );\n};\n\nexport const useTPSLDetailContext = () => {\n return useContext(TPSLDetailContext);\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, PositionType } from \"@orderly.network/types\";\nimport {\n Box,\n ChevronDownIcon,\n cn,\n ExclamationFillIcon,\n Flex,\n Text,\n toast,\n Tooltip,\n ThrottledButton,\n useScreen,\n ScrollArea,\n} from \"@orderly.network/ui\";\nimport { OrderInfo } from \"../components/orderInfo\";\nimport { OrdersTable } from \"./ordersTable\";\nimport { OrdersTableMobile } from \"./ordersTable.mobile\";\nimport { TPSLDetailState } from \"./tpslDetail.script\";\n\nexport const TPSLDetailUI = (props: TPSLDetailState) => {\n const { isMobile } = useScreen();\n const {\n position,\n fullPositionOrders,\n partialPositionOrders,\n onCancelOrder,\n onCancelAllTPSLOrders,\n editTPSLOrder,\n addTPSLOrder,\n symbolInfo,\n } = props;\n\n return (\n <Box>\n <ScrollArea className={cn(isMobile && \"oui-h-[calc(100vh-100px)]\")}>\n <OrderInfo\n order={{\n symbol: position.symbol,\n order_quantity: position.position_qty.toString(),\n order_price: position.average_open_price.toString(),\n }}\n baseDP={symbolInfo(\"base_dp\")}\n quoteDP={symbolInfo(\"quote_dp\")}\n classNames={{\n root: cn(\"oui-mb-6 oui-gap-3 oui-px-5\"),\n container: \"oui-gap-x-[30px]\",\n }}\n />\n <FullPositionPart\n position={position}\n orders={fullPositionOrders}\n onCancelOrder={onCancelOrder}\n onCancelAllTPSLOrders={onCancelAllTPSLOrders}\n editTPSLOrder={editTPSLOrder}\n addTPSLOrder={addTPSLOrder}\n />\n <PartialPositionPart\n position={position}\n orders={partialPositionOrders}\n onCancelOrder={onCancelOrder}\n onCancelAllTPSLOrders={onCancelAllTPSLOrders}\n editTPSLOrder={editTPSLOrder}\n addTPSLOrder={addTPSLOrder}\n />\n </ScrollArea>\n </Box>\n );\n};\n\nconst FullPositionPart = (props: {\n orders: API.AlgoOrder[];\n onCancelOrder: (order: API.AlgoOrder) => Promise<void>;\n onCancelAllTPSLOrders: () => Promise<void>;\n position: API.Position;\n editTPSLOrder: (order: API.AlgoOrder, positionType: PositionType) => void;\n addTPSLOrder: (positionType: PositionType) => void;\n}) => {\n const [open, setOpen] = useState(true);\n const { orders } = props;\n const { isMobile } = useScreen();\n return (\n <Box className=\"oui-mt-6\">\n <Box\n className={cn(\"oui-flex oui-items-center oui-justify-between oui-px-5\")}\n >\n <PositionTypeDescription\n positionType={PositionType.FULL}\n open={open}\n onOpenChange={setOpen}\n />\n {orders && orders.length === 0 && (\n <Flex gap={2}>\n <AddButton\n positionType={PositionType.FULL}\n position={props.position}\n addTPSLOrder={props.addTPSLOrder}\n />\n </Flex>\n )}\n </Box>\n\n <Box\n className={cn(\n \"oui-overflow-hidden oui-transition-[height] oui-duration-150\",\n open ? \"oui-h-auto\" : \"oui-h-0 oui-pb-4\",\n )}\n >\n {isMobile ? (\n <OrdersTableMobile\n orders={orders}\n editTPSLOrder={(order) =>\n props.editTPSLOrder(order, PositionType.FULL)\n }\n canCancelOrder={props.onCancelOrder}\n />\n ) : (\n <OrdersTable\n orders={orders}\n editTPSLOrder={(order) => {\n props.editTPSLOrder(order, PositionType.FULL);\n }}\n onCancelOrder={props.onCancelOrder}\n />\n )}\n </Box>\n </Box>\n );\n};\n\nconst PartialPositionPart = (props: {\n position: API.Position;\n orders: API.AlgoOrder[];\n onCancelOrder: (order: API.AlgoOrder) => Promise<void>;\n onCancelAllTPSLOrders: () => Promise<void>;\n editTPSLOrder: (order: API.AlgoOrder, positionType: PositionType) => void;\n addTPSLOrder: (positionType: PositionType) => void;\n}) => {\n const [open, setOpen] = useState(true);\n const { orders } = props;\n const { isMobile } = useScreen();\n return (\n <Box className=\"oui-pt-6\">\n <Box\n className={cn(\n \"oui-flex oui-items-center oui-justify-between\",\n \"oui-px-5\",\n isMobile\n ? \"oui-flex-col oui-items-start oui-justify-start oui-gap-[11px]\"\n : \"oui-flex-row oui-items-center oui-justify-between\",\n )}\n >\n <PositionTypeDescription\n positionType={PositionType.PARTIAL}\n open={open}\n onOpenChange={setOpen}\n />\n <Flex gap={2}>\n <AddButton\n positionType={PositionType.PARTIAL}\n position={props.position}\n addTPSLOrder={props.addTPSLOrder}\n />\n {orders && orders.length > 0 && (\n <CancelAllBtn\n canCancelAll={orders && orders.length > 0}\n onCancelAllTPSLOrders={props.onCancelAllTPSLOrders}\n />\n )}\n </Flex>\n </Box>\n <Box\n className={cn(\n \"oui-overflow-hidden oui-transition-[height] oui-duration-150\",\n open ? \"oui-h-auto\" : \"oui-h-0 oui-pb-4\",\n )}\n >\n {isMobile ? (\n <OrdersTableMobile\n orders={orders}\n editTPSLOrder={(order) =>\n props.editTPSLOrder(order, PositionType.PARTIAL)\n }\n canCancelOrder={props.onCancelOrder}\n />\n ) : (\n <OrdersTable\n className=\"oui-h-[300px]\"\n orders={orders}\n editTPSLOrder={(order) => {\n props.editTPSLOrder(order, PositionType.PARTIAL);\n }}\n onCancelOrder={props.onCancelOrder}\n />\n )}\n </Box>\n </Box>\n );\n};\n\nconst PositionTypeDescription = (props: {\n positionType: PositionType;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}) => {\n const { t } = useTranslation();\n return (\n <Flex\n gap={1}\n itemAlign={\"center\"}\n justify={\"start\"}\n className=\"oui-text-2xs\"\n >\n <Flex\n itemAlign={\"center\"}\n justify={\"start\"}\n gap={1}\n className=\"oui-cursor-pointer\"\n onClick={() => props.onOpenChange(!props.open)}\n >\n <ChevronDownIcon\n size={12}\n color=\"white\"\n className={cn(\n \"oui-cursor-pointer oui-transition-transform\",\n props.open && \"oui-rotate-180\",\n )}\n />\n {props.positionType === PositionType.FULL ? (\n <Text>{t(\"tpsl.positionType.full\")}</Text>\n ) : (\n <Text>{t(\"tpsl.positionType.partial\")}</Text>\n )}\n </Flex>\n <Tooltip\n className=\"oui-w-[280px] oui-p-3\"\n content={\n props.positionType === PositionType.FULL\n ? t(\"tpsl.positionType.full.tips\")\n : t(\"tpsl.positionType.partial.tips\")\n }\n >\n <ExclamationFillIcon\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={12}\n />\n </Tooltip>\n </Flex>\n );\n};\n\nexport const AddButton = (props: {\n positionType: PositionType;\n position: API.Position;\n addTPSLOrder: (positionType: PositionType) => void;\n}) => {\n const { t } = useTranslation();\n const onAdd = () => {\n props.addTPSLOrder(props.positionType);\n };\n return (\n <ThrottledButton\n variant=\"outlined\"\n size=\"sm\"\n color=\"gray\"\n className=\"oui-h-6 oui-w-[94px] oui-text-2xs\"\n onClick={onAdd}\n >\n {t(\"tpsl.add\")}\n </ThrottledButton>\n );\n};\n\nexport const CancelAllBtn = (props: {\n onCancelAllTPSLOrders: () => Promise<void>;\n canCancelAll: boolean;\n}) => {\n const [loading, setLoading] = useState(false);\n const { t } = useTranslation();\n return (\n <ThrottledButton\n loading={loading}\n variant=\"outlined\"\n disabled={!props.canCancelAll}\n size=\"sm\"\n color=\"gray\"\n className=\"oui-h-6 oui-w-[94px] oui-text-2xs disabled:oui-border-base-contrast-16 disabled:oui-bg-transparent disabled:oui-text-base-contrast-20\"\n onClick={() => {\n setLoading(true);\n props\n .onCancelAllTPSLOrders()\n .then(\n () => {},\n (error) => {\n toast.error(error.message);\n },\n )\n .finally(() => {\n setLoading(false);\n });\n }}\n >\n {t(\"tpsl.cancelAll\")}\n </ThrottledButton>\n );\n};\n","import { API } from \"@orderly.network/types\";\nimport { cn, ScrollArea } from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { useColumn } from \"./useColum\";\n\nexport const OrdersTable = (props: {\n className?: string;\n orders: API.AlgoOrder[];\n editTPSLOrder: (order: API.AlgoOrder) => void;\n onCancelOrder: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const { orders } = props;\n const columns = useColumn({ onCancelOrder: props.onCancelOrder });\n return (\n // <ScrollArea className={cn( props.className)}>\n\n <AuthGuardDataTable\n columns={columns}\n dataSource={orders}\n className=\"oui-bg-transparent oui-text-2xs\"\n bordered\n classNames={{\n root: cn(props.className),\n header: \"!oui-bg-base-8\",\n scroll: cn(\n !orders || orders.length === 0\n ? \"!oui-min-h-[170px]\"\n : \"!oui-min-h-[100px]\",\n ),\n }}\n onRow={(record) => {\n return {\n className: cn(\n \"oui-h-[53px] oui-cursor-svg-edit !oui-border-none !oui-p-0\",\n ),\n onClick: () => {\n props.editTPSLOrder(record);\n },\n };\n }}\n />\n // </ScrollArea>\n );\n};\n","import { FC, SVGProps, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n cn,\n Flex,\n Text,\n ThrottledButton,\n toast,\n Tooltip,\n useScreen,\n} from \"@orderly.network/ui\";\nimport { EstPnlRender } from \"./components/estPnl\";\nimport { OrderPriceRender } from \"./components/orderPrice\";\nimport { QtyRender } from \"./components/qty\";\nimport { TriggerPrice } from \"./components/triggerPrice\";\nimport { TypeRender } from \"./components/type\";\n\nexport const useColumn = (props: {\n onCancelOrder?: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n const { onCancelOrder } = props;\n\n const columns = useMemo(() => {\n const moblieColumns = [\n {\n title: t(\"tpsl.tpslDetail.qty\"),\n dataIndex: \"quantity\",\n width: 70,\n className: \"oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <QtyRender order={record} />\n ),\n },\n {\n title: t(\"tpsl.tpslDetail.type\"),\n dataIndex: \"type\",\n width: 35,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <TypeRender order={record} />\n ),\n },\n {\n title: t(\"tpsl.tpslDetail.trigger\"),\n dataIndex: \"trigger\",\n width: 70,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => {\n return <TriggerPrice order={record} />;\n },\n },\n {\n title: t(\"tpsl.tpslDetail.price\"),\n dataIndex: \"price\",\n width: 70,\n className: \"oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <OrderPriceRender order={record} />\n ),\n },\n\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast\"\n content={t(\"tpsl.tpslDetail.estPnl.tooltip\")}\n >\n <Text className=\"oui-underline oui-decoration-dashed oui-underline-offset-2\">\n {t(\"tpsl.tpslDetail.estPnl\")}\n </Text>\n </Tooltip>\n ),\n dataIndex: \"estpnl\",\n width: 70,\n className: \"!oui-pr-0 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <EstPnlRender order={record} />\n ),\n },\n ];\n const desktopColums = [\n {\n title: t(\"tpsl.tpslDetail.qty\"),\n dataIndex: \"quantity\",\n width: 70,\n className: cn(\" oui-py-2 !oui-pl-5\"),\n render: (_: string, record: API.AlgoOrder) => (\n <QtyRender order={record} />\n ),\n },\n {\n title: t(\"tpsl.tpslDetail.type\"),\n dataIndex: \"type\",\n width: 35,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <TypeRender order={record} />\n ),\n },\n {\n title: t(\"tpsl.tpslDetail.trigger\"),\n dataIndex: \"trigger\",\n width: 70,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => {\n return <TriggerPrice order={record} />;\n },\n },\n {\n title: t(\"tpsl.tpslDetail.price\"),\n dataIndex: \"price\",\n width: 70,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <OrderPriceRender order={record} />\n ),\n },\n\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast\"\n content={t(\"tpsl.tpslDetail.estPnl.tooltip\")}\n >\n <Text className=\"oui-underline oui-decoration-dashed oui-underline-offset-2\">\n {t(\"tpsl.tpslDetail.estPnl\")}\n </Text>\n </Tooltip>\n ),\n dataIndex: \"estpnl\",\n width: 70,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <EstPnlRender order={record} />\n ),\n },\n {\n title: \"\",\n dataIndex: \"delete\",\n width: 50,\n className: cn(\"oui-py-2 !oui-pr-5\"),\n render: (_: any, record: API.AlgoOrder) => {\n return <CancelAllBtn order={record} onCancelOrder={onCancelOrder} />;\n },\n },\n ];\n if (isMobile) {\n return moblieColumns;\n }\n return desktopColums;\n }, [t, isMobile]);\n return columns;\n};\n\nexport const FlexCell = (props: { children: React.ReactNode }) => {\n return (\n <Flex\n direction={\"column\"}\n justify={\"center\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs oui-h-[36px]\"\n >\n {props.children}\n </Flex>\n );\n};\n\nexport interface IconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\nconst DeleteIcon: FC<IconProps> = (props) => {\n const { size = 18 } = props;\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 18 18\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M5.48081 15.375C5.10681 15.375 4.78731 15.2426 4.52231 14.9777C4.25744 14.7127 4.125 14.3932 4.125 14.0192V4.50004H3.375V3.37505H6.75V2.71167H11.25V3.37505H14.625V4.50004H13.875V14.0192C13.875 14.3981 13.7438 14.7188 13.4813 14.9813C13.2188 15.2438 12.8981 15.375 12.5192 15.375H5.48081ZM12.75 4.50004H5.25V14.0192C5.25 14.0866 5.27162 14.1419 5.31487 14.1852C5.35812 14.2284 5.41344 14.25 5.48081 14.25H12.5192C12.5769 14.25 12.6298 14.226 12.6778 14.1779C12.7259 14.1299 12.75 14.077 12.75 14.0192V4.50004ZM7.053 12.75H8.17781V6.00004H7.053V12.75ZM9.82219 12.75H10.947V6.00004H9.82219V12.75Z\" />\n </svg>\n );\n};\n\nexport const CancelAllBtn = (props: {\n order: API.AlgoOrder;\n onCancelOrder?: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const [loading, setLoading] = useState(false);\n return (\n <ThrottledButton\n size=\"sm\"\n loading={loading}\n variant=\"text\"\n color=\"gray\"\n onClick={(e) => {\n e.stopPropagation();\n console.log(\"delete\");\n setLoading(true);\n props\n .onCancelOrder?.(props.order)\n .then(\n () => {},\n (error) => {\n toast.error(error.message);\n },\n )\n .finally(() => {\n setLoading(false);\n });\n }}\n >\n <DeleteIcon className=\"oui-text-base-contrast-54 hover:oui-text-base-contrast oui-cursor-pointer\" />\n </ThrottledButton>\n );\n};\n","import { findTPSLFromOrder } from \"@orderly.network/hooks\";\nimport { positions as perpPositions } from \"@orderly.network/perp\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FlexCell } from \"../components/common\";\nimport { useTPSLDetailContext } from \"../tpslDetailProvider\";\n\nexport const EstPnlRender = ({ order }: { order: API.AlgoOrder }) => {\n const { position, base_dp, quote_dp } = useTPSLDetailContext();\n const { tp_trigger_price, sl_trigger_price } = findTPSLFromOrder(order);\n\n let tp_unrealPnl = undefined;\n let sl_unrealPnl = undefined;\n const qty = new Decimal(order.quantity).eq(0)\n ? position.position_qty\n : order.quantity;\n if (tp_trigger_price) {\n tp_unrealPnl = new Decimal(\n perpPositions.unrealizedPnL({\n qty,\n openPrice: position?.average_open_price,\n // markPrice: unRealizedPrice,\n markPrice: tp_trigger_price,\n }),\n )\n .abs()\n .toNumber();\n }\n\n if (sl_trigger_price) {\n sl_unrealPnl = new Decimal(\n perpPositions.unrealizedPnL({\n qty: qty,\n openPrice: position?.average_open_price,\n // markPrice: unRealizedPrice,\n markPrice: sl_trigger_price,\n }),\n )\n .abs()\n .mul(-1)\n .toNumber();\n }\n return (\n <Flex\n gap={2}\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {tp_unrealPnl && (\n <FlexCell>\n <Text.numeral dp={2} rm={Decimal.ROUND_DOWN} coloring padding={false}>\n {tp_unrealPnl}\n </Text.numeral>\n </FlexCell>\n )}\n {sl_unrealPnl && (\n <FlexCell>\n <Text.numeral dp={2} rm={Decimal.ROUND_DOWN} coloring padding={false}>\n {sl_unrealPnl}\n </Text.numeral>\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { Flex } from \"@orderly.network/ui\";\n\nexport const FlexCell = (props: { children: React.ReactNode }) => {\n return (\n <Flex\n direction={\"column\"}\n justify={\"center\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs oui-h-[36px]\"\n >\n {props.children}\n </Flex>\n );\n};\n","import { findTPSLOrderPriceFromOrder } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, OrderType } from \"@orderly.network/types\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FlexCell } from \"../components/common\";\nimport { useTPSLDetailContext } from \"../tpslDetailProvider\";\n\nexport const OrderPriceRender = ({ order }: { order: API.AlgoOrder }) => {\n const { quote_dp } = useTPSLDetailContext();\n const { tp_order_price, sl_order_price } = findTPSLOrderPriceFromOrder(order);\n const { t } = useTranslation();\n return (\n <Flex\n gap={2}\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {tp_order_price && (\n <FlexCell>\n {tp_order_price === OrderType.MARKET ? (\n <Text>{t(\"common.market\")}</Text>\n ) : (\n <Text.numeral dp={quote_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {tp_order_price}\n </Text.numeral>\n )}\n </FlexCell>\n )}\n {sl_order_price && (\n <FlexCell>\n {sl_order_price === OrderType.MARKET ? (\n <Text>{t(\"common.market\")}</Text>\n ) : (\n <Text.numeral dp={quote_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {sl_order_price}\n </Text.numeral>\n )}\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { findTPSLFromOrder } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FlexCell } from \"../components/common\";\nimport { useTPSLDetailContext } from \"../tpslDetailProvider\";\n\nexport const QtyRender = ({ order }: { order: API.AlgoOrder }) => {\n const { position, base_dp } = useTPSLDetailContext();\n const { tp_trigger_price, sl_trigger_price } = findTPSLFromOrder(order);\n return (\n <Flex\n direction={\"column\"}\n justify={\"start\"}\n itemAlign={\"start\"}\n className=\"oui-h-full oui-text-2xs\"\n >\n <FlexCell>\n <Text.numeral dp={base_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {order.quantity === 0 ? position.position_qty : order.quantity}\n </Text.numeral>\n </FlexCell>\n {tp_trigger_price && sl_trigger_price && (\n <FlexCell>\n <div />\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { findTPSLFromOrder } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FlexCell } from \"../components/common\";\nimport { useTPSLDetailContext } from \"../tpslDetailProvider\";\n\nexport const TriggerPrice = ({ order }: { order: API.AlgoOrder }) => {\n const { quote_dp } = useTPSLDetailContext();\n const { tp_trigger_price, sl_trigger_price } = findTPSLFromOrder(order);\n const { t } = useTranslation();\n return (\n <Flex\n gap={1}\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {tp_trigger_price && (\n <FlexCell>\n <Flex direction={\"column\"} justify={\"start\"} itemAlign={\"start\"}>\n <Text className=\"oui-text-base-contrast-36\">\n {t(\"common.market\")}\n </Text>\n <Text.numeral dp={quote_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {tp_trigger_price}\n </Text.numeral>\n </Flex>\n </FlexCell>\n )}\n {sl_trigger_price && (\n <FlexCell>\n <Flex direction={\"column\"} justify={\"start\"} itemAlign={\"start\"}>\n <Text className=\"oui-text-base-contrast-36\">\n {t(\"common.market\")}\n </Text>\n <Text.numeral dp={quote_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {sl_trigger_price}\n </Text.numeral>\n </Flex>\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { findTPSLFromOrder } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { FlexCell } from \"../components/common\";\n\nexport const TypeRender = ({ order }: { order: API.AlgoOrder }) => {\n const { tp_trigger_price, sl_trigger_price } = findTPSLFromOrder(order);\n const { t } = useTranslation();\n\n return (\n <Flex\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {tp_trigger_price && (\n <FlexCell>\n <Text className=\"oui-text-trade-profit\">{t(\"tpsl.tp\")}</Text>\n </FlexCell>\n )}\n\n {sl_trigger_price && (\n <FlexCell>\n <Text className=\"oui-text-trade-loss\">{t(\"tpsl.sl\")}</Text>\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { useMemo, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, Button, cn, ThrottledButton, toast } from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { useColumn } from \"./useColum\";\n\nexport const OrdersTableMobile = (props: {\n orders: API.AlgoOrder[];\n editTPSLOrder: (order: API.AlgoOrder) => void;\n canCancelOrder: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const { t } = useTranslation();\n const { orders } = props;\n const columns = useColumn({ onCancelOrder: () => Promise.resolve() });\n const orderIds = useMemo(() => {\n return orders.reduce(\n (acc, curr) => {\n acc[curr.algo_order_id] = true;\n return acc;\n },\n {} as Record<string, boolean>,\n );\n }, [orders]);\n return (\n <AuthGuardDataTable\n columns={columns}\n dataSource={orders}\n expanded={orderIds}\n bordered\n getRowCanExpand={() => true}\n expandRowRender={(row) => {\n return (\n <Flex gap={2} justify={\"end\"}>\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"gray\"\n className=\"oui-h-6 oui-text-2xs oui-text-base-contrast-54\"\n onClick={() => props.editTPSLOrder(row.original)}\n >\n {t(\"common.edit\")}\n </Button>\n <DeleteBtn\n order={row.original}\n onCancelOrder={props.canCancelOrder}\n />\n </Flex>\n );\n }}\n className=\"oui-bg-transparent oui-px-2 oui-text-2xs\"\n classNames={{\n scroll: cn(\n !orders || orders.length === 0\n ? \"!oui-min-h-[170px]\"\n : \"!oui-min-h-[100px]\",\n ),\n }}\n onRow={() => {\n return {\n className: cn(\n \"oui-h-[53px] oui-cursor-svg-edit !oui-border-none !oui-p-0\",\n ),\n };\n }}\n generatedRowKey={(record) => record.algo_order_id}\n />\n );\n};\n\nexport const DeleteBtn = (props: {\n order: API.AlgoOrder;\n onCancelOrder?: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const [loading, setLoading] = useState(false);\n const { t } = useTranslation();\n return (\n <ThrottledButton\n className=\"oui-h-6 oui-text-2xs oui-text-base-contrast-54\"\n size=\"sm\"\n loading={loading}\n variant=\"outlined\"\n color=\"gray\"\n onClick={(e) => {\n e.stopPropagation();\n setLoading(true);\n props\n .onCancelOrder?.(props.order)\n .then(\n () => {},\n (error) => {\n toast.error(error.message);\n },\n )\n .finally(() => {\n setLoading(false);\n });\n }}\n >\n {t(\"common.delete\")}\n </ThrottledButton>\n );\n};\n","import React from \"react\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { useTPSLSimpleDialog } from \"./tpslSimpleDialog.script\";\nimport { TPSLSimpleDialogUI } from \"./tpslSimpleDialog.ui\";\n\nexport const TPSLSimpleDialogWidget: React.FC<{\n type: \"tp\" | \"sl\";\n triggerPrice?: number;\n symbol: string;\n close?: () => void;\n onComplete?: () => void;\n showAdvancedTPSLDialog?: () => void;\n}> = (props) => {\n const { close, onComplete, showAdvancedTPSLDialog } = props;\n const state = useTPSLSimpleDialog(props);\n return (\n <TPSLSimpleDialogUI\n {...state}\n close={close}\n onComplete={onComplete}\n showAdvancedTPSLDialog={showAdvancedTPSLDialog}\n />\n );\n};\n\nexport const TPSLSimpleSheetId = \"TPSLSimpleSheetId\";\n\nexport const TPSLSimpleDialogId = \"TPSLSimpleDialogId\";\n\nregisterSimpleSheet(TPSLSimpleSheetId, TPSLSimpleDialogWidget, {\n classNames: {},\n});\n\nregisterSimpleDialog(TPSLSimpleDialogId, TPSLSimpleDialogWidget, {\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\n","import { useEffect, useMemo, useRef } from \"react\";\nimport {\n type ComputedAlgoOrder,\n useLocalStorage,\n usePositionStream,\n useSymbolsInfo,\n useTPSLOrder,\n utils,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n AlgoOrderRootType,\n API,\n OrderType,\n PositionType,\n SDKError,\n} from \"@orderly.network/types\";\nimport { modal, toast } from \"@orderly.network/ui\";\nimport { PositionTPSLConfirm } from \"../tpsl.ui\";\n\nexport type TPSLBuilderOptions = {\n type: \"tp\" | \"sl\";\n triggerPrice?: number;\n symbol: string;\n};\n\nexport const useTPSLSimpleDialog = (options: TPSLBuilderOptions) => {\n const { type, triggerPrice, symbol } = options;\n const symbolInfo = useSymbolsInfo();\n const [{ rows: positions }, positionsInfo] = usePositionStream(symbol);\n const position = positions?.[0];\n const prevTPSLType = useRef<AlgoOrderRootType>(AlgoOrderRootType.TP_SL);\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n const { t } = useTranslation();\n\n const [\n tpslOrder,\n {\n submit,\n deleteOrder,\n setValue,\n setValues,\n validate,\n errors,\n isCreateMutating,\n isUpdateMutating,\n },\n ] = useTPSLOrder(\n {\n symbol: symbol!,\n position_qty: position?.position_qty,\n average_open_price: position?.average_open_price,\n },\n {\n defaultOrder: undefined,\n positionType: PositionType.PARTIAL,\n tpslEnable: { tp_enable: type === \"tp\", sl_enable: type === \"sl\" },\n isEditing: false,\n },\n );\n\n const setQuantity = (value: number | string) => {\n setValue(\"quantity\", value);\n };\n\n const setOrderPrice = (\n name: \"tp_trigger_price\" | \"sl_trigger_price\",\n value: number | string,\n ) => {\n setValue(name, value);\n };\n\n const setPnL = (type: string, value: number | string) => {\n setValue(type, value);\n };\n\n const maxQty = useMemo(\n () => Math.abs(Number(position.position_qty)),\n [position.position_qty],\n );\n\n useEffect(() => {\n if (!maxQty) {\n return;\n }\n setValue(\"quantity\", maxQty);\n if (type === \"tp\") {\n setValue(\"tp_trigger_price\", triggerPrice ?? \"\");\n } else {\n setValue(\"sl_trigger_price\", triggerPrice ?? \"\");\n }\n }, [type, triggerPrice, maxQty]);\n\n useEffect(() => {}, [maxQty]);\n\n const onSubmit = async () => {\n try {\n const validOrder = await validate();\n console.log(\"validOrder\", validOrder);\n if (validOrder) {\n if (!needConfirm) {\n return submit({ accountId: position.account_id })\n .then(() => true)\n .catch((err) => {\n if (err?.message) {\n toast.error(err.message);\n }\n throw false;\n });\n }\n // confirm\n return modal\n .confirm({\n title: t(\"tpsl.confirmOrder\"),\n // bodyClassName: \"lg:oui-py-0\",\n onOk: async () => {\n try {\n const res = await submit({\n accountId: position.account_id,\n });\n\n if (res.success) {\n return res;\n }\n\n if (res.message) {\n toast.error(res.message);\n }\n\n return false;\n } catch (err: any) {\n if (err?.message) {\n toast.error(err.message);\n }\n return false;\n }\n },\n classNames: {\n body: \"!oui-pb-0\",\n },\n content: (\n <PositionTPSLConfirm\n isPositionTPSL={false}\n isEditing={false}\n symbol={symbol}\n qty={Number(tpslOrder.quantity)}\n maxQty={maxQty}\n tpPrice={Number(tpslOrder.tp_trigger_price)}\n slPrice={Number(tpslOrder.sl_trigger_price)}\n side={tpslOrder.side!}\n orderInfo={tpslOrder}\n quoteDP={symbolInfo[symbol](\"quote_dp\")}\n baseDP={symbolInfo[symbol](\"base_dp\")}\n />\n ),\n })\n .then(\n () => {\n return true;\n },\n () => {\n return Promise.reject(false);\n },\n );\n }\n } catch (error) {\n return Promise.reject(error);\n }\n };\n\n return {\n symbolInfo: symbolInfo[symbol!],\n maxQty,\n setQuantity,\n orderQuantity: tpslOrder.quantity,\n isPosition: false,\n TPSL_OrderEntity: tpslOrder,\n setOrderValue: setValue,\n setPnL,\n setOrderPrice,\n onSubmit,\n errors,\n status: {\n isCreateMutating,\n isUpdateMutating,\n },\n position,\n setValues,\n type,\n triggerPrice,\n } as const;\n};\n\nexport type TPSLBuilderState = ReturnType<typeof useTPSLSimpleDialog>;\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@orderly.network/react-app\";\nimport { Box, Button, cn, Divider, Flex, Text } from \"@orderly.network/ui\";\nimport { TPSLQuantity } from \"../components/tpslQty\";\nimport { useTPSLSimpleDialog } from \"./tpslSimpleDialog.script\";\n\ntype Props = ReturnType<typeof useTPSLSimpleDialog> & {\n close?: () => void;\n onComplete?: () => void;\n showAdvancedTPSLDialog?: (options: { qty: number }) => void;\n};\n\nexport const TPSLSimpleDialogUI: React.FC<Props> = (props) => {\n const { type, triggerPrice, errors, TPSL_OrderEntity } = props;\n const { t } = useTranslation();\n const { parseErrorMsg } = useOrderEntryFormErrorMsg(errors);\n\n const footer = (\n <Flex width=\"100%\" itemAlign=\"center\" gap={3} mt={4}>\n <Button\n key=\"secondary\"\n color=\"gray\"\n onClick={() => {\n props.onComplete?.();\n props.close?.();\n }}\n fullWidth\n className=\"oui-text-sm\"\n size=\"md\"\n >\n {t(\"common.cancel\")}\n </Button>\n <Button\n key=\"primary\"\n onClick={() => {\n props.onSubmit().then(() => {\n props.onComplete?.();\n props.close?.();\n });\n }}\n fullWidth\n className=\"oui-text-sm\"\n size=\"md\"\n >\n {t(\"common.confirm\")}\n </Button>\n </Flex>\n );\n\n const errorMessage = () => {\n const tpError = parseErrorMsg(\"tp_trigger_price\");\n const slError = parseErrorMsg(\"sl_trigger_price\");\n let text = \"\";\n if (tpError && type === \"tp\") {\n text = tpError;\n }\n if (slError && type === \"sl\") {\n text = slError;\n }\n if (!text) {\n return null;\n }\n return (\n <Flex\n justify={\"start\"}\n itemAlign={\"start\"}\n gap={2}\n className=\"oui-mt-2 oui-w-full\"\n >\n <div className=\"oui-relative oui-top-[7px] oui-size-1 oui-rounded-full oui-bg-danger\" />\n <Text className=\"oui-text-danger\">{text}</Text>\n </Flex>\n );\n };\n\n const renderPnl = () => {\n const { tp_pnl, sl_pnl } = TPSL_OrderEntity;\n if (type === \"sl\") {\n return (\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.totalEstSlPnl\")}</Text>\n {sl_pnl ? (\n <Text.numeral\n suffix={\n <Text className=\"oui-ml-1 oui-text-base-contrast-36\">USDC</Text>\n }\n coloring\n visible={true}\n size=\"2xs\"\n dp={2}\n >\n {Number(sl_pnl)}\n </Text.numeral>\n ) : (\n <Text size=\"2xs\">-- USDC</Text>\n )}\n </Flex>\n );\n }\n return (\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.totalEstTpPnl\")}</Text>\n <Text.numeral\n suffix={\n <Text className=\"oui-text-base-contrast-36 oui-ml-1\">USDC</Text>\n }\n rule=\"price\"\n coloring\n visible={true}\n size=\"2xs\"\n dp={2}\n >\n {tp_pnl ? Number(tp_pnl) : \"--\"}\n </Text.numeral>\n </Flex>\n );\n };\n\n return (\n <Box className=\"oui-w-full oui-px-0.5\">\n <TPSLQuantity\n maxQty={props.maxQty}\n quantity={Number(props.orderQuantity ?? props.maxQty)}\n baseTick={props.symbolInfo(\"base_tick\")}\n dp={props.symbolInfo(\"base_dp\")}\n quote={props.symbolInfo(\"base\")}\n isEditing={false}\n errorMsg={parseErrorMsg(\"quantity\")}\n onQuantityChange={props.setQuantity}\n />\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-mt-4 oui-w-full oui-gap-1 oui-text-xs oui-text-base-contrast-36\",\n )}\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"xs\">{t(\"tpsl.advanced.triggerPrice\")}</Text>\n <Text.numeral\n className=\"oui-text-base-contrast\"\n suffix={\n <Text className=\"oui-ml-1 oui-text-xs oui-text-base-contrast-36\">\n USDC\n </Text>\n }\n rule=\"price\"\n size=\"xs\"\n dp={props.symbolInfo(\"quote_dp\")}\n >\n {triggerPrice ? Number(triggerPrice) : \"--\"}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"xs\">{t(\"tpsl.advanced.orderPrice\")}</Text>\n <Text className=\"oui-text-base-contrast\" size=\"xs\">\n {t(\"tpsl.advanced.market\")}\n </Text>\n </Flex>\n {renderPnl()}\n </Flex>\n {errorMessage()}\n\n <Divider className=\"oui-my-3 oui-w-full\" />\n <Flex\n itemAlign={\"center\"}\n onClick={() => {\n props.close?.();\n props.showAdvancedTPSLDialog?.({\n qty: Number(TPSL_OrderEntity.quantity),\n });\n }}\n className=\"oui-pb-4\"\n >\n <Text color=\"primary\" className=\"oui-cursor-pointer oui-text-sm\">\n {t(\"tpsl.advancedSetting\")}\n </Text>\n </Flex>\n {footer}\n </Box>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/editorPopover.tsx","../src/positionTPSL/tpsl.widget.tsx","../src/positionTPSL/tpsl.ui.tsx","../src/components/orderInfo.tsx","../src/components/pnlInfo.tsx","../src/components/tpslInputRow/tpslInputRow.script.ts","../src/components/tpslInputRow/tpslInputRow.ui.tsx","../src/pnlInput/pnlInput.ui.tsx","../src/pnlInput/useBuilder.script.ts","../src/pnlInput/pnlInput.widget.tsx","../src/components/orderPriceType.tsx","../src/components/tpslInputRow/priceInput.tsx","../src/components/tpslInputRow/tpslInputRow.widget.tsx","../src/components/tpslPostionType/tpslPositionType.script.tsx","../src/components/tpslPostionType/tpslPositionType.ui.tsx","../src/components/tpslPostionType/tpslPostionType.widget.tsx","../src/components/tpslQty.tsx","../src/positionTPSL/useTPSL.script.tsx","../src/positionTPSL/positionTpslConfirm.tsx","../src/editorSheet.tsx","../src/tpslAdvanced/tpslAdvanced.ui.tsx","../src/tpslAdvanced/useTPSLAdvanced.script.ts","../src/tpslAdvanced/tpslAdvanced.widget.tsx","../src/tpslDetail/tpslDetail.widget.tsx","../src/tpslDetail/tpslDetail.script.tsx","../src/tpslDetail/tpslDetailProvider.tsx","../src/tpslDetail/tsplDetail.ui.tsx","../src/tpslDetail/ordersTable.tsx","../src/tpslDetail/useColum.tsx","../src/tpslDetail/components/estPnl.tsx","../src/tpslDetail/components/common.tsx","../src/tpslDetail/components/orderPrice.tsx","../src/tpslDetail/components/qty.tsx","../src/tpslDetail/components/triggerPrice.tsx","../src/tpslDetail/components/type.tsx","../src/tpslDetail/ordersTable.mobile.tsx","../src/tpslSimpleDialog/tpslSimpleDialog.widget.tsx","../src/tpslSimpleDialog/tpslSimpleDialog.script.tsx","../src/tpslSimpleDialog/tpslSimpleDialog.ui.tsx","../src/editBracketOrder/editBracketOrder.widget.tsx","../src/editBracketOrder/editBracketOrder.script.tsx","../src/editBracketOrder/editBracketOrder.ui.tsx"],"names":["useLocalStorage","useTranslation","AlgoOrderRootType","PositionType","Box","Button","modal","registerSimpleDialog","registerSimpleSheet","useOrderEntryFormErrorMsg","OrderType","Flex","Grid","Text","cn","ThrottledButton","ScrollArea","useScreen","useIndexPrice","useMarkPrice","useSymbolLeverage","TokenIcon","jsx","jsxs","OrderInfo","props","order","symbol","side","markPrice","indexPrice","symbolLeverage","useMemo","Decimal","checkIsNaN","PnlInfo","tp_pnl","sl_pnl","riskRatio","defaultNode","tpDecimal","slDecimal","ratio","useTPSLInputRowScript","Fragment","Trans","Checkbox","useEffect","useState","CaretDownIcon","Input","SimpleDropdownMenu","inputFormatter","useRef","todpIfNeed","usePNLInputBuilder","type","values","mode","setMode","focus","setFocus","t","key","value","modes","percentageSuffix","onValueChange","formatter","options","dp","endStr","PNLInput","onModeChange","quote","quote_dp","pnl","prefix","setPrefix","placeholder","setPlaceholder","color","num","label","item","PNLMenus","PnlInputWidget","testId","rest","state","Select","OrderPriceType","option","displayLabel","PriceInput","TPSLInputRowUI","parseErrorMsg","positionType","roi","_roi","_entryPrice","rootOrderPrice","checked","RenderROI","price","className","orderType","TPSLInputRowWidget","useTPSLPositionTypeScript","ExclamationFillIcon","Tooltip","positionTypeKey","TPSLPositionTypeUI","event","TPSLPositionTypeWidget","utils","convertValueToPercentage","Slider","TPSLQuantity","inputRef","currentQtyPercentage","formatQuantity","qty","_qty","errorMsg","e","TPSL","TPSL_OrderEntity","symbolInfo","onCancel","onComplete","status","position","setValues","onClose","isEditing","errors","validated","isMobile","renderQtyInput","err","usePositionStream","useSymbolsInfo","useTPSLOrder","SDKError","toast","OrderSide","Badge","Divider","textVariants","transSymbolformString","TPSLOrderType","tpPrice","slPrice","PositionTPSLConfirm","maxQty","quoteDP","baseDP","_isPositionTPSL","needConfirm","setNeedConfirm","renderPositionType","renderTPSLPrice","isOrderPrice","isEnable","colorType","isPositionTPSL","check","useTPSLBuilder","triggerPrice","withTriggerPrice","prevTPSLType","positions","tpslOrder","submit","deleteOrder","setValue","validate","metaState","isCreateMutating","isUpdateMutating","setQuantity","setOrderPrice","name","setPnL","dirty","quantity","diff","tp_trigger_price","sl_trigger_price","tp_order_price","sl_order_price","cancel","onConfirm","res","onSubmit","error","TPSLWidget","close","TPSLSheetId","TPSLDialogId","PositionTPSLPopover","buttonProps","useModal","PositionTPSLSheet","resolve","hide","updateArgs","TPSLAdvancedUI","formattedOrder","setOrderValue","tpValues","setTpValuse","slValues","setSlValues","prev","ArrowRightIcon","useOrderEntry","isTPSLEnable","useTPSLAdvanced","innerMetaState","setInnerMetaState","helper","i18n","TPSLAdvancedWidget","TPSLAdvancedSheetId","TPSLAdvancedDialogId","findPositionTPSLFromOrders","useOrderStream","OrderStatus","useTPSLDetail","fullPositionOrders","setFullPositionOrders","partialPositionOrders","setPartialPositionOrders","tpslOrders","cancelAlgoOrder","cancelPostionOrdersByTypes","refresh","onCancelOrder","onCancelAllTPSLOrders","showTPSLDialog","dialogId","editTPSLOrder","addTPSLOrder","fullPositionOrder","createContext","useContext","TPSLDetailContext","TPSLDetailProvider","useTPSLDetailContext","ChevronDownIcon","AuthGuardDataTable","findTPSLFromOrder","perpPositions","FlexCell","EstPnlRender","base_dp","tp_unrealPnl","sl_unrealPnl","findTPSLOrderPriceFromOrder","OrderPriceRender","QtyRender","TriggerPrice","TypeRender","useColumn","moblieColumns","_","record","desktopColums","CancelAllBtn","DeleteIcon","size","loading","setLoading","OrdersTable","orders","columns","OrdersTableMobile","orderIds","acc","curr","row","DeleteBtn","TPSLDetailUI","FullPositionPart","PartialPositionPart","open","setOpen","PositionTypeDescription","AddButton","TPSLDetailWidget","TPSLDetailDialogId","TPSLDetailSheetId","useTPSLSimpleDialog","positionsInfo","TPSLSimpleDialogUI","footer","errorMessage","tpError","slError","text","renderPnl","TPSLSimpleDialogWidget","showAdvancedTPSLDialog","TPSLSimpleSheetId","TPSLSimpleDialogId","useMutation","AlgoOrderType","getInitialOrder","childOrder","tpOrder","slOrder","tpslPriceInfo","isTPSLPriceChanged","originPrice","newPrice","originDeci","useEditBracketOrder","baseInfo","tpInfo","slInfo","doUpdateOrder","isMutating","isPriceChanged","childOrders","EditBracketOrderUI","EditBracketOrderWidget","EditBracketOrderSheetId","EditBracketOrderDialogId"],"mappings":"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","sourcesContent":["import { ReactNode } from \"react\";\nimport { ComputedAlgoOrder, useLocalStorage } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AlgoOrderRootType, API, PositionType } from \"@orderly.network/types\";\nimport { Box, Button, modal, toast } from \"@orderly.network/ui\";\nimport { ButtonProps } from \"@orderly.network/ui\";\nimport { TPSLDialogId } from \"./positionTPSL\";\n\nexport const PositionTPSLPopover = (props: {\n position: API.Position;\n order?: API.AlgoOrder;\n label?: string;\n baseDP?: number;\n quoteDP?: number;\n /**\n * Button props\n */\n buttonProps?: ButtonProps;\n isEditing?: boolean;\n children?: ReactNode;\n}) => {\n const { position, order, baseDP, quoteDP, buttonProps, isEditing } = props;\n\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n\n const { t } = useTranslation();\n\n const isPositionTPSL = isEditing\n ? order?.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n : undefined;\n\n const onEdit = () => {\n modal.show(TPSLDialogId, {\n order: order,\n symbol: position.symbol,\n baseDP: baseDP,\n quoteDP: quoteDP,\n positionType: isPositionTPSL ? PositionType.FULL : PositionType.PARTIAL,\n isEditing: isEditing,\n });\n };\n\n return (\n <Box onClick={onEdit} className=\"oui-cursor-pointer\">\n {props.children || (\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"secondary\"\n {...buttonProps}\n // onClick={() => {\n // setOpen(true);\n // }}\n >\n {props.label}\n </Button>\n )}\n </Box>\n );\n};\n","import { type AlgoOrderRootType } from \"@orderly.network/types\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { TPSL, TPSLProps } from \"./tpsl.ui\";\nimport { TPSLBuilderOptions, useTPSLBuilder } from \"./useTPSL.script\";\n\nexport type TPSLWidgetProps = {\n onTPSLTypeChange?: (type: AlgoOrderRootType) => void;\n} & TPSLBuilderOptions &\n TPSLProps;\n\nexport const TPSLWidget = (props: TPSLWidgetProps) => {\n const { onCancel, onComplete, close, ...rest } = props;\n const state = useTPSLBuilder(rest);\n\n return (\n <TPSL\n {...state}\n onCancel={onCancel}\n onComplete={onComplete}\n close={close}\n />\n );\n};\n\nexport const TPSLSheetId = \"TPSLSheetId\";\nexport const TPSLDialogId = \"TPSLDialogId\";\n\nregisterSimpleSheet(TPSLSheetId, TPSLWidget);\n\nregisterSimpleDialog(TPSLDialogId, TPSLWidget, {\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\n","import { OrderValidationResult } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@orderly.network/react-app\";\nimport {\n API,\n OrderlyOrder,\n OrderSide,\n OrderType,\n PositionType,\n} from \"@orderly.network/types\";\nimport {\n Box,\n Button,\n Flex,\n Grid,\n Text,\n cn,\n ThrottledButton,\n ScrollArea,\n useScreen,\n} from \"@orderly.network/ui\";\nimport { OrderInfo } from \"../components/orderInfo\";\nimport { PnlInfo } from \"../components/pnlInfo\";\nimport { TPSLInputRowWidget } from \"../components/tpslInputRow\";\nimport { TPSLPositionTypeWidget } from \"../components/tpslPostionType\";\nimport { TPSLQuantity } from \"../components/tpslQty\";\nimport { TPSLBuilderState } from \"./useTPSL.script\";\n\nexport type TPSLProps = {\n close?: () => void;\n onClose?: () => void;\n onCancel?: () => void;\n onComplete?: () => void;\n withTriggerPrice?: boolean;\n};\n\n//------------- TPSL form start ---------------\nexport const TPSL = (props: TPSLBuilderState & TPSLProps) => {\n const {\n TPSL_OrderEntity,\n symbolInfo,\n onCancel,\n onComplete,\n status,\n position,\n setValues,\n onClose,\n isEditing,\n } = props;\n\n const { errors, validated } = props.metaState;\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n const { parseErrorMsg } = useOrderEntryFormErrorMsg(errors);\n\n const renderQtyInput = () => {\n if (TPSL_OrderEntity.position_type === PositionType.FULL) {\n return null;\n }\n\n return (\n <Box className=\"oui-px-0.5\">\n <TPSLQuantity\n maxQty={props.maxQty}\n quantity={(props.orderQuantity ?? props.maxQty) as number}\n baseTick={symbolInfo(\"base_tick\")}\n dp={symbolInfo(\"base_dp\")}\n onQuantityChange={props.setQuantity}\n quote={symbolInfo(\"base\")}\n isEditing={props.isEditing}\n errorMsg={validated ? parseErrorMsg(\"quantity\") : undefined}\n />\n </Box>\n );\n };\n\n return (\n <div id=\"orderly-tp_sl-order-edit-content\">\n <ScrollArea className={cn(isMobile && \"oui-h-[calc(100vh-200px)]\")}>\n <OrderInfo\n baseDP={symbolInfo(\"base_dp\")}\n quoteDP={symbolInfo(\"quote_dp\")}\n classNames={{\n root: \"oui-mb-3\",\n container: \"oui-gap-x-[30px]\",\n }}\n order={{\n symbol: position.symbol,\n order_quantity: position.position_qty.toString(),\n order_price: position.average_open_price.toString(),\n }}\n />\n <Flex\n direction=\"column\"\n justify=\"start\"\n itemAlign={\"start\"}\n gap={3}\n className=\"oui-w-full oui-mb-3\"\n >\n {!isEditing && (\n <TPSLPositionTypeWidget\n disableSelector\n value={TPSL_OrderEntity.position_type ?? PositionType.PARTIAL}\n onChange={(key, value) => {\n if (value === PositionType.FULL) {\n setValues({\n position_type: value,\n quantity: Math.abs(position.position_qty).toString(),\n tp_order_price: \"\",\n tp_order_type: OrderType.MARKET,\n tp_trigger_price: \"\",\n sl_order_price: \"\",\n sl_order_type: OrderType.MARKET,\n sl_trigger_price: \"\",\n });\n } else {\n setValues({\n position_type: value,\n quantity: \"\",\n tp_order_price: \"\",\n tp_order_type: OrderType.MARKET,\n tp_trigger_price: \"\",\n sl_order_price: \"\",\n sl_order_type: OrderType.MARKET,\n sl_trigger_price: \"\",\n });\n }\n }}\n />\n )}\n {TPSL_OrderEntity.position_type === PositionType.FULL && (\n <Text className=\"oui-text-warning oui-text-2xs\">\n {t(\"tpsl.positionType.full.tips.market\")}\n </Text>\n )}\n </Flex>\n {renderQtyInput()}\n <Flex\n direction=\"column\"\n itemAlign={\"start\"}\n justify={\"start\"}\n gap={6}\n className=\"oui-w-full oui-mt-3\"\n >\n <TPSLInputRowWidget\n symbol={position.symbol}\n rootOrderPrice={position.average_open_price.toString()}\n type=\"tp\"\n values={{\n enable: TPSL_OrderEntity.tp_enable ?? true,\n trigger_price:\n TPSL_OrderEntity.tp_trigger_price?.toString() ?? undefined,\n PnL: TPSL_OrderEntity.tp_pnl?.toString() ?? undefined,\n Offset: TPSL_OrderEntity.tp_offset?.toString() ?? undefined,\n \"Offset%\":\n TPSL_OrderEntity.tp_offset_percentage?.toString() ?? undefined,\n order_price:\n TPSL_OrderEntity.tp_order_price?.toString() ?? undefined,\n order_type: TPSL_OrderEntity.tp_order_type ?? OrderType.MARKET,\n }}\n hideOrderPrice={\n TPSL_OrderEntity.position_type === PositionType.FULL\n }\n errors={validated ? errors : null}\n disableOrderTypeSelector={isEditing}\n quote_dp={symbolInfo(\"quote_dp\")}\n positionType={\n TPSL_OrderEntity.position_type ?? PositionType.PARTIAL\n }\n onChange={(key, value) => {\n console.log(\"key\", key, \"value\", value);\n props.setOrderValue(key as keyof OrderlyOrder, value);\n }}\n />\n\n <TPSLInputRowWidget\n symbol={position.symbol}\n rootOrderPrice={position.average_open_price.toString()}\n type=\"sl\"\n values={{\n enable: TPSL_OrderEntity.sl_enable ?? true,\n trigger_price:\n TPSL_OrderEntity.sl_trigger_price?.toString() ?? undefined,\n PnL: TPSL_OrderEntity.sl_pnl?.toString() ?? undefined,\n Offset: TPSL_OrderEntity.sl_offset?.toString() ?? undefined,\n \"Offset%\":\n TPSL_OrderEntity.sl_offset_percentage?.toString() ?? undefined,\n order_price:\n TPSL_OrderEntity.sl_order_price?.toString() ?? undefined,\n order_type: TPSL_OrderEntity.sl_order_type ?? OrderType.MARKET,\n }}\n hideOrderPrice={\n TPSL_OrderEntity.position_type === PositionType.FULL\n }\n errors={validated ? errors : null}\n quote_dp={symbolInfo(\"quote_dp\")}\n positionType={\n TPSL_OrderEntity.position_type ?? PositionType.PARTIAL\n }\n disableOrderTypeSelector={isEditing}\n onChange={(key, value) => {\n console.log(\"key\", key, \"value\", value);\n props.setOrderValue(key as keyof OrderlyOrder, value);\n }}\n />\n </Flex>\n\n <PnlInfo\n tp_pnl={TPSL_OrderEntity.tp_pnl}\n sl_pnl={TPSL_OrderEntity.sl_pnl}\n className=\"oui-my-3\"\n />\n </ScrollArea>\n <Grid cols={2} gap={3} mt={4}>\n <Button\n size={\"md\"}\n color={\"secondary\"}\n data-testid={\"tpsl-cancel\"}\n onClick={() => {\n props.close?.();\n }}\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton\n size={\"md\"}\n data-testid={\"tpsl-confirm\"}\n disabled={status.isCreateMutating}\n loading={status.isCreateMutating || status.isUpdateMutating}\n onClick={() => {\n props\n .onSubmit()\n .then(() => {\n props.close?.();\n onComplete?.();\n })\n .catch((err) => {\n console.log(\"--->>>cancel order\", err);\n });\n }}\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Grid>\n </div>\n );\n};\n","import {\n useIndexPrice,\n useMarkPrice,\n useSymbolLeverage,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { OrderlyOrder } from \"@orderly.network/types\";\nimport { cn, Flex, Grid, Text, TokenIcon } from \"@orderly.network/ui\";\n\ntype Props = {\n order: Partial<OrderlyOrder>;\n baseDP?: number;\n quoteDP?: number;\n className?: string;\n classNames?: {\n root?: string;\n symbol?: string;\n container?: string;\n };\n};\nexport const OrderInfo = (props: Props) => {\n const { t } = useTranslation();\n const { order } = props;\n const { symbol, side } = order;\n const markPrice = useMarkPrice(symbol!);\n const indexPrice = useIndexPrice(symbol!);\n const symbolLeverage = useSymbolLeverage(symbol!);\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-w-full oui-gap-3 oui-font-semibold \",\n props.classNames?.root,\n )}\n >\n <Flex\n itemAlign={\"center\"}\n className={cn(\"oui-gap-2 \", props.classNames?.symbol)}\n >\n <Flex gap={1} itemAlign={\"center\"}>\n <TokenIcon symbol={symbol} className=\"oui-w-5 oui-h-5\" />\n <Text.formatted\n className=\"oui-break-normal oui-whitespace-nowrap\"\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"sm\"\n weight=\"semibold\"\n intensity={98}\n >\n {symbol}\n </Text.formatted>\n </Flex>\n <Text\n size=\"2xs\"\n className=\"oui-text-base-contrast-36 oui-h-[18px] oui-px-2 oui-bg-base-7 oui-rounded oui-font-semibold\"\n >\n {symbolLeverage}x\n </Text>\n </Flex>\n <Grid\n cols={2}\n gapX={2}\n gapY={1}\n className={cn(\"oui-w-full oui-gap-x-2 \", props.classNames?.container)}\n >\n <Flex justify={\"between\"} className=\" oui-text-base-contrast-36\">\n <Text size=\"2xs\">{t(\"tpsl.advanced.quantity\")}</Text>\n <Text.numeral\n rule=\"price\"\n className=\"oui-text-base-contrast-80\"\n size=\"2xs\"\n dp={props.baseDP ?? 2}\n >\n {Number(order.order_quantity)}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-text-base-contrast-36\">\n <Text size=\"2xs\">{t(\"tpsl.advanced.lastPrice\")}</Text>\n <Text.numeral\n rule=\"price\"\n className=\"oui-text-base-contrast-80\"\n size=\"2xs\"\n dp={props.quoteDP ?? 2}\n >\n {indexPrice?.data}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-text-base-contrast-36\">\n <Text size=\"2xs\">{t(\"tpsl.advanced.orderPrice\")}</Text>\n <Text.numeral\n rule=\"price\"\n className=\"oui-text-base-contrast-80\"\n size=\"2xs\"\n dp={props.quoteDP ?? 2}\n >\n {Number(order.order_price)}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-text-base-contrast-36\">\n <Text size=\"2xs\">{t(\"common.markPrice\")}</Text>\n <Text.numeral\n rule=\"price\"\n className=\"oui-text-base-contrast-80\"\n size=\"2xs\"\n dp={props.quoteDP ?? 2}\n >\n {markPrice?.data}\n </Text.numeral>\n </Flex>\n </Grid>\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal, checkIsNaN } from \"@orderly.network/utils\";\n\ntype Props = {\n tp_pnl?: string | number;\n sl_pnl?: string | number;\n className?: string;\n};\n\nexport const PnlInfo = (props: Props) => {\n const { t } = useTranslation();\n const { tp_pnl, sl_pnl } = props;\n const riskRatio = useMemo(() => {\n const defaultNode = <Text className=\"oui-text-base-contrast-36\">-- x</Text>;\n if (tp_pnl === undefined || sl_pnl === undefined) {\n return defaultNode;\n }\n if (checkIsNaN(tp_pnl) || checkIsNaN(sl_pnl)) {\n return defaultNode;\n }\n const tpDecimal = new Decimal(tp_pnl);\n const slDecimal = new Decimal(sl_pnl);\n if (slDecimal.isZero() || tpDecimal.isZero()) {\n return defaultNode;\n }\n const ratio = tpDecimal.div(slDecimal).abs().toNumber().toFixed(2);\n return (\n <Flex gap={1} itemAlign={\"center\"} className=\"oui-text-base-contrast-80\">\n <Text>{ratio}</Text>\n <Text className=\"oui-text-base-contrast-36\">x</Text>\n </Flex>\n );\n return defaultNode;\n }, [tp_pnl, sl_pnl]);\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-w-full oui-gap-1 oui-text-2xs oui-text-base-contrast-36\",\n props.className,\n )}\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.totalEstTpPnl\")}</Text>\n <Text.numeral\n suffix={\n <Text className=\"oui-text-base-contrast-36 oui-ml-1\">USDC</Text>\n }\n rule=\"price\"\n coloring\n visible={true}\n size=\"2xs\"\n dp={2}\n >\n {tp_pnl ? Number(tp_pnl) : \"--\"}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.totalEstSlPnl\")}</Text>\n {sl_pnl ? (\n <Text.numeral\n suffix={\n <Text className=\"oui-text-base-contrast-36 oui-ml-1\">USDC</Text>\n }\n coloring\n visible={true}\n size=\"2xs\"\n dp={2}\n >\n {Number(sl_pnl)}\n </Text.numeral>\n ) : (\n <Text size=\"2xs\">-- USDC</Text>\n )}\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.riskRewardRatio\")}</Text>\n <Text className=\"oui-text-base-contrast-80\" size=\"2xs\">\n {riskRatio}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { OrderValidationResult } from \"@orderly.network/hooks\";\nimport { OrderType, PositionType } from \"@orderly.network/types\";\n\nexport type Props = {\n disableOrderTypeSelector?: boolean;\n type: \"tp\" | \"sl\";\n quote_dp: number;\n positionType: PositionType;\n errors: OrderValidationResult | null;\n hideOrderPrice?: boolean;\n values: {\n enable: boolean;\n trigger_price: string | undefined;\n PnL: string | undefined;\n Offset: string | undefined;\n \"Offset%\": string | undefined;\n ROI?: string | undefined;\n order_price: string | undefined;\n order_type: OrderType;\n };\n onChange: (key: string, value: string | boolean | number) => void;\n rootOrderPrice: string | undefined;\n symbol: string;\n disableEnableCheckbox?: boolean;\n};\nexport const useTPSLInputRowScript = (props: Props) => {\n return {\n disableOrderTypeSelector: props.disableOrderTypeSelector,\n values: props.values,\n onChange: props.onChange,\n type: props.type,\n quote_dp: props.quote_dp,\n positionType: props.positionType,\n errors: props.errors,\n hideOrderPrice: props.hideOrderPrice,\n rootOrderPrice: props.rootOrderPrice,\n symbol: props.symbol,\n disableEnableCheckbox: props.disableEnableCheckbox,\n };\n};\n","import React, { Fragment, useMemo } from \"react\";\nimport { useSymbolLeverage } from \"@orderly.network/hooks\";\nimport { useTranslation, Trans } from \"@orderly.network/i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@orderly.network/react-app\";\nimport { OrderType, PositionType } from \"@orderly.network/types\";\nimport { Flex, Text, Grid, Checkbox, cn } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { PnlInputWidget } from \"../../pnlInput/pnlInput.widget\";\nimport { OrderPriceType } from \"../orderPriceType\";\nimport { PriceInput } from \"./priceInput\";\nimport { useTPSLInputRowScript } from \"./tpslInputRow.script\";\n\ntype TPSLInputRowProps = ReturnType<typeof useTPSLInputRowScript>;\n\nexport const TPSLInputRowUI: React.FC<TPSLInputRowProps> = (props) => {\n const { t } = useTranslation();\n const { parseErrorMsg } = useOrderEntryFormErrorMsg(props.errors);\n const { values, positionType } = props;\n const symbolLeverage = useSymbolLeverage(props.symbol);\n\n const roi = useMemo(() => {\n if (isNaN(Number(symbolLeverage))) {\n return null;\n }\n let _roi = null;\n if (!props.rootOrderPrice) {\n return null;\n }\n\n if (!values.trigger_price && !values.order_price) {\n return null;\n }\n let _entryPrice = new Decimal(0);\n if (values.order_type === OrderType.MARKET) {\n if (!values.trigger_price) {\n return null;\n }\n _entryPrice = new Decimal(values.trigger_price);\n } else if (values.order_type === OrderType.LIMIT) {\n if (!values.order_price) {\n return null;\n }\n _entryPrice = new Decimal(values.order_price);\n }\n const rootOrderPrice = new Decimal(props.rootOrderPrice);\n\n _roi = _entryPrice\n .minus(rootOrderPrice)\n .div(rootOrderPrice)\n .mul(symbolLeverage)\n .abs()\n .mul(100)\n .mul(props.type === \"tp\" ? 1 : -1)\n .toNumber();\n return _roi;\n }, [values, props.rootOrderPrice, symbolLeverage, props.type]);\n\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n justify={\"start\"}\n className=\"oui-w-full\"\n >\n <Flex className=\"oui-w-full\" itemAlign={\"center\"} justify={\"start\"}>\n {!props.disableEnableCheckbox && (\n <Checkbox\n data-testid={`oui-testid-orderEntry-${props.type}-enable-checkBox`}\n id={`enable_${props.type}`}\n color={\"white\"}\n checked={values.enable}\n onCheckedChange={(checked: boolean) => {\n props.onChange(`${props.type}_enable`, !!checked);\n }}\n />\n )}\n <label\n htmlFor={`enable_${props.type}`}\n className={cn(\n \"oui-cursor-pointer oui-text-sm\",\n props.disableEnableCheckbox\n ? \"oui-ml-0 oui-text-base-contrast\"\n : \"oui-ml-1 oui-text-base-contrast-36\",\n )}\n >\n {props.type === \"tp\"\n ? t(\"tpsl.advanced.TP.label\")\n : t(\"tpsl.advanced.SL.label\")}\n </label>\n </Flex>\n <Flex\n direction={\"column\"}\n gap={2}\n itemAlign={\"start\"}\n className={cn(\"oui-w-full oui-pt-2\", values.enable ? \"\" : \"oui-hidden\")}\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-w-full oui-gap-0.5\"\n >\n <Text className=\"oui-text-2xs oui-text-base-contrast-54\">\n {t(\"tpsl.advanced.triggerPrice\")}\n </Text>\n <Grid cols={2} gap={2} className=\"oui-w-full oui-px-0.5\">\n <PriceInput\n type={`${props.type} price`}\n value={values.trigger_price}\n error={parseErrorMsg(`${props.type}_trigger_price`)}\n onValueChange={(value) => {\n props.onChange(`${props.type}_trigger_price`, value);\n }}\n quote_dp={props.quote_dp}\n />\n <PnlInputWidget\n type={props.type === \"tp\" ? \"TP\" : \"SL\"}\n onChange={(key, value) => {\n props.onChange(key, value as string);\n }}\n quote={\"USDC\"}\n quote_dp={2}\n values={values}\n />\n </Grid>\n </Flex>\n <Flex\n direction={\"column\"}\n className={cn(\n \"oui-w-full oui-gap-0.5\",\n props.hideOrderPrice ? \"oui-hidden\" : \"\",\n )}\n itemAlign={\"start\"}\n >\n <Text className=\"oui-text-2xs oui-text-base-contrast-54\">\n {t(\"tpsl.advanced.orderPrice\")}\n </Text>\n <Grid cols={2} gap={2} className=\"oui-w-full oui-px-0.5\">\n <PriceInput\n disabled={\n positionType === PositionType.FULL ||\n values.order_type === OrderType.MARKET\n }\n type={\"order price\"}\n label={\n values.order_type === OrderType.LIMIT\n ? t(\"tpsl.advanced.limit\")\n : t(\"tpsl.advanced.market\")\n }\n value={values.order_price}\n error={parseErrorMsg(`${props.type}_order_price`)}\n onValueChange={(value) => {\n props.onChange(`${props.type}_order_price`, value);\n }}\n quote_dp={props.quote_dp}\n />\n <OrderPriceType\n disabled={\n positionType === PositionType.FULL ||\n props.disableOrderTypeSelector\n }\n type={values.order_type}\n onChange={(value) => {\n props.onChange(`${props.type}_order_type`, value as OrderType);\n }}\n />\n </Grid>\n </Flex>\n </Flex>\n <RenderROI\n price={\n values.order_type === OrderType.MARKET\n ? values.trigger_price\n : values.order_price\n }\n orderType={values.order_type}\n pnl={values.PnL}\n roi={roi}\n dp={props.quote_dp}\n className=\"oui-mt-1\"\n />\n </Flex>\n );\n};\n\nconst RenderROI: React.FC<{\n className?: string;\n price?: number | string;\n pnl?: number | string;\n roi?: number | null;\n dp: number;\n orderType: OrderType;\n}> = (props) => {\n const { t } = useTranslation();\n const { price, pnl, roi, dp, className, orderType } = props;\n if (!roi || !price || !pnl) {\n return null;\n }\n return (\n <Text className={cn(\"oui-text-2xs oui-text-base-contrast-36\", className)}>\n <Trans\n i18nKey=\"tpsl.advanced.ROI\"\n components={[\n <Fragment key=\"price\">\n <Text.numeral\n className=\"oui-px-1 oui-text-base-contrast\"\n dp={dp}\n suffix={<Text className=\"oui-pl-0.5\">USDC</Text>}\n >\n {price}\n </Text.numeral>\n </Fragment>,\n <Fragment key=\"orderType\">\n <Text className=\"oui-px-1 oui-text-base-contrast\">\n {orderType === OrderType.MARKET\n ? t(\"common.market\")\n : t(\"common.limit\")}\n </Text>\n </Fragment>,\n <Fragment key=\"pnl\">\n <Text.numeral\n coloring\n className=\"oui-whitespace-nowrap oui-px-1\"\n dp={2}\n suffix={<Text className=\"oui-pl-0.5\">USDC</Text>}\n >\n {pnl}\n </Text.numeral>\n </Fragment>,\n\n <Fragment key=\"roi\">\n <Text.numeral\n coloring\n className=\"oui-whitespace-nowrap oui-px-1\"\n dp={2}\n suffix=\"%\"\n >\n {roi}\n </Text.numeral>\n </Fragment>,\n ]}\n />\n </Text>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n CaretDownIcon,\n cn,\n Input,\n MenuItem,\n SimpleDropdownMenu,\n} from \"@orderly.network/ui\";\nimport { inputFormatter, Text } from \"@orderly.network/ui\";\nimport { PNLInputState, PnLMode } from \"./useBuilder.script\";\n\nexport type PNLInputProps = PNLInputState & { testId?: string; quote: string };\n\nexport const PNLInput = (props: PNLInputProps) => {\n const {\n mode,\n modes,\n onModeChange,\n onValueChange,\n quote,\n quote_dp,\n value,\n pnl,\n } = props;\n const { t } = useTranslation();\n\n const [prefix, setPrefix] = useState<string>(mode);\n const [placeholder, setPlaceholder] = useState<string>(\n mode === PnLMode.PERCENTAGE ? \"%\" : quote,\n );\n\n const color = useMemo(() => {\n const num = Number(pnl);\n\n if (isNaN(num) || num === 0) return \"\";\n\n if (num > 0) return \"oui-text-trade-profit\";\n if (num < 0) return \"oui-text-trade-loss\";\n }, [pnl]);\n\n useEffect(() => {\n const label = modes.find((item) => item.value === mode)?.label;\n setPrefix(label!);\n setPlaceholder(mode === PnLMode.PERCENTAGE ? \"%\" : quote);\n }, [mode, modes]);\n\n return (\n <Input\n prefix={prefix}\n size={{\n initial: \"lg\",\n lg: \"md\",\n }}\n placeholder={placeholder}\n align={\"right\"}\n value={value}\n data-testid={props.testId}\n autoComplete={\"off\"}\n onValueChange={onValueChange}\n formatters={[\n // inputFormatter.numberFormatter,\n props.formatter({ dp: quote_dp, mode }),\n inputFormatter.currencyFormatter,\n inputFormatter.decimalPointFormatter,\n ]}\n // className={color}\n classNames={{\n input: cn(\"oui-text-2xs\", color),\n prefix: \"oui-text-base-contrast-54 oui-text-2xs\",\n root: \"oui-outline-line-12 focus-within:oui-outline-primary-light\",\n }}\n onFocus={() => {\n setPlaceholder(\"\");\n props.setFocus(true);\n }}\n onBlur={() => {\n setPlaceholder(mode === PnLMode.PERCENTAGE ? \"%\" : quote);\n props.setFocus(false);\n }}\n // value={props.value}\n suffix={\n <>\n {mode === PnLMode.PERCENTAGE && !!value && (\n <Text\n size={\"2xs\"}\n color=\"inherit\"\n className={cn(\"oui-ml-[2px]\", color)}\n >\n %\n </Text>\n )}\n <PNLMenus\n mode={mode}\n modes={modes}\n onModeChange={(item) => onModeChange(item.value as PnLMode)}\n />\n </>\n }\n />\n );\n};\n\nconst PNLMenus = (props: {\n mode?: string;\n modes: MenuItem[];\n onModeChange: (value: MenuItem) => void;\n}) => {\n return (\n <SimpleDropdownMenu\n currentValue={props.mode}\n menu={props.modes}\n align={\"end\"}\n size={\"xs\"}\n className={\"oui-min-w-[80px]\"}\n onSelect={(item) => props.onModeChange(item as MenuItem)}\n >\n <button className={\"oui-p-2\"}>\n <CaretDownIcon size={12} color={\"white\"} />\n </button>\n </SimpleDropdownMenu>\n );\n};\n","import { useMemo, useRef, useState } from \"react\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { MenuItem } from \"@orderly.network/ui\";\nimport type {\n InputFormatter,\n InputFormatterOptions,\n} from \"@orderly.network/ui\";\nimport { Decimal, todpIfNeed } from \"@orderly.network/utils\";\n\nexport enum PnLMode {\n PnL = \"PnL\",\n OFFSET = \"Offset\",\n PERCENTAGE = \"Offset%\",\n}\n\nexport type PNL_Values = {\n PnL: string | undefined;\n Offset: string | undefined;\n \"Offset%\": string | undefined;\n};\n\nexport type BuilderProps = {\n type: \"TP\" | \"SL\";\n\n quote_dp?: number;\n onChange: (key: string, value: number | string) => void;\n\n values: PNL_Values;\n};\n\nexport const usePNLInputBuilder = (props: BuilderProps) => {\n const { type, values } = props;\n const [mode, setMode] = useLocalStorage<PnLMode>(\n \"TP/SL_Mode\",\n PnLMode.PERCENTAGE,\n );\n const [focus, setFocus] = useState(true);\n\n const { t } = useTranslation();\n\n const key = useMemo(() => {\n switch (mode) {\n case PnLMode.OFFSET:\n return `${type.toLowerCase()}_offset`;\n case PnLMode.PERCENTAGE:\n return `${type.toLowerCase()}_offset_percentage`;\n default:\n return `${type.toLowerCase()}_pnl`;\n }\n }, [mode]);\n\n const value = useMemo(() => {\n return values[mode as keyof PNL_Values];\n }, [values, mode]);\n\n const modes = useMemo<MenuItem[]>(() => {\n return [\n {\n label: t(\"tpsl.pnl\"),\n value: PnLMode.PnL,\n testId: `${PnLMode.PnL}_menu_item`,\n },\n {\n label: t(\"tpsl.offset\"),\n value: PnLMode.OFFSET,\n testId: `${PnLMode.OFFSET}_mneu_item`,\n },\n {\n label: `${t(\"tpsl.offset\")}%`,\n value: PnLMode.PERCENTAGE,\n testId: `${PnLMode.PERCENTAGE}_menu_item`,\n },\n ];\n }, [t]);\n\n const percentageSuffix = useRef<string>(\"\");\n\n const onValueChange = (value: string) => {\n props.onChange(key, value);\n };\n\n const formatter = (options: {\n dp?: number;\n mode: PnLMode;\n }): InputFormatter => {\n const { dp = 2 } = options;\n return {\n onRenderBefore: (\n value: string | number,\n options: InputFormatterOptions,\n ) => {\n value = `${value}`; // convert to string\n\n if (focus) {\n if (type === \"SL\" && mode === PnLMode.PnL) {\n value = value.startsWith(\"-\") ? value : \"-\" + value;\n }\n }\n\n if (value === \"\" || value === \"-\") return \"\";\n // if (mode === PnLMode.PnL || mode === PnLMode.OFFSET) {\n // return commify(value);\n // }\n\n if (mode === PnLMode.PERCENTAGE) {\n return `${new Decimal(\n value.replace(\n new RegExp(percentageSuffix.current.replace(\".\", \"\\\\.\") + \"$\"),\n \"\",\n ),\n )\n .mul(100)\n .todp(2, 4)\n .toString()}${percentageSuffix.current}`;\n } else if (mode === PnLMode.OFFSET) {\n value = todpIfNeed(value, dp);\n } else {\n // value = new Decimal(value).todp(2).toString();\n }\n\n return `${value}`;\n },\n onSendBefore: (value: string) => {\n if (/^\\-?0{2,}$/.test(value)) {\n return \"0\";\n }\n\n if (mode === PnLMode.PERCENTAGE) {\n // console.log(\"value\", value);\n if (value !== \"\") {\n // percentageSuffix.current = value.endsWith(\".\") ? \".\" : \"\";\n value = todpIfNeed(value, 2);\n const endStr = value.match(/\\.0{0,2}$/);\n if (!!endStr) {\n percentageSuffix.current = endStr[0];\n } else {\n percentageSuffix.current = \"\";\n }\n value = new Decimal(value).div(100).toString();\n value = `${value}${percentageSuffix.current}`;\n }\n } else if (mode === PnLMode.PnL && type === \"SL\" && focus) {\n value = value.startsWith(\"-\") ? value : \"-\" + value;\n } else {\n value = todpIfNeed(value, dp);\n }\n\n if (value === \"\" || value === \"-\") return \"\";\n\n return value;\n },\n };\n // return {\n // onRenderBefore: (\n // value: string | number,\n // options: InputFormatterOptions\n // ) => {\n // // console.log(\"???\", options);\n // const { isFocused } = options;\n // value = `${value}`;\n // if (value === \"\" || value === \"-\") return \"\";\n\n // // if (type === \"SL\" && mode === PnLMode.PnL) {\n // // if (isFocused) {\n // // value = value.startsWith(\"-\") ? value : \"-\" + value;\n // // }\n // // }\n\n // if (mode === PnLMode.PERCENTAGE) {\n // return `${todpIfNeed(new Decimal(value).mul(100).toString(), 2)}${\n // percentageSuffix.current\n // }`;\n // // return (Number(value) * 100).toFixed(2);\n // } else if (mode === PnLMode.OFFSET) {\n // value = todpIfNeed(value, 2);\n // } else {\n // // value = new Decimal(value).todp(2).toString();\n // }\n\n // return value;\n // },\n // onSendBefore: (value: string, options: InputFormatterOptions) => {\n // const { isFocused } = options;\n\n // if (mode === PnLMode.PERCENTAGE) {\n // if (value !== \"\") {\n // percentageSuffix.current = value.endsWith(\".\") ? \".\" : \"\";\n // value = new Decimal(value).div(100).toString();\n // value = todpIfNeed(value, 4);\n // }\n // } else {\n // // value = todpIfNeed(value, quote_dp);\n // if (isFocused) {\n // if (type === \"SL\" && mode === PnLMode.PnL) {\n // // if (\n // // typeof values[PnLMode.PnL] !== \"undefined\" &&\n // // values[PnLMode.PnL] !== \"\"\n // // )\n // // return value;\n // const num = Number(value);\n // if (!isNaN(num) && num !== 0) {\n // value = (Math.abs(num) * -1).toString();\n // } else {\n // value = \"\";\n // }\n // }\n // }\n // }\n\n // return value;\n // },\n // };\n };\n\n return {\n mode,\n modes,\n type: props.type,\n formatter,\n onModeChange: (mode: PnLMode) => {\n setMode(mode);\n },\n value,\n pnl: values[PnLMode.PnL],\n onValueChange,\n quote_dp: props.quote_dp,\n setFocus,\n };\n};\n\nexport type PNLInputState = ReturnType<typeof usePNLInputBuilder>;\n","import { PNLInput } from \"./pnlInput.ui\";\nimport { BuilderProps, usePNLInputBuilder } from \"./useBuilder.script\";\n\nexport const PnlInputWidget = (\n props: BuilderProps & {\n testId?: string;\n quote: string;\n }\n) => {\n const { testId, quote, ...rest } = props;\n const state = usePNLInputBuilder(rest);\n return <PNLInput {...state} testId={testId} quote={quote} />;\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { Select, Text } from \"@orderly.network/ui\";\n\ntype Props = {\n type: OrderType;\n onChange: (type: OrderType) => void;\n disabled?: boolean;\n};\n\nexport const OrderPriceType = (props: Props) => {\n const { t } = useTranslation();\n const options = [\n { label: t(\"orderEntry.orderType.limitOrder\"), value: OrderType.LIMIT },\n { label: t(\"orderEntry.orderType.marketOrder\"), value: OrderType.MARKET },\n ];\n return (\n <Select.options\n value={props.type}\n options={options}\n disabled={props.disabled}\n onValueChange={props.onChange}\n size={\"xs\"}\n classNames={{\n trigger:\n \"oui-bg-transparent oui-w-auto oui-outline-line-1 oui-input-root oui-bg-base-6 oui-h-10 lg:oui-h-8 oui-outline-line-12 \",\n }}\n valueFormatter={(value, option) => {\n const displayLabel = {\n [OrderType.LIMIT]: t(\"orderEntry.orderType.limit\"),\n [OrderType.MARKET]: t(\"common.marketPrice\"),\n }[value];\n return <Text size={\"2xs\"}>{displayLabel}</Text>;\n }}\n />\n );\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Input, inputFormatter } from \"@orderly.network/ui\";\n\nexport const PriceInput: React.FC<{\n type: string;\n label?: string;\n value?: string | number;\n error?: string;\n onValueChange: (value: string) => void;\n quote_dp: number;\n disabled?: boolean;\n}> = (props) => {\n const [placeholder, setPlaceholder] = useState<string>(\"USDC\");\n const { t } = useTranslation();\n\n return (\n <Input.tooltip\n data-testid={`oui-testid-tpsl-popUp-${props.type.toLowerCase()}-input`}\n prefix={props.label ?? t(\"common.markPrice\")}\n size={{ initial: \"lg\", lg: \"md\" }}\n tooltip={props.error}\n placeholder={placeholder}\n disabled={props.disabled}\n align={\"right\"}\n autoComplete={\"off\"}\n value={props.value}\n color={props.error ? \"danger\" : undefined}\n classNames={{\n input: \"oui-text-2xs placeholder:oui-text-2xs\",\n prefix: \"oui-text-base-contrast-54 oui-text-2xs\",\n root: \"oui-w-full\",\n // root: \"oui-outline-line-12 focus-within:oui-outline-primary-light\",\n }}\n onValueChange={props.onValueChange}\n onFocus={() => {\n setPlaceholder(\"\");\n }}\n onBlur={() => {\n setPlaceholder(\"USDC\");\n }}\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.quote_dp),\n inputFormatter.currencyFormatter,\n inputFormatter.decimalPointFormatter,\n ]}\n />\n );\n};\n","import { Props, useTPSLInputRowScript } from \"./tpslInputRow.script\";\nimport { TPSLInputRowUI } from \"./tpslInputRow.ui\";\n\nexport const TPSLInputRowWidget = (props: Props) => {\n const state = useTPSLInputRowScript(props);\n return <TPSLInputRowUI {...state} />;\n};\n","import { useState } from \"react\";\nimport { OrderlyOrder, PositionType } from \"@orderly.network/types\";\n\ntype OrderValueKeys = keyof OrderlyOrder;\nexport type PositionTypeProps = {\n disableSelector?: boolean;\n value: PositionType;\n onChange: (key: OrderValueKeys, value: any) => void;\n};\n\nexport const useTPSLPositionTypeScript = (props: PositionTypeProps) => {\n return {\n value: props.value,\n onChange: props.onChange,\n disableSelector: props.disableSelector,\n };\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { PositionType } from \"@orderly.network/types\";\nimport {\n ExclamationFillIcon,\n Flex,\n Select,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { useTPSLPositionTypeScript } from \"./tpslPositionType.script\";\n\ntype TPSLPositionTypeUIProps = ReturnType<typeof useTPSLPositionTypeScript>;\n\nconst positionTypeKey = \"position_type\";\nexport const TPSLPositionTypeUI = (props: TPSLPositionTypeUIProps) => {\n const { t } = useTranslation();\n const options = [\n {\n label: t(\"tpsl.positionType.partial\"),\n value: PositionType.PARTIAL,\n },\n {\n label: t(\"tpsl.positionType.full\"),\n value: PositionType.FULL,\n },\n ];\n\n return (\n <Flex gap={1} itemAlign={\"center\"} justify={\"start\"}>\n <Tooltip\n className=\"oui-w-[280px] oui-p-3\"\n content={\n props.value === PositionType.FULL\n ? t(\"tpsl.positionType.full.tips\")\n : t(\"tpsl.positionType.partial.tips\")\n }\n >\n <ExclamationFillIcon\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={12}\n />\n </Tooltip>\n {props.disableSelector ? (\n props.value === PositionType.FULL ? (\n <Text className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-54\">\n {t(\"tpsl.positionType.full\")}\n </Text>\n ) : (\n <Text className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-54\">\n {t(\"tpsl.positionType.partial\")}\n </Text>\n )\n ) : (\n <Select.options\n value={props.value}\n options={options}\n onValueChange={(event) => {\n props.onChange(positionTypeKey, event as PositionType);\n }}\n size={\"xs\"}\n classNames={{\n trigger: \" oui-bg-transparent oui-border-0 oui-w-auto oui-px-0\",\n }}\n contentProps={{\n className: \" oui-bg-base-8 oui-border-0\",\n }}\n />\n )}\n </Flex>\n );\n};\n","import {\n PositionTypeProps,\n useTPSLPositionTypeScript,\n} from \"./tpslPositionType.script\";\nimport { TPSLPositionTypeUI } from \"./tpslPositionType.ui\";\n\nexport const TPSLPositionTypeWidget = (props: PositionTypeProps) => {\n const state = useTPSLPositionTypeScript(props);\n return <TPSLPositionTypeUI {...state} />;\n};\n","import { useRef } from \"react\";\nimport { utils } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n convertValueToPercentage,\n Flex,\n Input,\n Slider,\n Text,\n} from \"@orderly.network/ui\";\nimport { inputFormatter } from \"@orderly.network/ui\";\nimport { cn } from \"@orderly.network/ui\";\n\nexport const TPSLQuantity = (props: {\n maxQty: number;\n baseTick: number;\n dp: number;\n quote: string;\n onQuantityChange?: (value: number | string) => void;\n quantity: number;\n isEditing?: boolean;\n setOrderValue?: (key: string, value: number | string) => void;\n errorMsg?: string;\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const currentQtyPercentage =\n convertValueToPercentage(props.quantity, 0, props.maxQty) / 100;\n const { t } = useTranslation();\n\n const formatQuantity = (qty: string) => {\n let _qty = qty;\n if (Number(qty) > props.maxQty) {\n _qty = props.maxQty.toString();\n }\n if (props.baseTick > 0) {\n props.onQuantityChange?.(utils.formatNumber(_qty, props.baseTick) ?? qty);\n }\n };\n\n const errorMsg =\n props.quantity.toString().length > 0 ? props.errorMsg : undefined;\n\n return (\n <>\n <Flex gap={2}>\n <div className={\"oui-flex-1\"}>\n <Input.tooltip\n data-testid=\"oui-testid-tpsl-popUp-quantity-input\"\n ref={inputRef}\n prefix={t(\"common.quantity\")}\n size={{\n initial: \"md\",\n lg: \"sm\",\n }}\n align=\"right\"\n value={props.quantity}\n autoComplete=\"off\"\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-bg-base-5 oui-outline-line-12\",\n errorMsg && \"oui-outline-danger\",\n ),\n }}\n tooltipProps={{\n content: {\n className: \"oui-bg-base-6 oui-text-base-contrast-80\",\n },\n arrow: {\n className: \"oui-fill-base-6\",\n },\n }}\n tooltip={errorMsg}\n color={errorMsg ? \"danger\" : undefined}\n formatters={[\n inputFormatter.dpFormatter(props.dp),\n inputFormatter.numberFormatter,\n inputFormatter.currencyFormatter,\n inputFormatter.decimalPointFormatter,\n ]}\n onValueChange={(value) => {\n props.onQuantityChange?.(value);\n const qty = Number(value);\n console.log(\"qty\", value, Number(value), qty);\n if (qty && qty > props.maxQty) {\n const qty = props.maxQty;\n props.onQuantityChange?.(qty);\n inputRef.current?.blur();\n }\n }}\n onBlur={(e) => formatQuantity(e.target.value)}\n suffix={\n <span className=\"oui-text-2xs oui-text-base-contrast-54 oui-px-3\">\n {props.quote}\n </span>\n }\n />\n </div>\n </Flex>\n <Flex mt={2} itemAlign={\"center\"} height={\"15px\"}>\n <Slider.single\n markCount={5}\n color=\"primary\"\n max={props.maxQty}\n min={0}\n showTip\n step={props.baseTick}\n value={props.quantity}\n onValueCommit={(value) => {\n formatQuantity(`${value}`);\n }}\n onValueChange={(value) => {\n props.onQuantityChange?.(value);\n }}\n />\n </Flex>\n <Flex justify={\"between\"}>\n <Text.numeral rule={\"percentages\"} color={\"primary\"} size={\"2xs\"}>\n {currentQtyPercentage}\n </Text.numeral>\n <Flex itemAlign={\"center\"} gap={1}>\n <button\n className={\"oui-leading-none\"}\n style={{ lineHeight: 0 }}\n onClick={() => {\n props.onQuantityChange?.(props.maxQty);\n }}\n >\n <Text color={\"primary\"} size={\"2xs\"}>\n {t(\"common.max\")}\n </Text>\n </button>\n\n <Text.numeral\n rule={\"price\"}\n size={\"2xs\"}\n intensity={54}\n tick={props.baseTick}\n >\n {props.maxQty}\n </Text.numeral>\n </Flex>\n </Flex>\n </>\n );\n};\n","import { useEffect, useMemo, useRef } from \"react\";\nimport {\n type ComputedAlgoOrder,\n useLocalStorage,\n usePositionStream,\n useSymbolsInfo,\n useTPSLOrder,\n utils,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n AlgoOrderRootType,\n AlgoOrderType,\n API,\n OrderType,\n PositionType,\n SDKError,\n} from \"@orderly.network/types\";\nimport { modal, toast } from \"@orderly.network/ui\";\nimport { PositionTPSLConfirm } from \"./positionTpslConfirm\";\n\ntype PropsWithTriggerPrice = {\n withTriggerPrice?: boolean;\n triggerPrice?: number;\n type?: \"tp\" | \"sl\";\n qty?: number;\n};\n\nexport type TPSLBuilderOptions = {\n symbol: string;\n position?: API.Position;\n order?: API.AlgoOrder;\n onTPSLTypeChange?: (type: AlgoOrderRootType) => void;\n isEditing?: boolean;\n positionType?: PositionType;\n /**\n * either show the confirm dialog or not,\n * if the Promise reject or return false, cancel the submit action\n */\n onConfirm?: (\n order: ComputedAlgoOrder,\n options: {\n position: API.Position;\n submit: (params?: { accountId?: string }) => Promise<any>;\n cancel: () => Promise<any>;\n },\n ) => Promise<boolean>;\n close?: () => void;\n};\n\nexport const useTPSLBuilder = (\n options: TPSLBuilderOptions & PropsWithTriggerPrice,\n) => {\n const {\n symbol,\n order,\n isEditing,\n positionType,\n triggerPrice,\n type,\n withTriggerPrice,\n } = options;\n const { t } = useTranslation();\n // const isEditing = !!order;\n if (isEditing && !order) {\n throw new SDKError(\"order is required when isEditing is true\");\n }\n // const symbol = isEditing ? order!.symbol : position.symbol;\n const symbolInfo = useSymbolsInfo();\n\n const prevTPSLType = useRef<AlgoOrderRootType>(AlgoOrderRootType.TP_SL);\n const [{ rows: positions }] = usePositionStream();\n\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n const position = positions.find((item) => item.symbol === symbol);\n if (!position) {\n throw new SDKError(\"position not found\");\n }\n\n const [\n tpslOrder,\n {\n submit,\n deleteOrder,\n setValue,\n setValues,\n validate,\n metaState,\n errors,\n isCreateMutating,\n isUpdateMutating,\n },\n ] = useTPSLOrder(\n {\n symbol,\n position_qty: position?.position_qty ?? 0,\n average_open_price: position?.average_open_price ?? 0,\n },\n {\n defaultOrder: order,\n positionType: triggerPrice ? PositionType.PARTIAL : positionType,\n tpslEnable: {\n tp_enable: !withTriggerPrice ? true : type === \"tp\",\n sl_enable: !withTriggerPrice ? true : type === \"sl\",\n },\n isEditing,\n },\n );\n\n const setQuantity = (value: number | string) => {\n setValue(\"quantity\", value);\n };\n\n const setOrderPrice = (\n name: \"tp_trigger_price\" | \"sl_trigger_price\",\n value: number | string,\n ) => {\n setValue(name, value);\n };\n\n const setPnL = (type: string, value: number | string) => {\n setValue(type, value);\n };\n\n const maxQty = useMemo(\n () => Math.abs(Number(position.position_qty)),\n [position.position_qty],\n );\n\n const dirty = useMemo(() => {\n const quantity =\n order?.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? maxQty\n : order?.quantity;\n\n let diff: number = 0;\n\n if (Number(tpslOrder.quantity) !== quantity) {\n diff = 1;\n } else if (!isEditing && !!tpslOrder.quantity) {\n diff = 1;\n }\n\n if (order && isEditing) {\n const { tp_trigger_price, sl_trigger_price } =\n utils.findTPSLFromOrder(order);\n const { tp_order_price, sl_order_price } =\n utils.findTPSLOrderPriceFromOrder(order);\n\n if (\n tp_trigger_price !== Number(tpslOrder.tp_trigger_price) &&\n typeof typeof tpslOrder.tp_trigger_price !== \"undefined\"\n ) {\n diff = 2;\n }\n\n if (\n sl_trigger_price !== Number(tpslOrder.sl_trigger_price) &&\n typeof tpslOrder.sl_trigger_price !== \"undefined\"\n ) {\n diff = 3;\n }\n if (\n typeof tpslOrder.tp_order_price !== \"undefined\" &&\n tp_order_price !== OrderType.MARKET &&\n tp_order_price !== Number(tpslOrder.tp_order_price)\n ) {\n diff = 4;\n }\n if (\n typeof tpslOrder.sl_order_price !== \"undefined\" &&\n sl_order_price !== OrderType.MARKET &&\n sl_order_price !== Number(tpslOrder.sl_order_price)\n ) {\n diff = 5;\n }\n }\n\n if (\n diff === 1 &&\n !tpslOrder.tp_trigger_price &&\n !tpslOrder.sl_trigger_price\n ) {\n diff = -1;\n }\n\n return diff;\n }, [\n tpslOrder.tp_trigger_price,\n tpslOrder.tp_order_price,\n tpslOrder.sl_trigger_price,\n tpslOrder.sl_order_price,\n tpslOrder.quantity,\n order,\n isEditing,\n ]);\n\n useEffect(() => {\n if (!withTriggerPrice) {\n return;\n }\n if (!triggerPrice) {\n return;\n }\n if (type === \"tp\") {\n setValue(\"tp_trigger_price\", triggerPrice);\n } else {\n setValue(\"sl_trigger_price\", triggerPrice);\n }\n if (options.qty) {\n setValue(\"quantity\", options.qty);\n }\n }, [type, triggerPrice, options.qty]);\n\n const cancel = (): Promise<void> => {\n if (order?.algo_order_id && order?.symbol) {\n return deleteOrder(order?.algo_order_id, order?.symbol);\n }\n return Promise.reject(\"order id or symbol is invalid\");\n };\n\n const onConfirm = (\n order: ComputedAlgoOrder,\n options: {\n position: API.Position;\n submit: (params?: { accountId?: string }) => Promise<any>;\n cancel: () => Promise<any>;\n },\n ) => {\n if (!needConfirm) {\n return Promise.resolve(true);\n }\n\n const maxQty = Math.abs(Number(position.position_qty));\n if (\n `${order.tp_trigger_price ?? \"\"}`.length === 0 &&\n `${order.sl_trigger_price ?? \"\"}`.length === 0\n ) {\n return modal\n .confirm({\n title: t(\"orders.cancelOrder\"),\n content: t(\"tpsl.cancelOrder.description\"),\n onOk: () => {\n return options.cancel();\n },\n })\n .then(\n () => {\n return true;\n },\n () => {\n return Promise.reject(false);\n },\n );\n }\n\n return modal\n .confirm({\n title: t(\"tpsl.confirmOrder\"),\n // bodyClassName: \"lg:oui-py-0\",\n onOk: async () => {\n try {\n const res = await options.submit({\n accountId: position.account_id,\n });\n\n if (res.success) {\n return res;\n }\n\n if (res.message) {\n toast.error(res.message);\n }\n\n return false;\n } catch (err: any) {\n if (err?.message) {\n toast.error(err.message);\n }\n return false;\n }\n },\n classNames: {\n body: \"!oui-pb-0\",\n },\n content: (\n <PositionTPSLConfirm\n isPositionTPSL={positionType === PositionType.FULL}\n isEditing={isEditing}\n symbol={order.symbol!}\n qty={Number(order.quantity)}\n maxQty={maxQty}\n tpPrice={Number(order.tp_trigger_price)}\n slPrice={Number(order.sl_trigger_price)}\n side={order.side!}\n orderInfo={order}\n quoteDP={symbolInfo[symbol](\"quote_dp\") ?? 2}\n baseDP={symbolInfo[symbol](\"base_dp\") ?? 2}\n />\n ),\n })\n .then(\n () => {\n return true;\n },\n () => {\n return Promise.reject(false);\n },\n );\n };\n\n const onSubmit = async () => {\n try {\n const validOrder = await validate();\n console.log(\"validOrder\", validOrder);\n if (validOrder) {\n if (!needConfirm) {\n return submit({ accountId: position.account_id })\n .then(() => true)\n .catch((err) => {\n if (err?.message) {\n toast.error(err.message);\n }\n throw false;\n });\n }\n\n return onConfirm(tpslOrder, {\n position,\n submit,\n cancel,\n });\n }\n } catch (error) {\n return Promise.reject(error);\n }\n };\n\n return {\n isEditing,\n symbolInfo: symbolInfo[symbol],\n maxQty,\n setQuantity,\n orderQuantity: tpslOrder.quantity,\n // isPosition: isPositionTPSL,\n\n TPSL_OrderEntity: tpslOrder,\n setOrderValue: setValue,\n setPnL,\n setOrderPrice,\n // needConfirm,\n onSubmit,\n metaState,\n errors,\n status: {\n isCreateMutating,\n isUpdateMutating,\n },\n position,\n setValues,\n } as const;\n};\n\nexport type TPSLBuilderState = ReturnType<typeof useTPSLBuilder>;\n","import {\n ComputedAlgoOrder,\n useLocalStorage,\n utils,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { OrderSide, PositionType } from \"@orderly.network/types\";\nimport {\n Badge,\n Box,\n Checkbox,\n cn,\n Divider,\n Flex,\n Text,\n textVariants,\n} from \"@orderly.network/ui\";\nimport { transSymbolformString } from \"@orderly.network/utils\";\n\nexport type PositionTPSLConfirmProps = {\n symbol: string;\n qty: number;\n tpPrice?: number;\n slPrice?: number;\n maxQty: number;\n side: OrderSide;\n // symbolConfig:API.SymbolExt\n baseDP: number;\n quoteDP: number;\n isEditing?: boolean;\n isPositionTPSL?: boolean;\n orderInfo: ComputedAlgoOrder;\n};\n\nconst TPSLOrderType = (props: { tpPrice?: number; slPrice?: number }) => {\n const { tpPrice, slPrice } = props;\n const { t } = useTranslation();\n\n if (!!tpPrice && !!slPrice) {\n return (\n <Badge size=\"xs\" color=\"neutral\">\n {t(\"common.tpsl\")}\n </Badge>\n );\n }\n\n if (!!tpPrice) {\n return (\n <Badge size=\"xs\" color=\"neutral\">\n {t(\"tpsl.tp\")}\n </Badge>\n );\n }\n\n if (!!slPrice) {\n return (\n <Badge size=\"xs\" color=\"neutral\">\n {t(\"tpsl.sl\")}\n </Badge>\n );\n }\n\n return null;\n};\n\n// ------------ Position TP/SL Confirm dialog start------------\nexport const PositionTPSLConfirm = (props: PositionTPSLConfirmProps) => {\n const {\n symbol,\n tpPrice,\n slPrice,\n qty,\n maxQty,\n side,\n quoteDP,\n baseDP,\n isEditing,\n isPositionTPSL: _isPositionTPSL,\n orderInfo: order,\n } = props;\n const { t } = useTranslation();\n\n const [needConfirm, setNeedConfirm] = useLocalStorage(\n \"orderly_order_confirm\",\n true,\n );\n const renderPositionType = () => {\n if (order.position_type === PositionType.FULL) {\n return <Text>{t(\"tpsl.positionType.full\")}</Text>;\n }\n return <Text>{t(\"tpsl.positionType.partial\")}</Text>;\n };\n // console.log(\"PositionTPSLConfirm\", qty, maxQty, quoteDP);\n\n const renderTPSLPrice = ({\n price,\n isOrderPrice,\n isEnable,\n colorType,\n }: {\n price: string | number;\n isOrderPrice?: boolean;\n isEnable?: boolean;\n colorType: \"TP\" | \"SL\";\n }) => {\n if (!isEnable) {\n return <Text className=\"oui-text-base-contrast-36\">-- USDC</Text>;\n }\n if (!price) {\n if (isOrderPrice) {\n return (\n <Text className=\"oui-text-base-contrast-36\">\n {t(\"common.market\")}\n </Text>\n );\n }\n }\n return (\n <Text.numeral\n unit={\"USDC\"}\n rule={\"price\"}\n className={cn(\n \"oui-text-base-contrast\",\n colorType === \"TP\" ? \"oui-text-trade-profit\" : \"oui-text-trade-loss\",\n )}\n unitClassName={\"oui-text-base-contrast-36 oui-ml-1\"}\n dp={quoteDP}\n padding={false}\n >\n {price}\n </Text.numeral>\n );\n };\n\n const isPositionTPSL = _isPositionTPSL;\n\n return (\n <>\n {isEditing && (\n <Text as=\"div\" size=\"2xs\" intensity={80} className=\"oui-mb-3\">\n {t(\"tpsl.agreement\", { symbol: transSymbolformString(symbol) })}\n </Text>\n )}\n\n <Flex pb={4}>\n <Box grow>\n <Text.formatted\n rule={\"symbol\"}\n formatString=\"base-type\"\n size=\"base\"\n showIcon\n as=\"div\"\n intensity={80}\n >\n {symbol}\n </Text.formatted>\n </Box>\n <Flex gap={1}>\n {isPositionTPSL && (\n <Badge size=\"xs\" color={\"primary\"}>\n {t(\"common.position\")}\n </Badge>\n )}\n\n {/* <Badge size=\"xs\" color=\"neutral\">\n TP/SL\n </Badge> */}\n <TPSLOrderType tpPrice={tpPrice} slPrice={slPrice} />\n {side === OrderSide.SELL ? (\n <Badge size=\"xs\" color=\"success\">\n {t(\"common.buy\")}\n </Badge>\n ) : (\n <Badge size=\"xs\" color=\"danger\">\n {t(\"common.sell\")}\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider />\n {order.tp_trigger_price || order.sl_trigger_price ? (\n <>\n <Divider className=\"oui-my-4\" />\n <div\n className={textVariants({\n size: \"sm\",\n intensity: 54,\n className:\n \"oui-space-y-1 oui-w-full oui-flex oui-flex-col oui-gap-3\",\n })}\n >\n <Text className=\"oui-text-base-contrast\">\n {renderPositionType()}\n </Text>\n <Flex justify={\"between\"}>\n <Text>{t(\"common.orderQty\")}</Text>\n <Text.numeral\n rule={\"price\"}\n dp={baseDP}\n padding={false}\n className=\"oui-text-base-contrast\"\n >\n {order.quantity ?? \"-\"}\n </Text.numeral>\n </Flex>\n\n <Flex\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n gap={1}\n className=\"oui-w-full\"\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.tpTriggerPrice\")}</Text>{\" \"}\n {renderTPSLPrice({\n price: order.tp_trigger_price ?? \"\",\n isOrderPrice: false,\n isEnable: !!order.tp_trigger_price,\n colorType: \"TP\",\n })}\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.tpOrderPrice\")}</Text>\n {renderTPSLPrice({\n price: order.tp_order_price ?? \"\",\n isOrderPrice: true,\n isEnable: !!order.tp_trigger_price,\n colorType: \"TP\",\n })}\n </Flex>\n </Flex>\n\n <Flex\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n gap={1}\n className=\"oui-w-full\"\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.slTriggerPrice\")}</Text>\n {renderTPSLPrice({\n price: order.sl_trigger_price ?? \"\",\n isOrderPrice: false,\n isEnable: !!order.sl_trigger_price,\n colorType: \"SL\",\n })}\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.slOrderPrice\")}</Text>\n {renderTPSLPrice({\n price: order.sl_order_price ?? \"\",\n isOrderPrice: true,\n isEnable: !!order.sl_trigger_price,\n colorType: \"SL\",\n })}\n </Flex>\n </Flex>\n </div>\n </>\n ) : null}\n <Box pt={2}>\n <Flex gap={1}>\n <Checkbox\n id=\"disabledConfirm\"\n color=\"white\"\n checked={!needConfirm}\n onCheckedChange={(check) => {\n setNeedConfirm(!check);\n }}\n />\n <label\n htmlFor=\"disabledConfirm\"\n className={textVariants({\n size: \"xs\",\n intensity: 54,\n className: \"oui-ml-1\",\n })}\n >\n {t(\"orderEntry.disableOrderConfirm\")}\n </label>\n </Flex>\n </Box>\n </>\n );\n};\n\n//------------- Position TP/SL Confirm dialog end------------\n","import { useMemo } from \"react\";\nimport { useLocalStorage, useMarkPrice } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AlgoOrderRootType, API, PositionType } from \"@orderly.network/types\";\nimport {\n Flex,\n modal,\n useModal,\n Text,\n Box,\n Badge,\n Divider,\n toast,\n} from \"@orderly.network/ui\";\nimport { TPSLWidget, TPSLWidgetProps } from \"./positionTPSL\";\n\ntype TPSLSheetProps = {\n order?: API.AlgoOrder;\n // label: string;\n // baseDP?: number;\n // quoteDP?: number;\n symbolInfo: API.SymbolExt;\n isEditing?: boolean;\n};\n\nexport const PositionTPSLSheet = (props: TPSLWidgetProps & TPSLSheetProps) => {\n const { position, order, symbolInfo, isEditing } = props;\n const { resolve, hide, updateArgs } = useModal();\n\n const isPositionTPSL = isEditing\n ? order?.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n : undefined;\n\n return (\n <>\n <TPSLWidget\n {...props}\n positionType={\n props.positionType ??\n (isPositionTPSL ? PositionType.FULL : PositionType.PARTIAL)\n }\n onCancel={() => {\n hide();\n }}\n />\n </>\n );\n};\n","import { useEffect, useState, SVGProps } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n OrderlyOrder,\n OrderSide,\n OrderType,\n PositionType,\n} from \"@orderly.network/types\";\nimport {\n Button,\n cn,\n Divider,\n Flex,\n ScrollArea,\n Text,\n} from \"@orderly.network/ui\";\nimport { OrderInfo } from \"../components/orderInfo\";\nimport { PnlInfo } from \"../components/pnlInfo\";\nimport { TPSLInputRowWidget } from \"../components/tpslInputRow\";\nimport { TPSLPositionTypeWidget } from \"../components/tpslPostionType\";\nimport { useTPSLAdvanced } from \"./useTPSLAdvanced.script\";\n\ntype Props = ReturnType<typeof useTPSLAdvanced>;\n\nexport const TPSLAdvancedUI = (props: Props) => {\n const { t } = useTranslation();\n const { errors, validated } = props.metaState;\n\n const {\n formattedOrder,\n setValue: setOrderValue,\n symbolInfo,\n setValues,\n } = props;\n const [tpValues, setTpValuse] = useState<{\n enable: boolean;\n trigger_price: string;\n PnL: string;\n Offset: string;\n \"Offset%\": string;\n ROI: string;\n order_price: string;\n order_type: OrderType;\n }>({\n enable: true,\n order_type: formattedOrder.tp_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.tp_order_price ?? \"\",\n trigger_price: formattedOrder.tp_trigger_price ?? \"\",\n PnL: formattedOrder.tp_pnl ?? \"\",\n Offset: formattedOrder.tp_offset ?? \"\",\n \"Offset%\": formattedOrder.tp_offset_percentage ?? \"\",\n ROI: formattedOrder.tp_ROI ?? \"\",\n });\n\n const [slValues, setSlValues] = useState<{\n enable: boolean;\n trigger_price: string;\n PnL: string;\n Offset: string;\n \"Offset%\": string;\n ROI: string;\n order_price: string;\n order_type: OrderType;\n }>({\n enable: true,\n order_type: formattedOrder.sl_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.sl_order_price ?? \"\",\n trigger_price: formattedOrder.sl_trigger_price ?? \"\",\n PnL: formattedOrder.sl_pnl ?? \"\",\n Offset: formattedOrder.sl_offset ?? \"\",\n \"Offset%\": formattedOrder.sl_offset_percentage ?? \"\",\n ROI: formattedOrder.sl_ROI ?? \"\",\n });\n\n // Update tpValues when formattedOrder changes\n useEffect(() => {\n setTpValuse((prev) => ({\n ...prev,\n enable: formattedOrder.tp_enable ?? true,\n order_type: formattedOrder.tp_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.tp_order_price ?? \"\",\n trigger_price: formattedOrder.tp_trigger_price ?? \"\",\n PnL: formattedOrder.tp_pnl ?? \"\",\n Offset: formattedOrder.tp_offset ?? \"\",\n \"Offset%\": formattedOrder.tp_offset_percentage ?? \"\",\n ROI: formattedOrder.tp_ROI ?? \"\",\n }));\n }, [formattedOrder]);\n\n useEffect(() => {\n setSlValues((prev) => ({\n ...prev,\n enable: formattedOrder.sl_enable ?? true,\n order_type: formattedOrder.sl_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.sl_order_price ?? \"\",\n trigger_price: formattedOrder.sl_trigger_price ?? \"\",\n PnL: formattedOrder.sl_pnl ?? \"\",\n Offset: formattedOrder.sl_offset ?? \"\",\n \"Offset%\": formattedOrder.sl_offset_percentage ?? \"\",\n ROI: formattedOrder.sl_ROI ?? \"\",\n }));\n }, [formattedOrder]);\n\n return (\n <div className=\"oui-rounded-[16px] oui-py-3 oui-flex oui-flex-col oui-justify-between oui-h-full\">\n <div className=\"oui-px-3\">\n <Flex\n className=\"oui-mb-5 oui-cursor-pointer oui-text-base oui-text-base-contrast-80\"\n gap={1}\n itemAlign={\"center\"}\n onClick={props.onClose}\n >\n <ArrowRightIcon className=\" oui-text-base-contrast-80\" />\n <Text>{t(\"tpsl.advanced.title\")}</Text>\n </Flex>\n </div>\n <ScrollArea className=\"oui-flex-1\">\n <div className=\"oui-px-3\">\n <OrderInfo\n order={formattedOrder as OrderlyOrder}\n baseDP={symbolInfo.base_dp}\n quoteDP={symbolInfo.quote_dp}\n />\n </div>\n <Divider className=\"oui-my-3\" />\n <div className=\"oui-px-3\">\n <Flex className=\"oui-gap-[6px]\">\n <Button\n onClick={() => {\n setOrderValue(\"side\", OrderSide.BUY);\n }}\n size={\"sm\"}\n fullWidth\n data-type={OrderSide.BUY}\n // color={side === OrderSide.BUY ? \"buy\" : \"secondary\"}\n className={cn(\n formattedOrder.side === OrderSide.BUY\n ? \"oui-bg-success-darken hover:oui-bg-success-darken/80 active:oui-bg-success-darken/80\"\n : \"oui-bg-base-7 oui-text-base-contrast-36 hover:oui-bg-base-6 active:oui-bg-base-6\",\n )}\n data-testid=\"oui-testid-orderEntry-side-buy-button\"\n >\n {t(\"common.buy\")}\n </Button>\n <Button\n onClick={() => {\n setOrderValue(\"side\", OrderSide.SELL);\n }}\n data-type={OrderSide.SELL}\n fullWidth\n size={\"sm\"}\n // color={side === OrderSide.SELL ? \"sell\" : \"secondary\"}\n className={cn(\n formattedOrder.side === OrderSide.SELL\n ? \"oui-bg-danger-darken hover:oui-bg-danger-darken/80 active:oui-bg-danger-darken/80\"\n : \"oui-bg-base-7 oui-text-base-contrast-36 hover:oui-bg-base-6 active:oui-bg-base-6\",\n )}\n data-testid=\"oui-testid-orderEntry-side-sell-button\"\n >\n {t(\"common.sell\")}\n </Button>\n </Flex>\n <div className=\"oui-py-3\">\n <TPSLPositionTypeWidget\n value={formattedOrder.position_type ?? PositionType.PARTIAL}\n onChange={(key, value) => {\n // setOrderValue(\"position_type\", value);\n if (value === PositionType.FULL) {\n setValues({\n position_type: PositionType.FULL,\n tp_order_type: OrderType.MARKET,\n tp_order_price: undefined,\n sl_order_type: OrderType.MARKET,\n sl_order_price: undefined,\n });\n // setOrderValue(\"tp_order_type\", OrderType.MARKET);\n // setOrderValue(\"sl_order_type\", OrderType.MARKET);\n return;\n }\n setOrderValue(\"position_type\", value);\n }}\n />\n {formattedOrder.position_type === PositionType.FULL && (\n <Flex\n justify={\"start\"}\n itemAlign={\"start\"}\n gap={2}\n className=\"oui-mt-3 oui-w-full\"\n >\n <div className=\"oui-relative oui-top-[7px] oui-size-1 oui-rounded-full oui-bg-[#D25f00]\" />\n <Text className=\"oui-text-2xs oui-text-[#D25f00]\">\n {t(\"tpsl.positionType.full.tips.market\")}\n </Text>\n </Flex>\n )}\n </div>\n <Flex direction={\"column\"} gap={6}>\n <TPSLInputRowWidget\n rootOrderPrice={formattedOrder.order_price}\n symbol={symbolInfo.symbol}\n type=\"tp\"\n values={tpValues}\n errors={validated ? errors : null}\n quote_dp={symbolInfo.quote_dp}\n hideOrderPrice={\n formattedOrder.position_type === PositionType.FULL\n }\n onChange={(key, value) => {\n console.log(\"key\", key, \"value\", value);\n // setTpValuse((prev) => ({ ...prev, [key]: value }));\n setOrderValue(key as keyof OrderlyOrder, value);\n }}\n positionType={\n formattedOrder.position_type ?? PositionType.PARTIAL\n }\n />\n <TPSLInputRowWidget\n rootOrderPrice={formattedOrder.order_price}\n symbol={symbolInfo.symbol}\n type=\"sl\"\n values={slValues}\n hideOrderPrice={\n formattedOrder.position_type === PositionType.FULL\n }\n errors={validated ? errors : null}\n quote_dp={symbolInfo.quote_dp}\n positionType={\n formattedOrder.position_type ?? PositionType.PARTIAL\n }\n onChange={(key, value) => {\n setOrderValue(key as keyof OrderlyOrder, value);\n }}\n />\n </Flex>\n\n <PnlInfo\n tp_pnl={formattedOrder.tp_pnl}\n sl_pnl={formattedOrder.sl_pnl}\n className=\"oui-mt-6\"\n />\n </div>\n </ScrollArea>\n <Flex className=\"oui-mt-6 oui-px-3\" gap={2}>\n <Button\n size=\"md\"\n fullWidth\n color=\"gray\"\n variant=\"outlined\"\n className=\"oui-text-base-contrast-36\"\n onClick={props.onClose}\n >\n {t(\"common.cancel\")}\n </Button>\n <Button\n size=\"md\"\n fullWidth\n color=\"success\"\n className={cn(\n formattedOrder.side === OrderSide.SELL\n ? \"oui-bg-danger-darken hover:oui-bg-danger-darken/80 active:oui-bg-danger-darken/80\"\n : \"oui-bg-success-darken hover:oui-bg-success-darken/80 active:oui-bg-success-darken/80\",\n )}\n onClick={props.onSubmit}\n >\n {t(\"tpsl.advanced.submit\")}\n </Button>\n </Flex>\n </div>\n );\n};\n\nexport const ArrowRightIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M8.03752 2.9294C7.89169 2.95857 7.74527 3.03207 7.65661 3.16624L5.33145 6.66624C5.20137 6.86224 5.20137 7.12648 5.33145 7.32248L7.65661 10.8225C7.83452 11.0902 8.20669 11.1655 8.47385 10.9864C8.74044 10.8079 8.8151 10.434 8.63719 10.1662L6.53019 6.99408L8.63719 3.82249C8.8151 3.55416 8.74044 3.18082 8.47385 3.00232C8.34027 2.91249 8.18335 2.89965 8.03752 2.9294Z\" />\n </svg>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { OrderValidationResult, useOrderEntry } from \"@orderly.network/hooks\";\nimport { OrderlyOrder, OrderType, PositionType } from \"@orderly.network/types\";\n\ntype Props = {\n order: OrderlyOrder;\n setOrderValue: (key: string, value: any) => void;\n onSubmit: (formattedOrder: OrderlyOrder) => void;\n onClose: () => void;\n};\n\nconst isTPSLEnable = (order: OrderlyOrder, type: \"tp\" | \"sl\") => {\n if (order.tp_trigger_price || order.sl_trigger_price) {\n if (type === \"tp\") {\n return !!order.tp_trigger_price;\n }\n if (type === \"sl\") {\n return !!order.sl_trigger_price;\n }\n }\n // no edit, enable tp /sl\n return true;\n};\n\nexport const useTPSLAdvanced = (props: Props) => {\n const { order, setOrderValue, onClose } = props;\n const [innerMetaState, setInnerMetaState] =\n useState<OrderValidationResult | null>(null);\n const {\n formattedOrder,\n setValue,\n setValues,\n helper,\n symbolInfo,\n metaState,\n ...state\n } = useOrderEntry(order.symbol, {\n initialOrder: {\n symbol: order.symbol,\n order_type: order.order_type,\n side: order.side,\n order_price: order.order_price,\n order_quantity: order.order_quantity,\n position_type: order.position_type ?? PositionType.PARTIAL,\n trigger_price: order.trigger_price,\n tp_enable: isTPSLEnable(order, \"tp\"),\n sl_enable: isTPSLEnable(order, \"sl\"),\n tp_trigger_price: order.tp_trigger_price,\n sl_trigger_price: order.sl_trigger_price,\n tp_order_price: order.tp_order_price,\n sl_order_price: order.sl_order_price,\n tp_order_type: order.tp_order_type,\n sl_order_type: order.sl_order_type,\n sl_pnl: order.sl_pnl,\n sl_offset: order.sl_offset,\n sl_offset_percentage: order.sl_offset_percentage,\n tp_pnl: order.tp_pnl,\n tp_offset: order.tp_offset,\n tp_offset_percentage: order.tp_offset_percentage,\n },\n });\n\n const onSubmit = () => {\n helper\n .validate()\n .then(() => {\n props.onSubmit(formattedOrder as OrderlyOrder);\n })\n .catch((err) => {\n console.log(\"metaState\", metaState);\n console.log(\"err\", err);\n });\n };\n\n return {\n order,\n formattedOrder,\n symbolInfo,\n setValue,\n setValues,\n onSubmit,\n onClose,\n metaState,\n };\n};\n","import { i18n } from \"@orderly.network/i18n\";\nimport { OrderlyOrder } from \"@orderly.network/types\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { TPSLAdvancedUI } from \"./tpslAdvanced.ui\";\nimport { useTPSLAdvanced } from \"./useTPSLAdvanced.script\";\n\ntype Props = {\n order: OrderlyOrder;\n setOrderValue: (key: string, value: any) => void;\n onSubmit: (formattedOrder: OrderlyOrder) => void;\n onClose: () => void;\n};\n\nexport const TPSLAdvancedWidget = (props: Props) => {\n const state = useTPSLAdvanced({\n order: props.order,\n setOrderValue: props.setOrderValue,\n onSubmit: props.onSubmit,\n onClose: props.onClose,\n });\n return <TPSLAdvancedUI {...state} />;\n};\n\nexport const TPSLAdvancedSheetId = \"TPSLAdvancedSheetId\";\nexport const TPSLAdvancedDialogId = \"TPSLAdvancedDialogId\";\n\nregisterSimpleSheet(TPSLAdvancedSheetId, TPSLAdvancedWidget, {\n title: () => i18n.t(\"common.settings\"),\n});\n\nregisterSimpleDialog(TPSLAdvancedDialogId, TPSLAdvancedWidget, {\n title: () => i18n.t(\"common.settings\"),\n});\n","import { AlgoOrder, API } from \"@orderly.network/types\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { useTPSLDetail } from \"./tpslDetail.script\";\nimport { TPSLDetailProvider } from \"./tpslDetailProvider\";\nimport { TPSLDetailUI } from \"./tsplDetail.ui\";\n\nexport type TPSLDetailProps = {\n position: API.Position;\n order: AlgoOrder;\n baseDP: number;\n quoteDP: number;\n};\n\nexport const TPSLDetailWidget = (props: TPSLDetailProps) => {\n const state = useTPSLDetail(props);\n return (\n <TPSLDetailProvider\n symbol={props.position.symbol}\n position={props.position}\n >\n <TPSLDetailUI {...state} />\n </TPSLDetailProvider>\n );\n};\nexport const TPSLDetailDialogId = \"TPSLDetailDialogId \";\nexport const TPSLDetailSheetId = \"TPSLDetailSheetId\";\nregisterSimpleDialog(TPSLDetailDialogId, TPSLDetailWidget, {\n classNames: {\n content: \"oui-w-[420px] lg:oui-pt-4 lg:oui-pb-2 !oui-px-0\",\n body: \"lg:oui-py-0\",\n },\n});\n\nregisterSimpleSheet(TPSLDetailSheetId, TPSLDetailWidget, {\n classNames: {\n content: \"!oui-p-0\",\n },\n});\n","import { useEffect, useState } from \"react\";\nimport {\n ComputedAlgoOrder,\n findPositionTPSLFromOrders,\n findTPSLFromOrder,\n useLocalStorage,\n useOrderStream,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n AlgoOrder,\n AlgoOrderRootType,\n API,\n OrderStatus,\n PositionType,\n} from \"@orderly.network/types\";\nimport { modal, toast, useScreen } from \"@orderly.network/ui\";\nimport { TPSLDialogId, TPSLSheetId } from \"../positionTPSL/tpsl.widget\";\nimport { TPSLDetailProps } from \"./tpslDetail.widget\";\n\nexport const useTPSLDetail = (props: TPSLDetailProps) => {\n const { position } = props;\n const symbol = position.symbol;\n const symbolInfo = useSymbolsInfo()[symbol];\n\n const { isMobile } = useScreen();\n const { t } = useTranslation();\n const [fullPositionOrders, setFullPositionOrders] = useState<API.AlgoOrder[]>(\n [],\n );\n const [partialPositionOrders, setPartialPositionOrders] = useState<\n API.AlgoOrder[]\n >([]);\n\n const [tpslOrders, { cancelAlgoOrder, cancelPostionOrdersByTypes, refresh }] =\n useOrderStream(\n {\n symbol: position.symbol,\n status: OrderStatus.INCOMPLETE,\n includes: [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL],\n size: 500,\n },\n {\n keeplive: true,\n },\n );\n\n const onCancelOrder = async (order: API.AlgoOrder) => {\n return await cancelAlgoOrder(order.algo_order_id, order.symbol);\n };\n const onCancelAllTPSLOrders = async () => {\n return await cancelPostionOrdersByTypes(symbol, [AlgoOrderRootType.TP_SL]);\n };\n\n const showTPSLDialog = ({\n order,\n positionType,\n isEditing,\n }: {\n order?: API.AlgoOrder;\n positionType: PositionType;\n isEditing: boolean;\n }) => {\n const dialogId = isMobile ? TPSLSheetId : TPSLDialogId;\n modal.show(dialogId, {\n order: order,\n symbol: position.symbol,\n positionType,\n isEditing,\n });\n };\n\n const editTPSLOrder = (order: API.AlgoOrder, positionType: PositionType) => {\n showTPSLDialog({ order, positionType, isEditing: true });\n };\n\n const addTPSLOrder = (positionType: PositionType) => {\n showTPSLDialog({ positionType, isEditing: false });\n };\n\n useEffect(() => {\n if (tpslOrders) {\n const { fullPositionOrder, partialPositionOrders } =\n findPositionTPSLFromOrders(tpslOrders, symbol);\n\n setFullPositionOrders(fullPositionOrder ? [fullPositionOrder] : []);\n setPartialPositionOrders(partialPositionOrders ?? []);\n }\n }, [tpslOrders, symbol]);\n\n return {\n symbolInfo,\n position,\n symbol,\n fullPositionOrders,\n partialPositionOrders,\n cancelPostionOrdersByTypes,\n onCancelOrder,\n onCancelAllTPSLOrders,\n editTPSLOrder,\n addTPSLOrder,\n };\n};\n\nexport type TPSLDetailState = ReturnType<typeof useTPSLDetail>;\n","import { createContext, PropsWithChildren, useContext } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\n\nexport interface TPSLDetailContextState {\n base_dp: number;\n quote_dp: number;\n position: API.Position;\n}\n\nexport const TPSLDetailContext = createContext({} as TPSLDetailContextState);\n\ninterface TPSLDetailProviderProps {\n symbol: string;\n position: API.Position;\n}\n\nexport const TPSLDetailProvider = (\n props: PropsWithChildren<TPSLDetailProviderProps>,\n) => {\n const symbolInfo = useSymbolsInfo()[props.symbol];\n return (\n <TPSLDetailContext.Provider\n value={{\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n position: props.position,\n }}\n >\n {props.children}\n </TPSLDetailContext.Provider>\n );\n};\n\nexport const useTPSLDetailContext = () => {\n return useContext(TPSLDetailContext);\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, PositionType } from \"@orderly.network/types\";\nimport {\n Box,\n ChevronDownIcon,\n cn,\n ExclamationFillIcon,\n Flex,\n Text,\n toast,\n Tooltip,\n ThrottledButton,\n useScreen,\n ScrollArea,\n} from \"@orderly.network/ui\";\nimport { OrderInfo } from \"../components/orderInfo\";\nimport { OrdersTable } from \"./ordersTable\";\nimport { OrdersTableMobile } from \"./ordersTable.mobile\";\nimport { TPSLDetailState } from \"./tpslDetail.script\";\n\nexport const TPSLDetailUI = (props: TPSLDetailState) => {\n const { isMobile } = useScreen();\n const {\n position,\n fullPositionOrders,\n partialPositionOrders,\n onCancelOrder,\n onCancelAllTPSLOrders,\n editTPSLOrder,\n addTPSLOrder,\n symbolInfo,\n } = props;\n\n return (\n <Box>\n <ScrollArea className={cn(isMobile && \"oui-h-[calc(100vh-100px)]\")}>\n <OrderInfo\n order={{\n symbol: position.symbol,\n order_quantity: position.position_qty.toString(),\n order_price: position.average_open_price.toString(),\n }}\n baseDP={symbolInfo(\"base_dp\")}\n quoteDP={symbolInfo(\"quote_dp\")}\n classNames={{\n root: cn(\"oui-mb-6 oui-gap-3 oui-px-5\"),\n container: \"oui-gap-x-[30px]\",\n }}\n />\n <FullPositionPart\n position={position}\n orders={fullPositionOrders}\n onCancelOrder={onCancelOrder}\n onCancelAllTPSLOrders={onCancelAllTPSLOrders}\n editTPSLOrder={editTPSLOrder}\n addTPSLOrder={addTPSLOrder}\n />\n <PartialPositionPart\n position={position}\n orders={partialPositionOrders}\n onCancelOrder={onCancelOrder}\n onCancelAllTPSLOrders={onCancelAllTPSLOrders}\n editTPSLOrder={editTPSLOrder}\n addTPSLOrder={addTPSLOrder}\n />\n </ScrollArea>\n </Box>\n );\n};\n\nconst FullPositionPart = (props: {\n orders: API.AlgoOrder[];\n onCancelOrder: (order: API.AlgoOrder) => Promise<void>;\n onCancelAllTPSLOrders: () => Promise<void>;\n position: API.Position;\n editTPSLOrder: (order: API.AlgoOrder, positionType: PositionType) => void;\n addTPSLOrder: (positionType: PositionType) => void;\n}) => {\n const [open, setOpen] = useState(true);\n const { orders } = props;\n const { isMobile } = useScreen();\n return (\n <Box className=\"oui-mt-6\">\n <Box\n className={cn(\"oui-flex oui-items-center oui-justify-between oui-px-5\")}\n >\n <PositionTypeDescription\n positionType={PositionType.FULL}\n open={open}\n onOpenChange={setOpen}\n />\n {orders && orders.length === 0 && (\n <Flex gap={2}>\n <AddButton\n positionType={PositionType.FULL}\n position={props.position}\n addTPSLOrder={props.addTPSLOrder}\n />\n </Flex>\n )}\n </Box>\n\n <Box\n className={cn(\n \"oui-overflow-hidden oui-transition-[height] oui-duration-150\",\n open ? \"oui-h-auto\" : \"oui-h-0 oui-pb-4\",\n )}\n >\n {isMobile ? (\n <OrdersTableMobile\n orders={orders}\n editTPSLOrder={(order) =>\n props.editTPSLOrder(order, PositionType.FULL)\n }\n canCancelOrder={props.onCancelOrder}\n />\n ) : (\n <OrdersTable\n orders={orders}\n editTPSLOrder={(order) => {\n props.editTPSLOrder(order, PositionType.FULL);\n }}\n onCancelOrder={props.onCancelOrder}\n />\n )}\n </Box>\n </Box>\n );\n};\n\nconst PartialPositionPart = (props: {\n position: API.Position;\n orders: API.AlgoOrder[];\n onCancelOrder: (order: API.AlgoOrder) => Promise<void>;\n onCancelAllTPSLOrders: () => Promise<void>;\n editTPSLOrder: (order: API.AlgoOrder, positionType: PositionType) => void;\n addTPSLOrder: (positionType: PositionType) => void;\n}) => {\n const [open, setOpen] = useState(true);\n const { orders } = props;\n const { isMobile } = useScreen();\n return (\n <Box className=\"oui-pt-6\">\n <Box\n className={cn(\n \"oui-flex oui-items-center oui-justify-between\",\n \"oui-px-5\",\n isMobile\n ? \"oui-flex-col oui-items-start oui-justify-start oui-gap-[11px]\"\n : \"oui-flex-row oui-items-center oui-justify-between\",\n )}\n >\n <PositionTypeDescription\n positionType={PositionType.PARTIAL}\n open={open}\n onOpenChange={setOpen}\n />\n <Flex gap={2}>\n <AddButton\n positionType={PositionType.PARTIAL}\n position={props.position}\n addTPSLOrder={props.addTPSLOrder}\n />\n {orders && orders.length > 0 && (\n <CancelAllBtn\n canCancelAll={orders && orders.length > 0}\n onCancelAllTPSLOrders={props.onCancelAllTPSLOrders}\n />\n )}\n </Flex>\n </Box>\n <Box\n className={cn(\n \"oui-overflow-hidden oui-transition-[height] oui-duration-150\",\n open ? \"oui-h-auto\" : \"oui-h-0 oui-pb-4\",\n )}\n >\n {isMobile ? (\n <OrdersTableMobile\n orders={orders}\n editTPSLOrder={(order) =>\n props.editTPSLOrder(order, PositionType.PARTIAL)\n }\n canCancelOrder={props.onCancelOrder}\n />\n ) : (\n <OrdersTable\n className=\"oui-h-[300px]\"\n orders={orders}\n editTPSLOrder={(order) => {\n props.editTPSLOrder(order, PositionType.PARTIAL);\n }}\n onCancelOrder={props.onCancelOrder}\n />\n )}\n </Box>\n </Box>\n );\n};\n\nconst PositionTypeDescription = (props: {\n positionType: PositionType;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}) => {\n const { t } = useTranslation();\n return (\n <Flex\n gap={1}\n itemAlign={\"center\"}\n justify={\"start\"}\n className=\"oui-text-2xs\"\n >\n <Flex\n itemAlign={\"center\"}\n justify={\"start\"}\n gap={1}\n className=\"oui-cursor-pointer\"\n onClick={() => props.onOpenChange(!props.open)}\n >\n <ChevronDownIcon\n size={12}\n color=\"white\"\n className={cn(\n \"oui-cursor-pointer oui-transition-transform\",\n props.open && \"oui-rotate-180\",\n )}\n />\n {props.positionType === PositionType.FULL ? (\n <Text>{t(\"tpsl.positionType.full\")}</Text>\n ) : (\n <Text>{t(\"tpsl.positionType.partial\")}</Text>\n )}\n </Flex>\n <Tooltip\n className=\"oui-w-[280px] oui-p-3\"\n content={\n props.positionType === PositionType.FULL\n ? t(\"tpsl.positionType.full.tips\")\n : t(\"tpsl.positionType.partial.tips\")\n }\n >\n <ExclamationFillIcon\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={12}\n />\n </Tooltip>\n </Flex>\n );\n};\n\nexport const AddButton = (props: {\n positionType: PositionType;\n position: API.Position;\n addTPSLOrder: (positionType: PositionType) => void;\n}) => {\n const { t } = useTranslation();\n const onAdd = () => {\n props.addTPSLOrder(props.positionType);\n };\n return (\n <ThrottledButton\n variant=\"outlined\"\n size=\"sm\"\n color=\"gray\"\n className=\"oui-h-6 oui-w-[94px] oui-text-2xs\"\n onClick={onAdd}\n >\n {t(\"tpsl.add\")}\n </ThrottledButton>\n );\n};\n\nexport const CancelAllBtn = (props: {\n onCancelAllTPSLOrders: () => Promise<void>;\n canCancelAll: boolean;\n}) => {\n const [loading, setLoading] = useState(false);\n const { t } = useTranslation();\n return (\n <ThrottledButton\n loading={loading}\n variant=\"outlined\"\n disabled={!props.canCancelAll}\n size=\"sm\"\n color=\"gray\"\n className=\"oui-h-6 oui-w-[94px] oui-text-2xs disabled:oui-border-base-contrast-16 disabled:oui-bg-transparent disabled:oui-text-base-contrast-20\"\n onClick={() => {\n setLoading(true);\n props\n .onCancelAllTPSLOrders()\n .then(\n () => {},\n (error) => {\n toast.error(error.message);\n },\n )\n .finally(() => {\n setLoading(false);\n });\n }}\n >\n {t(\"tpsl.cancelAll\")}\n </ThrottledButton>\n );\n};\n","import { API } from \"@orderly.network/types\";\nimport { cn, ScrollArea } from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { useColumn } from \"./useColum\";\n\nexport const OrdersTable = (props: {\n className?: string;\n orders: API.AlgoOrder[];\n editTPSLOrder: (order: API.AlgoOrder) => void;\n onCancelOrder: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const { orders } = props;\n const columns = useColumn({ onCancelOrder: props.onCancelOrder });\n return (\n // <ScrollArea className={cn( props.className)}>\n\n <AuthGuardDataTable\n columns={columns}\n dataSource={orders}\n className=\"oui-bg-transparent oui-text-2xs\"\n bordered\n classNames={{\n root: cn(props.className),\n header: \"!oui-bg-base-8\",\n scroll: cn(\n !orders || orders.length === 0\n ? \"!oui-min-h-[170px]\"\n : \"!oui-min-h-[100px]\",\n ),\n }}\n onRow={(record) => {\n return {\n className: cn(\n \"oui-h-[53px] oui-cursor-svg-edit !oui-border-none !oui-p-0\",\n ),\n onClick: () => {\n props.editTPSLOrder(record);\n },\n };\n }}\n />\n // </ScrollArea>\n );\n};\n","import { FC, SVGProps, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n cn,\n Flex,\n Text,\n ThrottledButton,\n toast,\n Tooltip,\n useScreen,\n} from \"@orderly.network/ui\";\nimport { EstPnlRender } from \"./components/estPnl\";\nimport { OrderPriceRender } from \"./components/orderPrice\";\nimport { QtyRender } from \"./components/qty\";\nimport { TriggerPrice } from \"./components/triggerPrice\";\nimport { TypeRender } from \"./components/type\";\n\nexport const useColumn = (props: {\n onCancelOrder?: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n const { onCancelOrder } = props;\n\n const columns = useMemo(() => {\n const moblieColumns = [\n {\n title: t(\"tpsl.tpslDetail.qty\"),\n dataIndex: \"quantity\",\n width: 70,\n className: \"oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <QtyRender order={record} />\n ),\n },\n {\n title: t(\"tpsl.tpslDetail.type\"),\n dataIndex: \"type\",\n width: 35,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <TypeRender order={record} />\n ),\n },\n {\n title: t(\"tpsl.tpslDetail.trigger\"),\n dataIndex: \"trigger\",\n width: 70,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => {\n return <TriggerPrice order={record} />;\n },\n },\n {\n title: t(\"tpsl.tpslDetail.price\"),\n dataIndex: \"price\",\n width: 70,\n className: \"oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <OrderPriceRender order={record} />\n ),\n },\n\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast\"\n content={t(\"tpsl.tpslDetail.estPnl.tooltip\")}\n >\n <Text className=\"oui-underline oui-decoration-dashed oui-underline-offset-2\">\n {t(\"tpsl.tpslDetail.estPnl\")}\n </Text>\n </Tooltip>\n ),\n dataIndex: \"estpnl\",\n width: 70,\n className: \"!oui-pr-0 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <EstPnlRender order={record} />\n ),\n },\n ];\n const desktopColums = [\n {\n title: t(\"tpsl.tpslDetail.qty\"),\n dataIndex: \"quantity\",\n width: 70,\n className: cn(\" oui-py-2 !oui-pl-5\"),\n render: (_: string, record: API.AlgoOrder) => (\n <QtyRender order={record} />\n ),\n },\n {\n title: t(\"tpsl.tpslDetail.type\"),\n dataIndex: \"type\",\n width: 35,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <TypeRender order={record} />\n ),\n },\n {\n title: t(\"tpsl.tpslDetail.trigger\"),\n dataIndex: \"trigger\",\n width: 70,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => {\n return <TriggerPrice order={record} />;\n },\n },\n {\n title: t(\"tpsl.tpslDetail.price\"),\n dataIndex: \"price\",\n width: 70,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <OrderPriceRender order={record} />\n ),\n },\n\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast\"\n content={t(\"tpsl.tpslDetail.estPnl.tooltip\")}\n >\n <Text className=\"oui-underline oui-decoration-dashed oui-underline-offset-2\">\n {t(\"tpsl.tpslDetail.estPnl\")}\n </Text>\n </Tooltip>\n ),\n dataIndex: \"estpnl\",\n width: 70,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <EstPnlRender order={record} />\n ),\n },\n {\n title: \"\",\n dataIndex: \"delete\",\n width: 50,\n className: cn(\"oui-py-2 !oui-pr-5\"),\n render: (_: any, record: API.AlgoOrder) => {\n return <CancelAllBtn order={record} onCancelOrder={onCancelOrder} />;\n },\n },\n ];\n if (isMobile) {\n return moblieColumns;\n }\n return desktopColums;\n }, [t, isMobile]);\n return columns;\n};\n\nexport const FlexCell = (props: { children: React.ReactNode }) => {\n return (\n <Flex\n direction={\"column\"}\n justify={\"center\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs oui-h-[36px]\"\n >\n {props.children}\n </Flex>\n );\n};\n\nexport interface IconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\nconst DeleteIcon: FC<IconProps> = (props) => {\n const { size = 18 } = props;\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 18 18\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M5.48081 15.375C5.10681 15.375 4.78731 15.2426 4.52231 14.9777C4.25744 14.7127 4.125 14.3932 4.125 14.0192V4.50004H3.375V3.37505H6.75V2.71167H11.25V3.37505H14.625V4.50004H13.875V14.0192C13.875 14.3981 13.7438 14.7188 13.4813 14.9813C13.2188 15.2438 12.8981 15.375 12.5192 15.375H5.48081ZM12.75 4.50004H5.25V14.0192C5.25 14.0866 5.27162 14.1419 5.31487 14.1852C5.35812 14.2284 5.41344 14.25 5.48081 14.25H12.5192C12.5769 14.25 12.6298 14.226 12.6778 14.1779C12.7259 14.1299 12.75 14.077 12.75 14.0192V4.50004ZM7.053 12.75H8.17781V6.00004H7.053V12.75ZM9.82219 12.75H10.947V6.00004H9.82219V12.75Z\" />\n </svg>\n );\n};\n\nexport const CancelAllBtn = (props: {\n order: API.AlgoOrder;\n onCancelOrder?: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const [loading, setLoading] = useState(false);\n return (\n <ThrottledButton\n size=\"sm\"\n loading={loading}\n variant=\"text\"\n color=\"gray\"\n onClick={(e) => {\n e.stopPropagation();\n console.log(\"delete\");\n setLoading(true);\n props\n .onCancelOrder?.(props.order)\n .then(\n () => {},\n (error) => {\n toast.error(error.message);\n },\n )\n .finally(() => {\n setLoading(false);\n });\n }}\n >\n <DeleteIcon className=\"oui-text-base-contrast-54 hover:oui-text-base-contrast oui-cursor-pointer\" />\n </ThrottledButton>\n );\n};\n","import { findTPSLFromOrder } from \"@orderly.network/hooks\";\nimport { positions as perpPositions } from \"@orderly.network/perp\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FlexCell } from \"../components/common\";\nimport { useTPSLDetailContext } from \"../tpslDetailProvider\";\n\nexport const EstPnlRender = ({ order }: { order: API.AlgoOrder }) => {\n const { position, base_dp, quote_dp } = useTPSLDetailContext();\n const { tp_trigger_price, sl_trigger_price } = findTPSLFromOrder(order);\n\n let tp_unrealPnl = undefined;\n let sl_unrealPnl = undefined;\n const qty = new Decimal(order.quantity).eq(0)\n ? position.position_qty\n : order.quantity;\n if (tp_trigger_price) {\n tp_unrealPnl = new Decimal(\n perpPositions.unrealizedPnL({\n qty,\n openPrice: position?.average_open_price,\n // markPrice: unRealizedPrice,\n markPrice: tp_trigger_price,\n }),\n )\n .abs()\n .toNumber();\n }\n\n if (sl_trigger_price) {\n sl_unrealPnl = new Decimal(\n perpPositions.unrealizedPnL({\n qty: qty,\n openPrice: position?.average_open_price,\n // markPrice: unRealizedPrice,\n markPrice: sl_trigger_price,\n }),\n )\n .abs()\n .mul(-1)\n .toNumber();\n }\n return (\n <Flex\n gap={2}\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {tp_unrealPnl && (\n <FlexCell>\n <Text.numeral dp={2} rm={Decimal.ROUND_DOWN} coloring padding={false}>\n {tp_unrealPnl}\n </Text.numeral>\n </FlexCell>\n )}\n {sl_unrealPnl && (\n <FlexCell>\n <Text.numeral dp={2} rm={Decimal.ROUND_DOWN} coloring padding={false}>\n {sl_unrealPnl}\n </Text.numeral>\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { Flex } from \"@orderly.network/ui\";\n\nexport const FlexCell = (props: { children: React.ReactNode }) => {\n return (\n <Flex\n direction={\"column\"}\n justify={\"center\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs oui-h-[36px]\"\n >\n {props.children}\n </Flex>\n );\n};\n","import { findTPSLOrderPriceFromOrder } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, OrderType } from \"@orderly.network/types\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FlexCell } from \"../components/common\";\nimport { useTPSLDetailContext } from \"../tpslDetailProvider\";\n\nexport const OrderPriceRender = ({ order }: { order: API.AlgoOrder }) => {\n const { quote_dp } = useTPSLDetailContext();\n const { tp_order_price, sl_order_price } = findTPSLOrderPriceFromOrder(order);\n const { t } = useTranslation();\n return (\n <Flex\n gap={2}\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {tp_order_price && (\n <FlexCell>\n {tp_order_price === OrderType.MARKET ? (\n <Text>{t(\"common.market\")}</Text>\n ) : (\n <Text.numeral dp={quote_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {tp_order_price}\n </Text.numeral>\n )}\n </FlexCell>\n )}\n {sl_order_price && (\n <FlexCell>\n {sl_order_price === OrderType.MARKET ? (\n <Text>{t(\"common.market\")}</Text>\n ) : (\n <Text.numeral dp={quote_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {sl_order_price}\n </Text.numeral>\n )}\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { findTPSLFromOrder } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FlexCell } from \"../components/common\";\nimport { useTPSLDetailContext } from \"../tpslDetailProvider\";\n\nexport const QtyRender = ({ order }: { order: API.AlgoOrder }) => {\n const { position, base_dp } = useTPSLDetailContext();\n const { tp_trigger_price, sl_trigger_price } = findTPSLFromOrder(order);\n return (\n <Flex\n direction={\"column\"}\n justify={\"start\"}\n itemAlign={\"start\"}\n className=\"oui-h-full oui-text-2xs\"\n >\n <FlexCell>\n <Text.numeral dp={base_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {order.quantity === 0 ? position.position_qty : order.quantity}\n </Text.numeral>\n </FlexCell>\n {tp_trigger_price && sl_trigger_price && (\n <FlexCell>\n <div />\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { findTPSLFromOrder } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FlexCell } from \"../components/common\";\nimport { useTPSLDetailContext } from \"../tpslDetailProvider\";\n\nexport const TriggerPrice = ({ order }: { order: API.AlgoOrder }) => {\n const { quote_dp } = useTPSLDetailContext();\n const { tp_trigger_price, sl_trigger_price } = findTPSLFromOrder(order);\n const { t } = useTranslation();\n return (\n <Flex\n gap={1}\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {tp_trigger_price && (\n <FlexCell>\n <Flex direction={\"column\"} justify={\"start\"} itemAlign={\"start\"}>\n <Text className=\"oui-text-base-contrast-36\">\n {t(\"common.market\")}\n </Text>\n <Text.numeral dp={quote_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {tp_trigger_price}\n </Text.numeral>\n </Flex>\n </FlexCell>\n )}\n {sl_trigger_price && (\n <FlexCell>\n <Flex direction={\"column\"} justify={\"start\"} itemAlign={\"start\"}>\n <Text className=\"oui-text-base-contrast-36\">\n {t(\"common.market\")}\n </Text>\n <Text.numeral dp={quote_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {sl_trigger_price}\n </Text.numeral>\n </Flex>\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { findTPSLFromOrder } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { FlexCell } from \"../components/common\";\n\nexport const TypeRender = ({ order }: { order: API.AlgoOrder }) => {\n const { tp_trigger_price, sl_trigger_price } = findTPSLFromOrder(order);\n const { t } = useTranslation();\n\n return (\n <Flex\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {tp_trigger_price && (\n <FlexCell>\n <Text className=\"oui-text-trade-profit\">{t(\"tpsl.tp\")}</Text>\n </FlexCell>\n )}\n\n {sl_trigger_price && (\n <FlexCell>\n <Text className=\"oui-text-trade-loss\">{t(\"tpsl.sl\")}</Text>\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { useMemo, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, Button, cn, ThrottledButton, toast } from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { useColumn } from \"./useColum\";\n\nexport const OrdersTableMobile = (props: {\n orders: API.AlgoOrder[];\n editTPSLOrder: (order: API.AlgoOrder) => void;\n canCancelOrder: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const { t } = useTranslation();\n const { orders } = props;\n const columns = useColumn({ onCancelOrder: () => Promise.resolve() });\n const orderIds = useMemo(() => {\n return orders.reduce(\n (acc, curr) => {\n acc[curr.algo_order_id] = true;\n return acc;\n },\n {} as Record<string, boolean>,\n );\n }, [orders]);\n return (\n <AuthGuardDataTable\n columns={columns}\n dataSource={orders}\n expanded={orderIds}\n bordered\n getRowCanExpand={() => true}\n expandRowRender={(row) => {\n return (\n <Flex gap={2} justify={\"end\"}>\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"gray\"\n className=\"oui-h-6 oui-text-2xs oui-text-base-contrast-54\"\n onClick={() => props.editTPSLOrder(row.original)}\n >\n {t(\"common.edit\")}\n </Button>\n <DeleteBtn\n order={row.original}\n onCancelOrder={props.canCancelOrder}\n />\n </Flex>\n );\n }}\n className=\"oui-bg-transparent oui-px-2 oui-text-2xs\"\n classNames={{\n scroll: cn(\n !orders || orders.length === 0\n ? \"!oui-min-h-[170px]\"\n : \"!oui-min-h-[100px]\",\n ),\n }}\n onRow={() => {\n return {\n className: cn(\n \"oui-h-[53px] oui-cursor-svg-edit !oui-border-none !oui-p-0\",\n ),\n };\n }}\n generatedRowKey={(record) => record.algo_order_id}\n />\n );\n};\n\nexport const DeleteBtn = (props: {\n order: API.AlgoOrder;\n onCancelOrder?: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const [loading, setLoading] = useState(false);\n const { t } = useTranslation();\n return (\n <ThrottledButton\n className=\"oui-h-6 oui-text-2xs oui-text-base-contrast-54\"\n size=\"sm\"\n loading={loading}\n variant=\"outlined\"\n color=\"gray\"\n onClick={(e) => {\n e.stopPropagation();\n setLoading(true);\n props\n .onCancelOrder?.(props.order)\n .then(\n () => {},\n (error) => {\n toast.error(error.message);\n },\n )\n .finally(() => {\n setLoading(false);\n });\n }}\n >\n {t(\"common.delete\")}\n </ThrottledButton>\n );\n};\n","import React from \"react\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { useTPSLSimpleDialog } from \"./tpslSimpleDialog.script\";\nimport { TPSLSimpleDialogUI } from \"./tpslSimpleDialog.ui\";\n\nexport const TPSLSimpleDialogWidget: React.FC<{\n type: \"tp\" | \"sl\";\n triggerPrice?: number;\n symbol: string;\n close?: () => void;\n onComplete?: () => void;\n showAdvancedTPSLDialog?: () => void;\n}> = (props) => {\n const { close, onComplete, showAdvancedTPSLDialog } = props;\n const state = useTPSLSimpleDialog(props);\n return (\n <TPSLSimpleDialogUI\n {...state}\n close={close}\n onComplete={onComplete}\n showAdvancedTPSLDialog={showAdvancedTPSLDialog}\n />\n );\n};\n\nexport const TPSLSimpleSheetId = \"TPSLSimpleSheetId\";\n\nexport const TPSLSimpleDialogId = \"TPSLSimpleDialogId\";\n\nregisterSimpleSheet(TPSLSimpleSheetId, TPSLSimpleDialogWidget, {\n classNames: {},\n});\n\nregisterSimpleDialog(TPSLSimpleDialogId, TPSLSimpleDialogWidget, {\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\n","import { useEffect, useMemo, useRef } from \"react\";\nimport {\n type ComputedAlgoOrder,\n useLocalStorage,\n usePositionStream,\n useSymbolsInfo,\n useTPSLOrder,\n utils,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n AlgoOrderRootType,\n API,\n OrderType,\n PositionType,\n SDKError,\n} from \"@orderly.network/types\";\nimport { modal, toast } from \"@orderly.network/ui\";\nimport { PositionTPSLConfirm } from \"../positionTPSL\";\n\nexport type TPSLBuilderOptions = {\n type: \"tp\" | \"sl\";\n triggerPrice?: number;\n symbol: string;\n};\n\nexport const useTPSLSimpleDialog = (options: TPSLBuilderOptions) => {\n const { type, triggerPrice, symbol } = options;\n const symbolInfo = useSymbolsInfo();\n const [{ rows: positions }, positionsInfo] = usePositionStream(symbol);\n const position = positions?.[0];\n const prevTPSLType = useRef<AlgoOrderRootType>(AlgoOrderRootType.TP_SL);\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n const { t } = useTranslation();\n\n const [\n tpslOrder,\n {\n submit,\n deleteOrder,\n setValue,\n setValues,\n validate,\n errors,\n isCreateMutating,\n isUpdateMutating,\n },\n ] = useTPSLOrder(\n {\n symbol: symbol!,\n position_qty: position?.position_qty,\n average_open_price: position?.average_open_price,\n },\n {\n defaultOrder: undefined,\n positionType: PositionType.PARTIAL,\n tpslEnable: { tp_enable: type === \"tp\", sl_enable: type === \"sl\" },\n isEditing: false,\n },\n );\n\n const setQuantity = (value: number | string) => {\n setValue(\"quantity\", value);\n };\n\n const setOrderPrice = (\n name: \"tp_trigger_price\" | \"sl_trigger_price\",\n value: number | string,\n ) => {\n setValue(name, value);\n };\n\n const setPnL = (type: string, value: number | string) => {\n setValue(type, value);\n };\n\n const maxQty = useMemo(\n () => Math.abs(Number(position.position_qty)),\n [position.position_qty],\n );\n\n useEffect(() => {\n if (!maxQty) {\n return;\n }\n setValue(\"quantity\", maxQty);\n if (type === \"tp\") {\n setValue(\"tp_trigger_price\", triggerPrice ?? \"\");\n } else {\n setValue(\"sl_trigger_price\", triggerPrice ?? \"\");\n }\n }, [type, triggerPrice, maxQty]);\n\n const onSubmit = async () => {\n try {\n const validOrder = await validate();\n if (validOrder) {\n if (!needConfirm) {\n return submit({ accountId: position.account_id })\n .then(() => true)\n .catch((err) => {\n if (err?.message) {\n toast.error(err.message);\n }\n throw false;\n });\n }\n // confirm\n return modal\n .confirm({\n title: t(\"tpsl.confirmOrder\"),\n // bodyClassName: \"lg:oui-py-0\",\n onOk: async () => {\n try {\n const res = await submit({\n accountId: position.account_id,\n });\n\n if (res.success) {\n return res;\n }\n\n if (res.message) {\n toast.error(res.message);\n }\n\n return false;\n } catch (err: any) {\n if (err?.message) {\n toast.error(err.message);\n }\n return false;\n }\n },\n classNames: {\n body: \"!oui-pb-0\",\n },\n content: (\n <PositionTPSLConfirm\n isPositionTPSL={false}\n isEditing={false}\n symbol={symbol}\n qty={Number(tpslOrder.quantity)}\n maxQty={maxQty}\n tpPrice={Number(tpslOrder.tp_trigger_price)}\n slPrice={Number(tpslOrder.sl_trigger_price)}\n side={tpslOrder.side!}\n orderInfo={tpslOrder}\n quoteDP={symbolInfo[symbol](\"quote_dp\")}\n baseDP={symbolInfo[symbol](\"base_dp\")}\n />\n ),\n })\n .then(\n () => {\n return true;\n },\n () => {\n return Promise.reject(false);\n },\n );\n }\n } catch (error) {\n return Promise.reject(error);\n }\n };\n\n return {\n symbolInfo: symbolInfo[symbol!],\n maxQty,\n setQuantity,\n orderQuantity: tpslOrder.quantity,\n isPosition: false,\n TPSL_OrderEntity: tpslOrder,\n setOrderValue: setValue,\n setPnL,\n setOrderPrice,\n onSubmit,\n errors,\n status: {\n isCreateMutating,\n isUpdateMutating,\n },\n position,\n setValues,\n type,\n triggerPrice,\n } as const;\n};\n\nexport type TPSLBuilderState = ReturnType<typeof useTPSLSimpleDialog>;\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@orderly.network/react-app\";\nimport { Box, Button, cn, Divider, Flex, Text } from \"@orderly.network/ui\";\nimport { TPSLQuantity } from \"../components/tpslQty\";\nimport { useTPSLSimpleDialog } from \"./tpslSimpleDialog.script\";\n\ntype Props = ReturnType<typeof useTPSLSimpleDialog> & {\n close?: () => void;\n onComplete?: () => void;\n showAdvancedTPSLDialog?: (options: { qty: number }) => void;\n};\n\nexport const TPSLSimpleDialogUI: React.FC<Props> = (props) => {\n const { type, triggerPrice, errors, TPSL_OrderEntity } = props;\n const { t } = useTranslation();\n const { parseErrorMsg } = useOrderEntryFormErrorMsg(errors);\n\n const footer = (\n <Flex width=\"100%\" itemAlign=\"center\" gap={3} mt={4}>\n <Button\n key=\"secondary\"\n color=\"gray\"\n onClick={() => {\n props.onComplete?.();\n props.close?.();\n }}\n fullWidth\n className=\"oui-text-sm\"\n size=\"md\"\n >\n {t(\"common.cancel\")}\n </Button>\n <Button\n key=\"primary\"\n onClick={() => {\n props.onSubmit().then(() => {\n props.onComplete?.();\n props.close?.();\n });\n }}\n fullWidth\n className=\"oui-text-sm\"\n size=\"md\"\n >\n {t(\"common.confirm\")}\n </Button>\n </Flex>\n );\n\n const errorMessage = () => {\n const tpError = parseErrorMsg(\"tp_trigger_price\");\n const slError = parseErrorMsg(\"sl_trigger_price\");\n let text = \"\";\n if (tpError && type === \"tp\") {\n text = tpError;\n }\n if (slError && type === \"sl\") {\n text = slError;\n }\n if (!text) {\n return null;\n }\n return (\n <Flex\n justify={\"start\"}\n itemAlign={\"start\"}\n gap={2}\n className=\"oui-mt-2 oui-w-full\"\n >\n <div className=\"oui-relative oui-top-[7px] oui-size-1 oui-rounded-full oui-bg-danger\" />\n <Text className=\"oui-text-danger\">{text}</Text>\n </Flex>\n );\n };\n\n const renderPnl = () => {\n const { tp_pnl, sl_pnl } = TPSL_OrderEntity;\n if (type === \"sl\") {\n return (\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.totalEstSlPnl\")}</Text>\n {sl_pnl ? (\n <Text.numeral\n suffix={\n <Text className=\"oui-ml-1 oui-text-base-contrast-36\">USDC</Text>\n }\n coloring\n visible={true}\n size=\"2xs\"\n dp={2}\n >\n {Number(sl_pnl)}\n </Text.numeral>\n ) : (\n <Text size=\"2xs\">-- USDC</Text>\n )}\n </Flex>\n );\n }\n return (\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.totalEstTpPnl\")}</Text>\n <Text.numeral\n suffix={\n <Text className=\"oui-text-base-contrast-36 oui-ml-1\">USDC</Text>\n }\n rule=\"price\"\n coloring\n visible={true}\n size=\"2xs\"\n dp={2}\n >\n {tp_pnl ? Number(tp_pnl) : \"--\"}\n </Text.numeral>\n </Flex>\n );\n };\n\n return (\n <Box className=\"oui-w-full oui-px-0.5\">\n <TPSLQuantity\n maxQty={props.maxQty}\n quantity={Number(props.orderQuantity ?? props.maxQty)}\n baseTick={props.symbolInfo(\"base_tick\")}\n dp={props.symbolInfo(\"base_dp\")}\n quote={props.symbolInfo(\"base\")}\n isEditing={false}\n errorMsg={parseErrorMsg(\"quantity\")}\n onQuantityChange={props.setQuantity}\n />\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-mt-4 oui-w-full oui-gap-1 oui-text-xs oui-text-base-contrast-36\",\n )}\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"xs\">{t(\"tpsl.advanced.triggerPrice\")}</Text>\n <Text.numeral\n className=\"oui-text-base-contrast\"\n suffix={\n <Text className=\"oui-ml-1 oui-text-xs oui-text-base-contrast-36\">\n USDC\n </Text>\n }\n rule=\"price\"\n size=\"xs\"\n dp={props.symbolInfo(\"quote_dp\")}\n >\n {triggerPrice ? Number(triggerPrice) : \"--\"}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"xs\">{t(\"tpsl.advanced.orderPrice\")}</Text>\n <Text className=\"oui-text-base-contrast\" size=\"xs\">\n {t(\"tpsl.advanced.market\")}\n </Text>\n </Flex>\n {renderPnl()}\n </Flex>\n {errorMessage()}\n\n <Divider className=\"oui-my-3 oui-w-full\" />\n <Flex\n itemAlign={\"center\"}\n onClick={() => {\n props.close?.();\n props.showAdvancedTPSLDialog?.({\n qty: Number(TPSL_OrderEntity.quantity),\n });\n }}\n className=\"oui-pb-4\"\n >\n <Text color=\"primary\" className=\"oui-cursor-pointer oui-text-sm\">\n {t(\"tpsl.advancedSetting\")}\n </Text>\n </Flex>\n {footer}\n </Box>\n );\n};\n","import { API, OrderlyOrder } from \"@orderly.network/types\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { useEditBracketOrder } from \"./editBracketOrder.script\";\nimport { EditBracketOrderUI } from \"./editBracketOrder.ui\";\n\nexport const EditBracketOrderWidget = (props: {\n order: API.AlgoOrderExt;\n close?: () => void;\n}) => {\n const state = useEditBracketOrder({ order: props.order });\n return <EditBracketOrderUI {...state} onClose={props.close} />;\n};\n\nexport const EditBracketOrderSheetId = \"EditBracketOrderSheetId\";\nexport const EditBracketOrderDialogId = \"EditBracketOrderDialogId\";\n\nregisterSimpleSheet(EditBracketOrderSheetId, EditBracketOrderWidget);\n\nregisterSimpleDialog(EditBracketOrderDialogId, EditBracketOrderWidget, {\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\n","import { useEffect, useMemo } from \"react\";\nimport {\n useMutation,\n useOrderEntry,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport {\n AlgoOrderRootType,\n AlgoOrderType,\n API,\n OrderlyOrder,\n OrderType,\n PositionType,\n SDKError,\n} from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nfunction getInitialOrder(order: API.AlgoOrderExt) {\n const childOrder = order.child_orders[0];\n const positionType =\n childOrder.algo_type === AlgoOrderRootType.TP_SL\n ? PositionType.PARTIAL\n : PositionType.FULL;\n const tpOrder = childOrder.child_orders.find(\n (item) =>\n item.algo_type === AlgoOrderType.TAKE_PROFIT && item.trigger_price,\n );\n const slOrder = childOrder.child_orders.find(\n (item) => item.algo_type === AlgoOrderType.STOP_LOSS && item.trigger_price,\n );\n const tpslPriceInfo: {\n tp_trigger_price?: string | undefined;\n tp_order_type?: OrderType;\n tp_order_price?: string | undefined;\n sl_trigger_price?: string | undefined;\n sl_order_type?: OrderType;\n sl_order_price?: string | undefined;\n } = {};\n if (tpOrder) {\n tpslPriceInfo.tp_trigger_price = tpOrder.trigger_price?.toString();\n tpslPriceInfo.tp_order_type =\n typeof tpOrder.type === \"string\"\n ? (tpOrder.type.replace(\"_ORDER\", \"\") as OrderType)\n : undefined;\n if (tpslPriceInfo.tp_order_type === OrderType.LIMIT) {\n tpslPriceInfo.tp_order_price = tpOrder.price?.toString();\n }\n }\n if (slOrder) {\n tpslPriceInfo.sl_trigger_price = slOrder.trigger_price?.toString();\n tpslPriceInfo.sl_order_type =\n typeof slOrder.type === \"string\"\n ? (slOrder.type.replace(\"_ORDER\", \"\") as OrderType)\n : undefined;\n if (tpslPriceInfo.sl_order_type === OrderType.LIMIT) {\n tpslPriceInfo.sl_order_price = slOrder.price?.toString();\n }\n }\n\n return {\n baseInfo: {\n symbol: order.symbol,\n order_type: order.type,\n side: order.side,\n order_price: order.price,\n order_quantity: order.quantity,\n position_type: positionType,\n tp_enable: !!tpOrder?.trigger_price,\n sl_enable: !!slOrder?.trigger_price,\n },\n tpslPriceInfo,\n tpInfo: {\n orderId: tpOrder?.algo_order_id,\n },\n slInfo: {\n orderId: slOrder?.algo_order_id,\n },\n };\n}\n\nfunction isTPSLPriceChanged(\n originPrice: string | number,\n newPrice: string | number,\n) {\n if (newPrice === undefined || newPrice === null) {\n return true;\n }\n if (isNaN(Number(newPrice))) {\n return false;\n }\n const originDeci = new Decimal(Number(originPrice));\n const newDeci = new Decimal(Number(newPrice));\n return !newDeci.eq(originDeci);\n}\n\nexport const useEditBracketOrder = (props: { order: API.AlgoOrderExt }) => {\n if (!props.order) {\n throw new SDKError(\"order is required for editBracketOrder\");\n }\n const { baseInfo, tpslPriceInfo, tpInfo, slInfo } = getInitialOrder(\n props.order,\n );\n\n const [doUpdateOrder, { isMutating }] = useMutation(\"/v1/algo/order\", \"PUT\");\n\n const { formattedOrder, setValue, setValues, metaState, symbolInfo, helper } =\n useOrderEntry(props.order.symbol, {\n initialOrder: baseInfo,\n });\n const symbol = props.order.symbol;\n\n const isPriceChanged = useMemo(() => {\n let dirty = false;\n const {\n tp_order_price,\n sl_order_price,\n tp_trigger_price,\n sl_trigger_price,\n } = formattedOrder;\n if (tpslPriceInfo.tp_trigger_price) {\n dirty =\n dirty ||\n isTPSLPriceChanged(\n tpslPriceInfo.tp_trigger_price,\n tp_trigger_price ?? 0,\n );\n }\n if (tpslPriceInfo.tp_order_price) {\n dirty =\n dirty ||\n isTPSLPriceChanged(tpslPriceInfo.tp_order_price, tp_order_price ?? 0);\n }\n if (tpslPriceInfo.sl_trigger_price) {\n dirty =\n dirty ||\n isTPSLPriceChanged(\n tpslPriceInfo.sl_trigger_price,\n sl_trigger_price ?? 0,\n );\n }\n if (tpslPriceInfo.sl_order_price) {\n dirty =\n dirty ||\n isTPSLPriceChanged(tpslPriceInfo.sl_order_price, sl_order_price ?? 0);\n }\n return dirty;\n }, [\n tpslPriceInfo,\n formattedOrder.tp_order_price,\n formattedOrder.sl_order_price,\n formattedOrder.tp_trigger_price,\n formattedOrder.sl_trigger_price,\n ]);\n useEffect(() => {\n setValues({\n ...tpslPriceInfo,\n });\n }, [props.order, setValues]);\n\n const onSubmit = async () => {\n return helper.validate().then(() => {\n const tpOrder: {\n order_id?: number;\n trigger_price?: string;\n algo_type: AlgoOrderType;\n price?: string;\n reduce_only?: boolean;\n is_activated?: boolean;\n } = {\n order_id: tpInfo.orderId,\n algo_type: AlgoOrderType.TAKE_PROFIT,\n trigger_price: formattedOrder.tp_trigger_price,\n reduce_only: true,\n };\n if (formattedOrder.tp_order_type === OrderType.LIMIT) {\n tpOrder.price = formattedOrder.tp_order_price;\n }\n\n const slOrder: {\n order_id?: number;\n trigger_price?: string;\n algo_type: AlgoOrderType;\n price?: string;\n reduce_only?: boolean;\n is_activated?: boolean;\n } = {\n order_id: slInfo.orderId,\n algo_type: AlgoOrderType.STOP_LOSS,\n trigger_price: formattedOrder.sl_trigger_price,\n reduce_only: true,\n };\n if (formattedOrder.sl_order_type === OrderType.LIMIT) {\n slOrder.price = formattedOrder.sl_order_price;\n }\n\n const childOrders = [];\n if (tpInfo.orderId) {\n childOrders.push(tpOrder);\n }\n if (slInfo.orderId) {\n childOrders.push(slOrder);\n }\n return doUpdateOrder({\n order_id: props.order.algo_order_id,\n child_orders: [\n {\n order_id: props.order.child_orders[0].algo_order_id,\n child_orders: childOrders,\n },\n ],\n });\n });\n };\n\n return {\n symbol,\n symbolInfo,\n formattedOrder,\n setValue,\n setValues,\n metaState,\n onSubmit,\n isMutating,\n isPriceChanged,\n };\n};\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n OrderlyOrder,\n OrderSide,\n OrderType,\n PositionType,\n} from \"@orderly.network/types\";\nimport {\n Button,\n cn,\n DialogFooter,\n Divider,\n Flex,\n Grid,\n ScrollArea,\n Text,\n ThrottledButton,\n useScreen,\n} from \"@orderly.network/ui\";\nimport { OrderInfo } from \"../components/orderInfo\";\nimport { PnlInfo } from \"../components/pnlInfo\";\nimport { TPSLInputRowWidget } from \"../components/tpslInputRow\";\nimport { TPSLPositionTypeWidget } from \"../components/tpslPostionType\";\nimport { useEditBracketOrder } from \"./editBracketOrder.script\";\n\ntype Props = ReturnType<typeof useEditBracketOrder>;\nexport const EditBracketOrderUI = (props: Props & { onClose?: () => void }) => {\n const { t } = useTranslation();\n const { errors, validated } = props.metaState;\n const { isMobile } = useScreen();\n // console.log('errors', errors, validated);\n\n const {\n formattedOrder,\n setValue: setOrderValue,\n symbol,\n symbolInfo,\n setValues,\n } = props;\n\n const [tpValues, setTpValuse] = useState<{\n enable: boolean;\n trigger_price: string;\n PnL: string;\n Offset: string;\n \"Offset%\": string;\n ROI: string;\n order_price: string;\n order_type: OrderType;\n }>({\n enable: true,\n order_type: formattedOrder.tp_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.tp_order_price ?? \"\",\n trigger_price: formattedOrder.tp_trigger_price ?? \"\",\n PnL: formattedOrder.tp_pnl ?? \"\",\n Offset: formattedOrder.tp_offset ?? \"\",\n \"Offset%\": formattedOrder.tp_offset_percentage ?? \"\",\n ROI: formattedOrder.tp_ROI ?? \"\",\n });\n\n const [slValues, setSlValues] = useState<{\n enable: boolean;\n trigger_price: string;\n PnL: string;\n Offset: string;\n \"Offset%\": string;\n ROI: string;\n order_price: string;\n order_type: OrderType;\n }>({\n enable: true,\n order_type: formattedOrder.sl_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.sl_order_price ?? \"\",\n trigger_price: formattedOrder.sl_trigger_price ?? \"\",\n PnL: formattedOrder.sl_pnl ?? \"\",\n Offset: formattedOrder.sl_offset ?? \"\",\n \"Offset%\": formattedOrder.sl_offset_percentage ?? \"\",\n ROI: formattedOrder.sl_ROI ?? \"\",\n });\n\n // Update tpValues when formattedOrder changes\n useEffect(() => {\n setTpValuse((prev) => ({\n ...prev,\n enable: formattedOrder.tp_enable ?? true,\n order_type: formattedOrder.tp_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.tp_order_price ?? \"\",\n trigger_price: formattedOrder.tp_trigger_price ?? \"\",\n PnL: formattedOrder.tp_pnl ?? \"\",\n Offset: formattedOrder.tp_offset ?? \"\",\n \"Offset%\": formattedOrder.tp_offset_percentage ?? \"\",\n ROI: formattedOrder.tp_ROI ?? \"\",\n }));\n }, [formattedOrder]);\n\n useEffect(() => {\n setSlValues((prev) => ({\n ...prev,\n enable: formattedOrder.sl_enable ?? true,\n order_type: formattedOrder.sl_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.sl_order_price ?? \"\",\n trigger_price: formattedOrder.sl_trigger_price ?? \"\",\n PnL: formattedOrder.sl_pnl ?? \"\",\n Offset: formattedOrder.sl_offset ?? \"\",\n \"Offset%\": formattedOrder.sl_offset_percentage ?? \"\",\n ROI: formattedOrder.sl_ROI ?? \"\",\n }));\n }, [formattedOrder]);\n return (\n <div>\n <ScrollArea\n className={cn(\"oui-flex-1\", isMobile && \"oui-h-[calc(100vh-200px)]\")}\n >\n <div className=\"\">\n <OrderInfo\n order={{\n symbol,\n order_quantity: formattedOrder.order_quantity,\n order_price: formattedOrder.order_price,\n }}\n baseDP={symbolInfo.base_dp}\n quoteDP={symbolInfo.quote_dp}\n />\n </div>\n <Divider className=\"oui-my-3\" />\n <div className=\"\">\n <div className=\"oui-py-3\">\n <TPSLPositionTypeWidget\n value={formattedOrder.position_type ?? PositionType.PARTIAL}\n disableSelector\n onChange={(key, value) => {\n // setOrderValue(\"position_type\", value);\n if (value === PositionType.FULL) {\n setValues({\n position_type: PositionType.FULL,\n tp_order_type: OrderType.MARKET,\n tp_order_price: undefined,\n sl_order_type: OrderType.MARKET,\n sl_order_price: undefined,\n });\n // setOrderValue(\"tp_order_type\", OrderType.MARKET);\n // setOrderValue(\"sl_order_type\", OrderType.MARKET);\n return;\n }\n setOrderValue(\"position_type\", value);\n }}\n />\n {formattedOrder.position_type === PositionType.FULL && (\n <Flex\n justify={\"start\"}\n itemAlign={\"start\"}\n gap={2}\n className=\"oui-mt-3 oui-w-full\"\n >\n <div className=\"oui-relative oui-top-[7px] oui-size-1 oui-rounded-full oui-bg-[#D25f00]\" />\n <Text className=\"oui-text-2xs oui-text-[#D25f00]\">\n {t(\"tpsl.positionType.full.tips.market\")}\n </Text>\n </Flex>\n )}\n </div>\n <Flex direction={\"column\"} gap={6}>\n {formattedOrder.tp_enable && (\n <TPSLInputRowWidget\n disableEnableCheckbox\n disableOrderTypeSelector\n rootOrderPrice={formattedOrder.order_price}\n symbol={symbolInfo.symbol}\n type=\"tp\"\n values={tpValues}\n errors={validated ? errors : null}\n quote_dp={symbolInfo.quote_dp}\n hideOrderPrice={\n formattedOrder.position_type === PositionType.FULL\n }\n onChange={(key, value) => {\n console.log(\"key\", key, \"value\", value);\n // setTpValuse((prev) => ({ ...prev, [key]: value }));\n setOrderValue(key as keyof OrderlyOrder, value);\n }}\n positionType={\n formattedOrder.position_type ?? PositionType.PARTIAL\n }\n />\n )}\n {formattedOrder.sl_enable && formattedOrder.tp_enable && (\n <Divider className=\"oui-w-full\" />\n )}\n {formattedOrder.sl_enable && (\n <TPSLInputRowWidget\n disableEnableCheckbox\n disableOrderTypeSelector\n rootOrderPrice={formattedOrder.order_price}\n symbol={symbolInfo.symbol}\n type=\"sl\"\n values={slValues}\n hideOrderPrice={\n formattedOrder.position_type === PositionType.FULL\n }\n errors={validated ? errors : null}\n quote_dp={symbolInfo.quote_dp}\n positionType={\n formattedOrder.position_type ?? PositionType.PARTIAL\n }\n onChange={(key, value) => {\n setOrderValue(key as keyof OrderlyOrder, value);\n }}\n />\n )}\n </Flex>\n\n <PnlInfo\n tp_pnl={formattedOrder.tp_pnl}\n sl_pnl={formattedOrder.sl_pnl}\n className=\"oui-mt-6\"\n />\n </div>\n </ScrollArea>\n <Flex\n itemAlign={\"center\"}\n gap={3}\n mt={5}\n width={\"100%\"}\n justify={\"center\"}\n >\n <ThrottledButton\n className=\"oui-w-[184px]\"\n data-testid={\"tpsl-confirm\"}\n disabled={!props.isPriceChanged}\n loading={props.isMutating}\n onClick={() => {\n props\n .onSubmit()\n .then(() => {\n props.onClose?.();\n })\n .catch((err) => {\n console.log(\"--->>>cancel order\", err);\n });\n }}\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n </div>\n );\n};\n"]}