@orderly.network/ui-orders 2.6.1 → 2.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +11 -11
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/orders.widget.tsx","../src/components/orders.script.ts","../src/components/orders.ui.tsx","../src/components/orderList/orderList.ui.tsx","../src/utils/util.ts","../src/components/provider/symbolProvider.tsx","../src/components/provider/symbolContext.tsx","../src/components/orderList/desktop/useColumn.tsx","../src/components/shareButton/shareButton.ui.tsx","../src/components/shareButton/shareButton.script.tsx","../src/components/shareButton/shareButton.widget.tsx","../src/components/orderList/desktop/bracketOrderPrice.tsx","../src/components/orderList/desktop/cancelBtn.tsx","../src/components/orderList/orderListContext.tsx","../src/components/orderList/desktop/price.tsx","../src/components/orderList/desktop/editOrder/confirmContent.tsx","../src/components/orderList/desktop/editOrder/innerInput.tsx","../src/components/orderList/desktop/quantity.tsx","../src/components/orderList/tpslOrderRowContext.tsx","../src/components/orderList/desktop/renew.tsx","../src/components/orderList/desktop/tpslEdit.tsx","../src/components/orderList/desktop/tpslPrice.tsx","../src/components/orderList/desktop/tpslTriggerPrice.tsx","../src/components/orderList/desktop/triggerPrice.tsx","../src/components/orderList/mobile/orderCell.ui.tsx","../src/components/orderList/mobile/bracketOrderPrice/bracketOrderPrice.ui.tsx","../src/components/orderList/mobile/items.tsx","../src/components/orderList/mobile/bracketOrderPrice/bracketOrderPrice.script.tsx","../src/components/orderList/mobile/bracketOrderPrice/bracketOrderPrice.widget.tsx","../src/components/orderList/mobile/cancelBtn/cancelBtn.ui.tsx","../src/components/orderList/mobile/cancelBtn/cancelBtn.script.tsx","../src/components/orderList/mobile/cancelBtn/cancelBtn.widget.tsx","../src/components/orderList/mobile/editBtn/editBtn.ui.tsx","../src/components/orderList/mobile/editBtn/editBtn.script.tsx","../src/components/orderList/mobile/editSheet/editSheet.ui.tsx","../src/components/orderList/mobile/editSheet/editDialogContent.tsx","../src/components/orderList/mobile/editSheet/editSheet.script.tsx","../src/components/orderList/mobile/editSheet/editSheet.widget.tsx","../src/components/orderList/mobile/editBtn/editBtn.widget.tsx","../src/components/orderList/mobile/orderCell.script.tsx","../src/components/orderList/mobile/orderCell.widget.tsx","../src/components/orderList/orderList.widget.tsx","../src/components/orderList/orderList.script.tsx","../src/components/orderList/useFormatOrderHistory.ts"],"names":["forwardRef","useImperativeHandle","useRef","useOrdersScript","props","current","pnlNotionalDecimalPrecision","sharePnLConfig","orderListRef","TabPanel","Tabs","OrderStatus","useTranslation","Flex","ListView","Button","Grid","Picker","DataFilter","cn","TableFeatures","AuthGuardDataTable","utils","OrderSide","AlgoOrderRootType","AlgoOrderType","OrderType","i18n","upperCaseFirstLetter","str","parseBadgesFor","record","orderType","algoType","list","types","type","tpOrder","order","slOrder","grayCell","findBracketTPSLOrder","innerOrder","item","calcBracketRoiAndPnL","defaultCallback","quantity","tpPnL","slPnL","tpRoi","slRoi","areDatesEqual","date1","date2","useMemo","useSymbolsInfo","createContext","useContext","SymbolContext","useSymbolContext","jsx","SymbolProvider","symbol","children","symbolInfo","memoizedValue","format","Text","Badge","SharePnLDialogId","commifyOptional","Decimal","modal","ShareIcon","Fragment","ShareButton","e","useReferralInfo","useSymbolLeverage","useShareButtonScript","modalId","iconSize","getFirstRefCode","refCode","leverage","ShareButtonWidget","state","Tooltip","jsxs","BracketOrderPrice","quote_dp","base_dp","t","sl_trigger_price","tp_trigger_price","pnl","roi","Price","value","useState","ThrottledButton","toast","getMinNotional","useMemoizedFn","OrderListContext","useOrderListContext","OrderListProvider","cancelOrder","editOrder","cancelAlgoOrder","editAlgoOrder","onCancelOrder","onEditOrder","position","isHidden","orderEntry","checkMinNotional","price","qty","min_notional","minNotional","CancelButton","isLoading","setIsLoading","event","res","error","useEffect","useSymbolPriceRange","Popover","CloseIcon","commify","Trans","ConfirmContent","base","cancelPopover","isSubmitting","onConfirm","common","CheckIcon","Input","inputFormatter","InnerInput","inputRef","dp","setValue","setEditing","handleKeyDown","onClick","onClose","onFocus","onBlur","hintInfo","input","length","open","setPrice","setOpen","editing","isAlgoOrder","isStopMarket","setIsSubmitting","rangeInfo","closePopover","notionalText","order_id","data","future","result","err","componentRef","handleClickOutside","trigger","NormalState","useCallback","useMaxQty","Slider","PopoverTrigger","PopoverRoot","PopoverContent","unstable_serialize","useAccount","useMutation","useSWRConfig","findTPSLOrderPriceFromOrder","findTPSLFromOrder","TPSLOrderRowContext","useTPSLOrderRowContext","TPSLOrderRowProvider","setPosition","doDeleteOrder","doUpdateOrder","config","positionKey","onUpdateOrder","params","getRelatedPosition","p","sl_order_price","tp_order_price","calcTPSLPnL","isTPSLOrder","avgOpenPrice","OrderQuantity","otherOrderQuantity","reduce_only","originSetQuantity","setQuantity","setError","onUpdateTPSLOrder","base_tick","maxQty","positionQty","clickHandler","order_price","rest","quantitySliderRef","EditState","executed","confirmOpen","side","sliderValue","setSliderValue","formatQuantity","_qty","values","Buttons","index","useConfig","Renew","doCreateOrder","reset","isMutating","brokerId","onSubmit","PositionTPSLPopover","TP_SLEditButton","TPSLOrderPrice","TPSLOrderPriceItem","quoteDP","useTPSLOrderPrice","tpTriggerPrice","slTriggerPrice","OrderTriggerPrice","TPSLTriggerPrice","direction","msgs","TriggerPriceItem","child","content","entryPrice","orderSide","label","TriggerPrice","isBracketOrder","quote_max","quote_min","useOrderColumn","_type","onSymbolChange","instrument","fillAndQuantity","avgOpen","tpslTriggerPrice","realizedPnL","estTotal","fee","status","reduceOnly","hidden","cancelBtn","orderTime","triggerPrice","bracketOrderPrice","pendingTabCancelBtn","tpslPrice","tpslNotional","tpslAction","avgPrice","option","r1","r2","badges","displayBadges","showGray","sortOrder","clsName","a","b","aQuantity","bQuantity","compareNumbers","callback","info","getTPSLTriggerPrice","aTotal","bTotal","estTotalValue","_value","formatValue","date","statusMap","_","isPending","Divider","Statistic","SharePnLBottomSheetId","SymbolToken","isBuy","OrderTypeView","OrderTime","OrderState","Qty","isEntirePosition","Filled","EstTotal","MarkPrice","LimitPrice","TPTrigger","MobileTooltip","SLTrigger","TPPrice","renderOrderPrice","SLPrice","TPSLQuantity","AvgPrice","OrderPrice","RealizedPnL","classNames","Fee","useBracketOrderPriceScript","BracketOrderPriceWidget","SimpleDialog","CancelBtn","useCancelBtnScript","CancelBtnWidget","EditBtn","PositionTPSLSheet","useOrderEntryFormErrorMsg","Checkbox","ConfirmDialogContent","EditSheet","parseErrorMsg","orderQuantityErrorMsg","orderPriceErrorMsg","triggerPriceErrorMsg","percentages","baseTick","formatQty","useLocalStorage","useOrderEntity","useThrottledCallback","useModal","useEditSheetScript","autoCheckInput","hide","dialogOpen","setDialogOpen","isMarketOrder","submitting","setSubmitting","orderConfirm","setOrderConfirm","formattedOrder","markPrice","errors","validate","useOrderEntry","onSheetConfirm","onCloseDialog","onDialogConfirm","isChanged","setOrderValue","key","setFormattedOrder","_maxQty","oldValue","EditSheetWidget","useEditBtnScript","onShowEditSheet","EditBtnWidget","OrderCell","Header","Body","Btns","itemsWithType","useOrderCellScript","OrderCellWidget","className","DesktopOrderList","columns","CancelAll","table","MobileOrderList","differenceInDays","setHours","subDays","useOrderStream","useDataTap","usePagination","useFormatOrderHistory","_data","element","j","useOrderListScript","ordersStatus","enableLoadMore","filterConfig","symbolsInfo","manualPagination","defaultPageSize","page","pageSize","setPage","pagination","parsePagination","orderStatus","ordersSide","dateRange","filterItems","onFilter","filterDays","updateFilterDays","useFilter","includes","excludes","tableInstance","filename","loadMore","updateOrder","updateAlgoOrder","cancelAllOrders","cancelAllTPSLOrders","meta","refresh","localPageSizeKey","typePageSize","setTypePageSize","onCancelAll","title","formattedData","dataSource","_pagination","setOrderStatus","setOrdersSide","setFilterDays","defaultRange","formatDatePickerRange","offsetEndOfDay","setDateRange","days","offsetStartOfDay","filter","newDateRange","diffDays","sideFilter","dateRangeFilter","statusFilter","newDate","DesktopOrderListWidget","ref","testIds","MobileOrderListWidget","Orders","commonProps","TabType","OrdersWidget"],"mappings":"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","sourcesContent":["import { forwardRef } from \"react\";\nimport { useOrdersScript } from \"./orders.script\";\nimport { Orders } from \"./orders.ui\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { OrderListInstance } from \"./orderList/orderList.script\";\n\nexport enum TabType {\n all = \"all\",\n pending = \"pending\",\n tp_sl = \"tp_sl\",\n filled = \"filled\",\n cancelled = \"cancelled\",\n rejected = \"rejected\",\n orderHistory = \"orderHistory\",\n}\n\nexport type OrdersWidgetProps = {\n current?: TabType;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n};\n\nexport const OrdersWidget = forwardRef<OrderListInstance, OrdersWidgetProps>(\n (props, ref) => {\n const state = useOrdersScript({ ...props, ref });\n\n return <Orders {...state} />;\n }\n);\n","import { ForwardedRef, useImperativeHandle, useRef } from \"react\";\nimport { TabType } from \"./orders.widget\";\nimport { OrderListInstance } from \"./orderList/orderList.script\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\ntype UseOrdersScriptOptions = {\n current?: TabType;\n pnlNotionalDecimalPrecision?: number;\n ref: ForwardedRef<OrderListInstance>;\n sharePnLConfig?: SharePnLConfig\n};\n\nexport const useOrdersScript = (props: UseOrdersScriptOptions) => {\n const { current, pnlNotionalDecimalPrecision, sharePnLConfig } = props;\n\n const orderListRef = useRef<OrderListInstance>(null);\n\n useImperativeHandle(props.ref, () => ({\n download: () => {\n orderListRef.current?.download?.();\n },\n }));\n\n return {\n current,\n pnlNotionalDecimalPrecision,\n orderListRef,\n sharePnLConfig,\n };\n};\n\nexport type OrdersBuilderState = ReturnType<typeof useOrdersScript>;\n","import { TabPanel, Tabs } from \"@orderly.network/ui\";\nimport { OrderStatus } from \"@orderly.network/types\";\nimport { OrdersBuilderState } from \"./orders.script\";\nimport { TabType } from \"./orders.widget\";\nimport { DesktopOrderListWidget } from \"./orderList\";\nimport { DesktopOrderListWidgetProps } from \"./orderList/orderList.widget\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const Orders = (props: OrdersBuilderState) => {\n const { t } = useTranslation();\n const commonProps: Partial<DesktopOrderListWidgetProps> = {\n pnlNotionalDecimalPrecision: props.pnlNotionalDecimalPrecision,\n };\n\n return (\n <Tabs\n defaultValue={props.current || TabType.all}\n variant=\"contained\"\n className=\"oui-h-full\"\n classNames={{\n tabsContent: \"oui-h-[calc(100%_-_28px)]\",\n }}\n >\n <TabPanel value={TabType.all} title={t(\"common.all\")}>\n <DesktopOrderListWidget\n ref={props.orderListRef}\n type={TabType.all}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n sharePnLConfig={props.sharePnLConfig}\n {...commonProps}\n />\n </TabPanel>\n <TabPanel value={TabType.pending} title={t(\"orders.status.pending\")}>\n <DesktopOrderListWidget\n ref={props.orderListRef}\n type={TabType.pending}\n ordersStatus={OrderStatus.INCOMPLETE}\n {...commonProps}\n />\n </TabPanel>\n <TabPanel value={TabType.tp_sl} title={t(\"common.tpsl\")}>\n <DesktopOrderListWidget\n ref={props.orderListRef}\n type={TabType.tp_sl}\n ordersStatus={OrderStatus.INCOMPLETE}\n {...commonProps}\n />\n </TabPanel>\n <TabPanel value={TabType.filled} title={t(\"orders.status.filled\")}>\n <DesktopOrderListWidget\n ref={props.orderListRef}\n type={TabType.filled}\n ordersStatus={OrderStatus.FILLED}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n sharePnLConfig={props.sharePnLConfig}\n {...commonProps}\n />\n </TabPanel>\n <TabPanel value={TabType.cancelled} title={t(\"orders.status.canceled\")}>\n <DesktopOrderListWidget\n ref={props.orderListRef}\n type={TabType.cancelled}\n ordersStatus={OrderStatus.CANCELLED}\n {...commonProps}\n />\n </TabPanel>\n <TabPanel value={TabType.rejected} title={t(\"orders.status.rejected\")}>\n <DesktopOrderListWidget\n ref={props.orderListRef}\n type={TabType.rejected}\n ordersStatus={OrderStatus.REJECTED}\n {...commonProps}\n />\n </TabPanel>\n {/* <TabPanel value={TabType.orderHistory} title={t(\"orders.orderHistory\")}>\n <DesktopOrderListWidget\n type={TabType.orderHistory}\n {...commonProps}\n />\n </TabPanel> */}\n </Tabs>\n );\n};\n// ----------------- Orders ui component end -----------------\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Flex,\n ListView,\n Button,\n Grid,\n Picker,\n DataFilter,\n cn,\n TableFeatures,\n} from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { grayCell } from \"../../utils/util\";\nimport { TabType } from \"../orders.widget\";\nimport { SymbolProvider } from \"../provider/symbolProvider\";\nimport { useOrderColumn } from \"./desktop/useColumn\";\nimport { OrderCellWidget } from \"./mobile\";\nimport { OrdersBuilderState } from \"./orderList.script\";\nimport { OrderListProvider } from \"./orderListContext\";\nimport { TPSLOrderRowProvider } from \"./tpslOrderRowContext\";\n\nexport const DesktopOrderList: FC<\n OrdersBuilderState & {\n testIds?: {\n tableBody?: string;\n };\n }\n> = (props) => {\n const { sharePnLConfig, ...rest } = props;\n const columns = useOrderColumn({\n _type: props.type,\n onSymbolChange: props.onSymbolChange,\n pnlNotionalDecimalPrecision: props.pnlNotionalDecimalPrecision,\n sharePnLConfig,\n symbolsInfo: props.symbolsInfo,\n });\n\n return (\n <OrderListProvider\n cancelOrder={props.cancelOrder}\n editOrder={props.updateOrder}\n cancelAlgoOrder={props.cancelAlgoOrder}\n editAlgoOrder={props.updateAlgoOrder}\n // cancelTPSLOrder={props.cancelTPSLOrder}\n >\n <Flex direction=\"column\" width=\"100%\" height=\"100%\" itemAlign=\"start\">\n {props.filterItems.length > 0 && (\n <DataFilter\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n trailing={\n [TabType.pending, TabType.tp_sl].includes(props.type) && (\n <CancelAll {...props} />\n )\n }\n />\n )}\n <AuthGuardDataTable\n columns={columns}\n loading={props.isLoading}\n dataSource={props.dataSource}\n bordered\n ignoreLoadingCheck={true}\n testIds={{\n body: props.testIds?.tableBody,\n }}\n classNames={{\n header: \"oui-h-[38px]\",\n root: \"oui-items-start !oui-h-[calc(100%_-_49px)]\",\n }}\n onRow={(record, index) => {\n return {\n className: cn(\n \"oui-h-[48px]\",\n grayCell(record)\n ? \"oui-text-base-contrast-20\"\n : \"oui-text-base-contrast-80\",\n ),\n };\n }}\n generatedRowKey={(record, index) =>\n `${props.type}${index}${\n record.order_id || record.algo_order_id\n }_index${index}`\n }\n renderRowContainer={(record: any, index, children) => {\n if (\n props.type === TabType.tp_sl ||\n props.type === TabType.pending\n ) {\n children = (\n <TPSLOrderRowProvider order={record}>\n {children}\n </TPSLOrderRowProvider>\n );\n }\n\n return (\n <SymbolProvider symbol={record.symbol}>{children}</SymbolProvider>\n );\n }}\n pagination={props.pagination}\n manualPagination={props.manualPagination}\n features={[TableFeatures.DownloadFeature]}\n getTableInstance={(table) => {\n props.tableInstance.current = table;\n }}\n />\n </Flex>\n </OrderListProvider>\n );\n};\n\nexport const MobileOrderList: FC<\n OrdersBuilderState & {\n classNames?: {\n root?: string;\n cell?: string;\n content?: string;\n };\n showFilter?: boolean;\n }\n> = (props) => {\n const { t } = useTranslation();\n\n return (\n <OrderListProvider\n cancelOrder={props.cancelOrder}\n editOrder={props.updateOrder}\n cancelAlgoOrder={props.cancelAlgoOrder}\n editAlgoOrder={props.updateAlgoOrder}\n // cancelTPSLOrder={props.cancelTPSLOrder}\n >\n <Grid\n cols={1}\n rows={2}\n className=\"oui-w-full oui-grid-rows-[auto,1fr]\"\n gap={2}\n >\n {/* <Filter\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n className=\"oui-px-3\"\n \n /> */}\n\n {props.showFilter ? (\n <Flex gap={2} p={2} className=\"oui-rounded-b-xl oui-bg-base-9\">\n {props.filterItems.map((item) => {\n // not support range type\n if (item.type !== \"select\") {\n return null;\n }\n return (\n <Picker\n key={`item-${item.name}`}\n options={item.options}\n size={\"sm\"}\n value={item.value}\n className=\"oui-text-2xs oui-text-base-contrast-54 \"\n placeholder={\n item.name === \"side\"\n ? t(\"common.side.all\")\n : item.name === \"status\"\n ? t(\"common.status.all\")\n : \"\"\n }\n onValueChange={(value) => {\n //\n props.onFilter?.({ name: item.name, value: value });\n }}\n />\n );\n })}\n </Flex>\n ) : (\n <div></div>\n )}\n <ListView\n className={props.classNames?.root}\n contentClassName={props.classNames?.content}\n dataSource={props.dataSource}\n loadMore={props.loadMore}\n isLoading={props.isLoading}\n renderItem={(item, index) => {\n let children = (\n <OrderCellWidget\n item={item}\n index={index}\n className={props.classNames?.cell}\n type={props.type}\n onSymbolChange={props.onSymbolChange}\n sharePnLConfig={props.sharePnLConfig}\n />\n );\n if ([TabType.tp_sl, TabType.pending].includes(props.type)) {\n children = (\n <TPSLOrderRowProvider order={item}>\n {children}\n </TPSLOrderRowProvider>\n );\n }\n return (\n <SymbolProvider symbol={item.symbol}>{children}</SymbolProvider>\n );\n }}\n />\n </Grid>\n </OrderListProvider>\n );\n};\n\nconst CancelAll: FC<OrdersBuilderState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n disabled={(props.dataSource?.length ?? 0) == 0}\n className=\"disabled:oui-bg-transport\"\n onClick={(e) => props.onCancelAll()}\n data-testid={`oui-testid-dataList-${props.type.toLowerCase()}-cancelAll-button`}\n >\n {t(\"orders.cancelAll\")}\n </Button>\n );\n};\n","import { utils } from \"@orderly.network/hooks\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport {\n AlgoOrderRootType,\n AlgoOrderType,\n API,\n OrderStatus,\n OrderType,\n} from \"@orderly.network/types\";\nimport { i18n } from \"@orderly.network/i18n\";\n\nexport const upperCaseFirstLetter = (str: string) => {\n if (str === undefined) return str;\n if (str.length === 0) return str;\n if (str.length === 1) return str.charAt(0).toUpperCase();\n return str.charAt(0).toUpperCase() + str.toLowerCase().slice(1);\n};\n\n/**\n * order_type: LIMIT、MARKET、CLOSE_POSITION\n * algo_type: STOP、TPSL、positional_TPSL、BRACKET\n */\nexport function parseBadgesFor(record: any): undefined | string[] {\n const orderType = record.type;\n const algoType = record.algo_type;\n if (typeof orderType !== \"undefined\") {\n const list: string[] = [];\n\n if (!!record.parent_algo_type) {\n if (algoType === AlgoOrderType.STOP_LOSS) {\n const types =\n orderType === OrderType.CLOSE_POSITION\n ? [i18n.t(\"common.position\"), i18n.t(\"tpsl.sl\")]\n : [i18n.t(\"tpsl.sl\")];\n list.push(...types);\n }\n\n if (algoType === AlgoOrderType.TAKE_PROFIT) {\n const types =\n orderType === OrderType.CLOSE_POSITION\n ? [i18n.t(\"common.position\"), i18n.t(\"tpsl.tp\")]\n : [i18n.t(\"tpsl.tp\")];\n list.push(...types);\n }\n\n return list;\n }\n\n const type =\n typeof orderType === \"string\" ? orderType.replace(\"_ORDER\", \"\") : \"\";\n\n // bbo(ask, bid) order as a limit type\n if ([OrderType.ASK, OrderType.BID].includes(orderType)) {\n return [i18n.t(\"orderEntry.orderType.limit\")];\n }\n\n if (\n record.algo_order_id === undefined ||\n (record.algo_order_id && algoType === \"BRACKET\")\n ) {\n const typeMap = {\n [OrderType.LIMIT]: i18n.t(\"orderEntry.orderType.limit\"),\n [OrderType.MARKET]: i18n.t(\"orderEntry.orderType.market\"),\n [OrderType.POST_ONLY]: i18n.t(\"orderEntry.orderType.postOnly\"),\n [OrderType.IOC]: i18n.t(\"orderEntry.orderType.ioc\"),\n [OrderType.FOK]: i18n.t(\"orderEntry.orderType.fok\"),\n };\n\n return [\n typeMap[type as keyof typeof typeMap] || upperCaseFirstLetter(type),\n ];\n }\n\n // stop limit, stop market\n if (type) {\n const typeMap = {\n [OrderType.LIMIT]: i18n.t(\"orderEntry.orderType.stopLimit\"),\n [OrderType.MARKET]: i18n.t(\"orderEntry.orderType.stopMarket\"),\n };\n return [typeMap[type as keyof typeof typeMap] || type];\n }\n }\n\n if (typeof algoType !== \"undefined\") {\n const list: string[] = [];\n\n if (algoType === AlgoOrderRootType.POSITIONAL_TP_SL) {\n list.push(i18n.t(\"common.position\"));\n }\n\n const tpOrder = record?.child_orders?.find(\n (order: any) =>\n order.algo_type === AlgoOrderType.TAKE_PROFIT && !!order.trigger_price\n );\n\n const slOrder = record?.child_orders?.find(\n (order: any) =>\n order.algo_type === AlgoOrderType.STOP_LOSS && !!order.trigger_price\n );\n\n if (tpOrder || slOrder) {\n list.push(\n tpOrder && slOrder\n ? i18n.t(\"common.tpsl\")\n : tpOrder\n ? i18n.t(\"tpsl.tp\")\n : i18n.t(\"tpsl.sl\")\n );\n }\n\n return list;\n }\n\n return undefined;\n}\n\nexport function grayCell(record: any): boolean {\n return (\n (record as API.Order).status === OrderStatus.CANCELLED ||\n (record as API.AlgoOrder).algo_status === OrderStatus.CANCELLED\n );\n}\n\nfunction findBracketTPSLOrder(order: API.AlgoOrderExt) {\n if (order.algo_type !== AlgoOrderRootType.BRACKET) {\n return {\n tpOrder: undefined,\n slOrder: undefined,\n };\n }\n\n const innerOrder = order.child_orders?.[0];\n if (!innerOrder)\n return {\n tpOrder: undefined,\n slOrder: undefined,\n };\n\n const tpOrder = innerOrder?.child_orders?.find(\n (item) => item.algo_type === AlgoOrderType.TAKE_PROFIT\n );\n\n const slOrder = innerOrder?.child_orders?.find(\n (item) => item.algo_type === AlgoOrderType.STOP_LOSS\n );\n\n return {\n tpOrder,\n slOrder,\n };\n}\n\nexport function calcBracketRoiAndPnL(order: API.AlgoOrderExt) {\n const defaultCallback = {\n pnl: {\n tpPnL: undefined,\n slPnL: undefined,\n },\n roi: {\n tpRoi: undefined,\n slRoi: undefined,\n },\n };\n const { tpOrder, slOrder } = findBracketTPSLOrder(order);\n if (!tpOrder && !slOrder) return defaultCallback;\n\n if (typeof order.price === undefined || !order.price) return defaultCallback;\n\n const quantity =\n order.side === OrderSide.BUY ? order.quantity : order.quantity * -1;\n\n const tpPnL =\n tpOrder?.trigger_price &&\n utils.priceToPnl({\n qty: quantity,\n price: tpOrder?.trigger_price,\n entryPrice: order.price,\n // @ts-ignore\n orderSide: order.side,\n // @ts-ignore\n orderType: tpOrder.algo_type,\n });\n const slPnL =\n slOrder?.trigger_price &&\n utils.priceToPnl({\n qty: quantity,\n // trigger price\n price: slOrder?.trigger_price,\n //\n entryPrice: order.price,\n // @ts-ignore\n orderSide: order.side,\n // @ts-ignore\n orderType: slOrder.algo_type,\n });\n\n const tpRoi = tpPnL\n ? utils.calcTPSL_ROI({\n pnl: tpPnL,\n qty: order.quantity,\n price: order.price,\n })\n : undefined;\n const slRoi = slPnL\n ? utils.calcTPSL_ROI({\n pnl: slPnL,\n qty: order.quantity,\n price: order.price,\n })\n : undefined;\n\n return {\n pnl: {\n tpPnL,\n slPnL,\n },\n roi: {\n tpRoi,\n slRoi,\n },\n };\n}\n\nexport function areDatesEqual(date1?: Date, date2?: Date): boolean {\n if (!date1 || !date2) return false;\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n );\n}","import { FC, PropsWithChildren, useMemo } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { SymbolContext, SymbolContextState } from \"./symbolContext\";\n\ninterface FormatterProviderProps {\n symbol: string;\n}\n\nexport const SymbolProvider: FC<PropsWithChildren<FormatterProviderProps>> = (\n props,\n) => {\n const { symbol, children } = props;\n const symbolInfo = useSymbolsInfo()[symbol];\n const memoizedValue = useMemo<SymbolContextState>(() => {\n return {\n symbol: symbol,\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n base_tick: symbolInfo(\"base_tick\"),\n quote_tick: symbolInfo(\"quote_tick\"),\n base: symbolInfo(\"base\"),\n quote: symbolInfo(\"quote\"),\n origin: symbolInfo(),\n quote_max: symbolInfo(\"quote_max\"),\n quote_min: symbolInfo(\"quote_min\"),\n };\n }, [symbol, symbolInfo]);\n return (\n <SymbolContext.Provider value={memoizedValue}>\n {children}\n </SymbolContext.Provider>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport type { API } from \"@orderly.network/types\";\n\nexport interface SymbolContextState {\n base_dp: number;\n quote_dp: number;\n base_tick: number;\n quote_tick: number;\n base: string;\n quote: string;\n symbol: string;\n origin: API.SymbolExt;\n quote_min: number;\n quote_max: number;\n}\n\nexport const SymbolContext = createContext<SymbolContextState>(\n {} as SymbolContextState,\n);\n\nexport const useSymbolContext = () => {\n return useContext<SymbolContextState>(SymbolContext);\n};\n","import { useMemo } from \"react\";\nimport { format } from \"date-fns\";\nimport { SymbolInfo, utils } from \"@orderly.network/hooks\";\nimport { useTranslation, i18n } from \"@orderly.network/i18n\";\nimport {\n AlgoOrderRootType,\n AlgoOrderType,\n API,\n OrderSide,\n OrderStatus,\n OrderType,\n} from \"@orderly.network/types\";\nimport { cn, Column, Flex, Text } from \"@orderly.network/ui\";\nimport { Badge } from \"@orderly.network/ui\";\nimport { SharePnLConfig, SharePnLDialogId } from \"@orderly.network/ui-share\";\nimport { commifyOptional, Decimal } from \"@orderly.network/utils\";\nimport {\n grayCell,\n parseBadgesFor,\n upperCaseFirstLetter,\n} from \"../../../utils/util\";\nimport { TabType } from \"../../orders.widget\";\nimport { useSymbolContext } from \"../../provider/symbolContext\";\nimport { ShareButtonWidget } from \"../../shareButton\";\nimport { BracketOrderPrice } from \"./bracketOrderPrice\";\nimport { CancelButton } from \"./cancelBtn\";\nimport { Price } from \"./price\";\nimport { OrderQuantity } from \"./quantity\";\nimport { Renew } from \"./renew\";\nimport { TP_SLEditButton } from \"./tpslEdit\";\nimport { TPSLOrderPrice, useTPSLOrderPrice } from \"./tpslPrice\";\nimport { OrderTriggerPrice } from \"./tpslTriggerPrice\";\nimport { TriggerPrice } from \"./triggerPrice\";\n\nexport const useOrderColumn = (props: {\n _type: TabType;\n onSymbolChange?: (symbol: API.Symbol) => void;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n symbolsInfo?: SymbolInfo;\n}) => {\n const { _type, onSymbolChange, pnlNotionalDecimalPrecision, sharePnLConfig } =\n props;\n const { t } = useTranslation();\n\n const columns = useMemo(() => {\n switch (_type) {\n case TabType.all:\n return [\n instrument({\n width: 130,\n showType: true,\n onSymbolChange: onSymbolChange,\n enableSort: false,\n }),\n side({ width: 130 }),\n fillAndQuantity({\n width: 130,\n disableEdit: true,\n className: \"oui-pl-0 oui-pr-0\",\n enableSort: false,\n }),\n price({\n width: 130,\n title: t(\"common.orderPrice\"),\n disableEdit: true,\n enableSort: false,\n }),\n avgOpen({ width: 130, enableSort: false }),\n tpslTriggerPrice({ width: 130, symbolsInfo: props.symbolsInfo }),\n realizedPnL({\n width: 124,\n pnlNotionalDecimalPrecision: pnlNotionalDecimalPrecision,\n sharePnLConfig: sharePnLConfig,\n symbolsInfo: props.symbolsInfo,\n }),\n estTotal({ width: 130, enableSort: false }),\n fee({ width: 130 }),\n status({ width: 130 }),\n reduceOnly({ width: 130 }),\n hidden({ width: 130 }),\n cancelBtn({ width: 130 }),\n orderTime({ width: 160, enableSort: false }),\n ];\n case TabType.pending:\n return [\n instrument({\n width: 172,\n showType: true,\n onSymbolChange: onSymbolChange,\n enableSort: false,\n }),\n // side({ width: 162 }),\n fillAndQuantity({\n width: 162,\n className: \"oui-pr-0\",\n enableSort: false,\n }),\n price({ width: 162, className: \"oui-pr-0\", enableSort: false }),\n triggerPrice({ width: 162, className: \"oui-pr-0\" }),\n bracketOrderPrice({ width: 130 }),\n estTotal({ width: 162, isPending: true }),\n reduceOnly({ width: 162 }),\n hidden({ width: 162 }),\n orderTime({ width: 162, enableSort: false }),\n pendingTabCancelBtn({ width: 162 }),\n ];\n case TabType.tp_sl:\n return [\n instrument({\n width: 176,\n showType: true,\n onSymbolChange: onSymbolChange,\n enableSort: false,\n }),\n // side({ width: 176 }),\n quantity({ width: 176 }),\n tpslTriggerPrice({ width: 176, symbolsInfo: props.symbolsInfo }),\n tpslPrice({ width: 176, disableEdit: true }),\n tpslNotional({ width: 176 }),\n reduceOnly({ width: 176 }),\n orderTime({ width: 176, enableSort: false }),\n tpslAction({ width: 176 }),\n ];\n case TabType.filled:\n return [\n instrument({\n showType: true,\n width: 154,\n onSymbolChange: onSymbolChange,\n }),\n // type({ width: 124 }),\n // side({ width: 124 }),\n fillAndQuantity({\n width: 124,\n disableEdit: true,\n className: \"oui-pl-0 oui-pr-0\",\n }),\n price({\n width: 124,\n title: t(\"common.orderPrice\"),\n disableEdit: true,\n }),\n avgPrice({ width: 124 }),\n triggerPrice({ width: 124, disableEdit: true }),\n realizedPnL({\n width: 124,\n pnlNotionalDecimalPrecision: pnlNotionalDecimalPrecision,\n sharePnLConfig: sharePnLConfig,\n symbolsInfo: props.symbolsInfo,\n hideShare: true,\n }),\n estTotal({ width: 124 }),\n fee({ width: 124 }),\n status({ width: 124 }),\n reduceOnly({ width: 124 }),\n hidden({ width: 124 }),\n orderTime({ width: 176 }),\n ];\n case TabType.cancelled:\n return [\n instrument({\n showType: true,\n width: 154,\n onSymbolChange: onSymbolChange,\n enableSort: false,\n }),\n // side({ width: 124 }),\n fillAndQuantity({\n width: 124,\n disableEdit: true,\n className: \"oui-pl-0 oui-pr-0\",\n enableSort: false,\n }),\n price({ width: 124, disableEdit: true, enableSort: false }),\n avgOpen({ width: 124, enableSort: false }),\n triggerPrice({ width: 124, disableEdit: true }),\n estTotal({ width: 124 }),\n fee({ width: 124 }),\n status({ width: 124 }),\n reduceOnly({ width: 124 }),\n hidden({ width: 124 }),\n ];\n case TabType.rejected:\n return [\n instrument({\n showType: true,\n width: 154,\n onSymbolChange: onSymbolChange,\n }),\n // side({ width: 124 }),\n fillAndQuantity({\n width: 124,\n disableEdit: true,\n className: \"oui-pl-0 oui-pr-0\",\n }),\n price({ width: 124, disableEdit: true }),\n avgOpen({ width: 124 }),\n triggerPrice({ width: 124, disableEdit: true }),\n estTotal({ width: 124 }),\n fee({ width: 124 }),\n status({ width: 124 }),\n reduceOnly({ width: 124 }),\n hidden({ width: 124 }),\n orderTime({ width: 176 }),\n ];\n case TabType.orderHistory:\n return [\n instrument({\n showType: true,\n width: 154,\n onSymbolChange: onSymbolChange,\n }),\n // side({ width: 124 }),\n fillAndQuantity({\n width: 150,\n disableEdit: true,\n className: \"oui-pl-6 oui-pr-0\",\n }),\n price({ width: 124, disableEdit: true }),\n avgOpen({ width: 124 }),\n triggerPrice({ width: 124, disableEdit: true }),\n realizedPnL({\n width: 124,\n pnlNotionalDecimalPrecision: pnlNotionalDecimalPrecision,\n sharePnLConfig: sharePnLConfig,\n symbolsInfo: props.symbolsInfo,\n }),\n estTotal({ width: 124 }),\n fee({ width: 124 }),\n status({ width: 124 }),\n reduceOnly({ width: 124 }),\n hidden({ width: 124 }),\n orderTime({ width: 150 }),\n cancelBtn({ width: 80 }),\n ];\n }\n }, [_type, pnlNotionalDecimalPrecision, sharePnLConfig, t]);\n\n return columns as Column[];\n\n // return columns();\n};\n\nfunction instrument(option?: {\n showType?: boolean;\n enableSort?: boolean;\n width?: number;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.symbol\"),\n dataIndex: \"symbol\",\n fixed: \"left\",\n // className: \"oui-h-[48px]\",\n width: option?.width,\n onSort: option?.enableSort\n ? (r1, r2) => {\n return r1.symbol.localeCompare(r2.symbol);\n // if (sortOrder === \"asc\") {\n // return r1.symbol.localeCompare(r2.symbol);\n // }\n // return r2.symbol.localeCompare(r1.symbol);\n }\n : undefined,\n renderPlantText: (value: string, record) => {\n const badges = parseBadgesFor(record)?.join(\",\");\n const displayBadges = badges?.length ? ` (${badges})` : \"\";\n return `${value.split(\"_\")[1]}-PERP${displayBadges}`;\n },\n render: (value: string, record) => {\n const showGray = grayCell(record);\n\n return (\n <Flex gap={2}>\n <div\n className={cn(\n \"oui-rounded-[1px] oui-w-1 oui-h-7 oui-shrink-0\",\n record.side === OrderSide.BUY\n ? \"oui-bg-trade-profit\"\n : \"oui-bg-trade-loss\",\n )}\n />\n <Flex direction=\"column\" itemAlign={\"start\"}>\n <Text.formatted\n // rule={\"symbol\"}\n size=\"xs\"\n className=\"oui-cursor-pointer oui-text-xs\"\n onClick={(e) => {\n option?.onSymbolChange?.({ symbol: value } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${value.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n\n {option?.showType && (\n <Flex direction={\"row\"} gap={1}>\n {parseBadgesFor(record)?.map((e, index) => (\n <Badge\n key={index}\n color={\n e.toLocaleLowerCase() === \"position\"\n ? showGray\n ? \"neutral\"\n : \"primary\"\n : \"neutral\"\n }\n size=\"xs\"\n className=\"oui-break-normal oui-whitespace-nowrap\"\n >\n {e}\n </Badge>\n ))}\n </Flex>\n )}\n </Flex>\n </Flex>\n );\n },\n };\n}\n\nfunction side(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.side\"),\n dataIndex: \"side\",\n width: option?.width,\n // className: \"oui-h-[48px]\",\n onSort: option?.enableSort\n ? (r1, r2, sortOrder) => {\n return r2.side.localeCompare(r1.side);\n // if (sortOrder === \"asc\") {\n // return r2.side.localeCompare(r1.side);\n // }\n // return r1.side.localeCompare(r2.side);\n }\n : undefined,\n renderPlantText: (value: string, record) => upperCaseFirstLetter(value),\n render: (value: string, record) => {\n const clsName = grayCell(record)\n ? \"oui-text-base-contrast-20\"\n : value === OrderSide.BUY\n ? \"oui-text-trade-profit\"\n : \"oui-text-trade-loss\";\n return (\n <span className={cn(\"oui-font-semibold\", clsName)}>\n {upperCaseFirstLetter(value)}\n </span>\n );\n },\n };\n}\n\nfunction type(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.type\"),\n dataIndex: \"type\",\n width: option?.width,\n className: option?.className,\n formatter: (value: string, record: any) => {\n if (!!record.parent_algo_type) {\n if (record.algo_type === AlgoOrderType.STOP_LOSS) {\n return record.type === OrderType.CLOSE_POSITION\n ? `Position SL`\n : \"SL\";\n }\n\n if (record.algo_type === AlgoOrderType.TAKE_PROFIT) {\n return record.type === OrderType.CLOSE_POSITION\n ? `Position TP`\n : \"TP\";\n }\n }\n\n if (record.algo_order_id) {\n return `Stop ` + `${record.type}`.toLowerCase();\n }\n return upperCaseFirstLetter(value);\n },\n };\n}\n\nfunction fillAndQuantity(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n disableEdit?: boolean;\n}): Column<API.AlgoOrderExt> {\n return {\n title: i18n.t(\"orders.column.fill&Quantity\"),\n dataIndex: \"fill_quantity\",\n className: option?.className,\n width: option?.width,\n onSort:\n (option?.enableSort ?? false)\n ? (a, b) => {\n const aQuantity =\n (a.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? 0\n : a.quantity) ?? 0;\n const bQuantity =\n (b.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? 0\n : b.quantity) ?? 0;\n\n return compareNumbers(aQuantity, bQuantity);\n\n // if (type == \"asc\") {\n // return compareNumbers(aQuantity, bQuantity);\n // }\n // return compareNumbers(bQuantity, aQuantity);\n }\n : undefined,\n\n renderPlantText: (value: string, record: any) => {\n if (\n record.type === OrderType.CLOSE_POSITION &&\n record.status !== OrderStatus.FILLED\n ) {\n return i18n.t(\"tpsl.entirePosition\");\n }\n\n const executed = (record as API.OrderExt).total_executed_quantity;\n const first =\n \"algo_type\" in record && record.algo_type === AlgoOrderRootType.TP_SL\n ? \"\"\n : `${executed} / `;\n return first + `${record.quantity}`;\n },\n render: (value: string, record: any) => {\n if (\n record.type === OrderType.CLOSE_POSITION &&\n record.status !== OrderStatus.FILLED\n ) {\n return i18n.t(\"tpsl.entirePosition\");\n }\n return <OrderQuantity order={record} disableEdit={option?.disableEdit} />;\n // return value;\n },\n };\n}\n\nfunction quantity(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.AlgoOrderExt> {\n return {\n title: i18n.t(\"common.quantity\"),\n className: option?.className,\n dataIndex: \"quantity\",\n width: option?.width,\n onSort:\n (option?.enableSort ?? false)\n ? (a, b) => {\n const aQuantity =\n (a.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? 0\n : a.quantity) ?? 0;\n const bQuantity =\n (b.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? 0\n : b.quantity) ?? 0;\n return compareNumbers(aQuantity, bQuantity);\n // if (type == \"asc\") {\n // return compareNumbers(aQuantity, bQuantity);\n // }\n // return compareNumbers(bQuantity, aQuantity);\n }\n : undefined,\n renderPlantText: (value: string, record: any) => {\n if (record.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n return i18n.t(\"tpsl.entirePosition\");\n }\n\n const executed = (record as API.OrderExt).total_executed_quantity;\n const first =\n \"algo_type\" in record && record.algo_type === AlgoOrderRootType.TP_SL\n ? \"\"\n : `${executed}/`;\n return first + `${record.quantity}`;\n },\n render: (value: string, record: any) => {\n if (record.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n return i18n.t(\"tpsl.entirePosition\");\n }\n return <OrderQuantity order={record} />;\n // return value;\n },\n };\n}\n\nfunction price(option?: {\n title?: string;\n enableSort?: boolean;\n width?: number;\n className?: string;\n disableEdit?: boolean;\n}): Column<API.Order> {\n return {\n title: option?.title ?? i18n.t(\"common.price\"),\n dataIndex: \"price\",\n className: option?.className,\n width: option?.width,\n onSort:\n (option?.enableSort ?? false)\n ? (a, b, type) => {\n return compareNumbers(a.price ?? 0, b.price ?? 0);\n }\n : undefined,\n renderPlantText: (value: string, record: any) => {\n return commifyOptional(record.price?.toString(), {\n fallback: i18n.t(\"common.marketPrice\"),\n });\n },\n render: (value: string, record: any) => {\n return <Price order={record} disableEdit={option?.disableEdit} />;\n },\n };\n}\n\nfunction tpslPrice(option?: {\n title?: string;\n enableSort?: boolean;\n width?: number;\n className?: string;\n disableEdit?: boolean;\n}): Column<API.Order> {\n return {\n title: option?.title ?? i18n.t(\"common.price\"),\n dataIndex: \"price\",\n className: option?.className,\n width: option?.width,\n onSort: option?.enableSort,\n renderPlantText: (value: string, record: any) => {\n const { tpTriggerPrice, slTriggerPrice } = useTPSLOrderPrice(record);\n const callback = `${tpTriggerPrice || \"\"}${\n slTriggerPrice ? `${tpTriggerPrice ? \"\\n\" : \"\"}${slTriggerPrice}` : \"\"\n }`;\n\n return callback.length > 0 ? callback : \"--\";\n },\n render: (value: string, record: any) => {\n return <TPSLOrderPrice />;\n },\n };\n}\n\nfunction avgPrice(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n disableEdit?: boolean;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.avgPrice\"),\n dataIndex: \"average_executed_price\",\n className: option?.className,\n width: option?.width,\n onSort: option?.enableSort,\n render: (value: string, record: any) => commifyOptional(value),\n };\n}\n\nfunction triggerPrice(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n disableEdit?: boolean;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.trigger\"),\n className: option?.className,\n dataIndex: \"trigger_price\",\n width: option?.width,\n onSort: option?.enableSort,\n renderPlantText: (value: string, record: any) => {\n const isAlgoOrder = record?.algo_order_id !== undefined;\n const isBracketOrder = record?.algo_type === \"BRACKET\";\n if (!isAlgoOrder || isBracketOrder) {\n return \"--\";\n }\n return commifyOptional(value);\n },\n render: (value: string, record: any) => (\n <TriggerPrice order={record} disableEdit={option?.disableEdit} />\n ),\n };\n}\n\nfunction tpslTriggerPrice(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n title?: string;\n symbolsInfo?: SymbolInfo;\n}): Column<API.Order> {\n return {\n title: option?.title ?? i18n.t(\"common.trigger\"),\n className: option?.className,\n dataIndex: \"tpsl_trigger_price\",\n width: option?.width,\n onSort: option?.enableSort,\n renderPlantText: (value: string, record: any) => {\n const info = option?.symbolsInfo?.[record.symbol];\n const quote_dp = info?.(\"quote_dp\");\n // @ts-ignore\n const { sl_trigger_price, tp_trigger_price } =\n !(\"algo_type\" in record) || !Array.isArray(record.child_orders)\n ? {}\n : utils.findTPSLFromOrder(record);\n\n const callback =\n (tp_trigger_price != null\n ? `${i18n.t(\"tpsl.tp\")}: ${commifyOptional(tp_trigger_price, {\n fix: quote_dp,\n padEnd: true,\n })}`\n : \"\") +\n (sl_trigger_price != null\n ? `${tp_trigger_price ? \"\\n\" : \"\"}${i18n.t(\n \"tpsl.sl\",\n )}: ${commifyOptional(sl_trigger_price, {\n fix: quote_dp,\n padEnd: true,\n })}`\n : \"\");\n return callback.length > 0 ? callback : \"--\";\n },\n render: (value: string, record: any) => <OrderTriggerPrice />,\n };\n}\n\nfunction bracketOrderPrice(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}) {\n return {\n title: i18n.t(\"common.tpsl\"),\n className: option?.className,\n dataIndex: \"bracketOrderPrice\",\n width: option?.width,\n onSort: option?.enableSort,\n renderPlantText: (value: string, record: any) => {\n const getTPSLTriggerPrice = (): {\n sl_trigger_price?: number;\n tp_trigger_price?: number;\n } => {\n if (!(\"algo_type\" in record) || !Array.isArray(record.child_orders)) {\n return {};\n }\n return utils.findTPSLFromOrder(record.child_orders[0]);\n };\n\n const { sl_trigger_price, tp_trigger_price } = getTPSLTriggerPrice();\n\n const callback =\n (tp_trigger_price != null\n ? `${i18n.t(\"tpsl.tp\")}: ${tp_trigger_price}`\n : \"\") +\n (sl_trigger_price != null\n ? `${tp_trigger_price ? \"\\n\" : \"\"}${i18n.t(\n \"tpsl.sl\",\n )}: ${sl_trigger_price}`\n : \"\");\n return callback.length > 0 ? callback : \"--\";\n },\n render: (value: string, record: any) => (\n <BracketOrderPrice order={record} />\n ),\n };\n}\n\nfunction estTotal(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n isPending?: boolean;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.notional\"),\n dataIndex: \"executed\",\n width: option?.width,\n className: option?.className,\n onSort:\n (option?.enableSort ?? false)\n ? (a, b, type) => {\n const aTotal =\n a.type === OrderType.CLOSE_POSITION &&\n a.status !== OrderStatus.FILLED\n ? 0\n : a.total_executed_quantity === 0 ||\n Number.isNaN(a.average_executed_price) ||\n a.average_executed_price === null\n ? 0\n : a.total_executed_quantity * a.average_executed_price;\n const bTotal =\n b.type === OrderType.CLOSE_POSITION &&\n b.status !== OrderStatus.FILLED\n ? 0\n : b.total_executed_quantity === 0 ||\n Number.isNaN(b.average_executed_price) ||\n b.average_executed_price === null\n ? 0\n : b.total_executed_quantity * b.average_executed_price;\n return compareNumbers(aTotal, bTotal);\n // if (type === \"asc\") {\n // return compareNumbers(aTotal, bTotal);\n // }\n // return compareNumbers(bTotal, aTotal);\n }\n : undefined,\n renderPlantText: (value: string, record: any) => {\n const estTotal = estTotalValue(record, option?.isPending ?? false);\n\n if (estTotal === \"Entire position\") {\n return i18n.t(\"tpsl.entirePosition\");\n }\n\n return commifyOptional(\n estTotalValue(record, option?.isPending ?? false),\n { fix: 2 },\n );\n },\n render: (value: string, record: any) => {\n const estTotal = estTotalValue(record, option?.isPending ?? false);\n\n if (estTotal === \"Entire position\") {\n return i18n.t(\"tpsl.entirePosition\");\n }\n\n return (\n <Text.numeral rm={Decimal.ROUND_DOWN} dp={2}>\n {estTotal}\n </Text.numeral>\n );\n },\n };\n}\n\nfunction realizedPnL(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n symbolsInfo?: SymbolInfo;\n hideShare?: boolean;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.realizedPnl\"),\n dataIndex: \"realized_pnl\",\n width: option?.width,\n className: option?.className,\n renderPlantText: (_value: string, record: any) => {\n const info = option?.symbolsInfo?.[record.symbol];\n const quote_dp = info?.(\"quote_dp\");\n const dp = option?.pnlNotionalDecimalPrecision ?? quote_dp;\n const value = new Decimal(_value ?? 0)\n .toDecimalPlaces(dp, Decimal.ROUND_DOWN)\n .toNumber();\n\n const formatValue = commifyOptional(value);\n\n return value > 0 ? `+${formatValue}` : formatValue;\n },\n render: (_value: number | undefined, record: any) => {\n const { quote_dp } = useSymbolContext();\n const dp = option?.pnlNotionalDecimalPrecision ?? quote_dp;\n const value = new Decimal(_value ?? 0)\n .toDecimalPlaces(dp, Decimal.ROUND_DOWN)\n .toNumber();\n // wraper flex\n return (\n <Flex gap={1}>\n <Text.numeral\n dp={dp}\n rm={Decimal.ROUND_DOWN}\n padding={false}\n intensity={(value ?? 0) == 0 ? 80 : undefined}\n showIdentifier={(value ?? 0) > 0}\n coloring={(value ?? 0) != 0}\n >\n {value ?? \"--\"}\n </Text.numeral>\n {!option?.hideShare && (\n <ShareButtonWidget\n order={record}\n sharePnLConfig={option?.sharePnLConfig}\n modalId={SharePnLDialogId}\n />\n )}\n </Flex>\n );\n },\n };\n}\n\nfunction reduceOnly(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"orderEntry.reduceOnly\"),\n dataIndex: \"reduce_only\",\n width: option?.width,\n className: option?.className,\n renderPlantText: (value: string, record: any) => {\n return value ? i18n.t(\"common.yes\") : i18n.t(\"common.no\");\n },\n render: (value: boolean) => {\n return <Text>{value ? i18n.t(\"common.yes\") : i18n.t(\"common.no\")}</Text>;\n },\n };\n}\n\nfunction hidden(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"orders.column.hidden\"),\n dataIndex: \"visible\",\n width: option?.width,\n className: option?.className,\n renderPlantText: (value: number, record: any) => {\n return value !== 0 ? i18n.t(\"common.no\") : i18n.t(\"common.yes\");\n },\n render: (value: number, record) => {\n return (\n <Text>\n {record.visible_quantity !== 0\n ? i18n.t(\"common.no\")\n : i18n.t(\"common.yes\")}\n </Text>\n );\n },\n };\n}\n\nfunction orderTime(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n formatString?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"orders.column.orderTime\"),\n dataIndex: \"created_time\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\n renderPlantText: (value: string, record: any) => {\n const date = new Date(value);\n const formattedDate = format(date, \"yyyy-MM-dd HH:mm:ss\");\n return formattedDate;\n },\n render: (value: string) => (\n <Text.formatted\n rule={\"date\"}\n formatString={option?.formatString || \"yyyy-MM-dd HH:mm:ss\"}\n className=\"oui-break-normal oui-whitespace-nowrap oui-font-semibold\"\n >\n {value}\n </Text.formatted>\n ),\n };\n}\n\nfunction fee(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.fee\"),\n dataIndex: \"total_fee\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\n };\n}\n\nfunction notional(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.notional\"),\n dataIndex: \"notional\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\n renderPlantText: (value: number, record: any) => {\n return commifyOptional(value, { fix: 2 });\n },\n render: (value?: string) => (\n <Text.numeral className=\"oui-break-normal oui-whitespace-nowrap oui-font-semibold\">\n {value ?? \"--\"}\n </Text.numeral>\n ),\n };\n}\n\nfunction tpslNotional(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.notional\"),\n dataIndex: \"executed\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\n renderPlantText: (value: any, record: any) => {\n if (record.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n return i18n.t(\"tpsl.entirePosition\");\n }\n return commifyOptional(\n record.quantity === 0\n ? \"--\"\n : `${new Decimal(record.mark_price)\n .mul(record.quantity)\n .todp(2)\n .toNumber()}`,\n );\n },\n render: (value: any, record: any) => {\n if (record.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n return i18n.t(\"tpsl.entirePosition\");\n }\n\n return (\n <Text.numeral className=\"oui-break-normal oui-whitespace-nowrap oui-font-semibold\">\n {record.quantity === 0\n ? \"--\"\n : `${new Decimal(record.mark_price)\n .mul(record.quantity)\n .todp(2)\n .toNumber()}`}\n </Text.numeral>\n );\n },\n };\n}\n\nfunction status(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n const statusMap = {\n [OrderStatus.NEW]: i18n.t(\"orders.status.pending\"),\n [OrderStatus.FILLED]: i18n.t(\"orders.status.filled\"),\n [OrderStatus.PARTIAL_FILLED]: i18n.t(\"orders.status.partialFilled\"),\n [OrderStatus.CANCELLED]: i18n.t(\"orders.status.canceled\"),\n [OrderStatus.REJECTED]: i18n.t(\"orders.status.rejected\"),\n [OrderStatus.INCOMPLETE]: i18n.t(\"orders.status.incomplete\"),\n [OrderStatus.COMPLETED]: i18n.t(\"orders.status.completed\"),\n };\n return {\n title: i18n.t(\"common.status\"),\n dataIndex: \"status\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\n renderPlantText: (value: string, record: any) => {\n const status = value || record.algo_status;\n return (\n statusMap[status as keyof typeof statusMap] ||\n upperCaseFirstLetter(status)\n );\n },\n render: (value: string, record: any) => {\n const status = value || record.algo_status;\n return (\n statusMap[status as keyof typeof statusMap] ||\n upperCaseFirstLetter(status)\n );\n },\n };\n}\n\nfunction avgOpen(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.avgPrice\"),\n dataIndex: \"average_executed_price\",\n width: option?.width,\n onSort:\n (option?.enableSort ?? false)\n ? (a, b) => {\n return compareNumbers(\n a.average_executed_price ?? 0,\n b.average_executed_price ?? 0,\n );\n }\n : undefined,\n className: option?.className,\n render: (value: string, record) => {\n if (record.type === OrderType.MARKET && !value) {\n return \"--\";\n }\n return (\n <Text className=\"oui-break-normal oui-whitespace-nowrap oui-font-semibold\">\n {value}\n </Text>\n );\n },\n renderPlantText: (value: string, record: any) => {\n return commifyOptional(value, { fix: 2 });\n },\n };\n}\n\nfunction cancelBtn(option?: {\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: \"\",\n type: \"action\",\n dataIndex: \"action\",\n width: option?.width,\n className: option?.className,\n align: \"right\",\n fixed: \"right\",\n render: (_: string, record: any) => {\n if (record.status === OrderStatus.CANCELLED) {\n return <Renew record={record} />;\n }\n\n if (\n record.status === OrderStatus.NEW ||\n record.algo_status === OrderStatus.NEW\n ) {\n return <CancelButton order={record} />;\n }\n\n return null;\n },\n };\n}\n\nfunction pendingTabCancelBtn(option?: {\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: \"\",\n type: \"action\",\n dataIndex: \"action\",\n width: option?.width,\n className: option?.className,\n align: \"right\",\n fixed: \"right\",\n render: (_: string, record: any) => {\n return <CancelButton order={record} />;\n },\n };\n}\n\nfunction tpslAction(option?: {\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: \"\",\n type: \"action\",\n dataIndex: \"action\",\n width: option?.width,\n className: option?.className,\n align: \"right\",\n fixed: \"right\",\n render: (_: string, record: any) => {\n return (\n <Flex gap={3}>\n <TP_SLEditButton order={record} />\n <CancelButton order={record} />\n </Flex>\n );\n },\n };\n}\n\nfunction compareNumbers(a: number, b: number): number {\n if (a > b) return 1;\n if (a < b) return -1;\n return 0;\n}\n\n// estTotal\nfunction estTotalValue(record: any, isPending: boolean): string {\n if (isPending) {\n const value = () => {\n if (record.price && record.quantity) {\n return new Decimal(record.price)\n .mul(record.quantity)\n .toFixed(2, Decimal.ROUND_DOWN);\n }\n return \"--\";\n };\n\n return value();\n }\n\n if (\n record.type === OrderType.CLOSE_POSITION &&\n record.status !== OrderStatus.FILLED\n ) {\n return i18n.t(\"tpsl.entirePosition\");\n }\n\n return record.total_executed_quantity === 0 ||\n Number.isNaN(record.average_executed_price) ||\n record.average_executed_price === null\n ? \"--\"\n : `${record.total_executed_quantity * record.average_executed_price}`;\n}\n","import { FC } from \"react\";\nimport { modal, ShareIcon } from \"@orderly.network/ui\";\nimport { ShareButtonState } from \"./shareButton.script\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const ShareButton: FC<ShareButtonState> = (props) => {\n const { t } = useTranslation();\n\n if (props.sharePnLConfig == null) return <></>;\n\n return (\n <button\n type=\"button\"\n onClick={(e: any) => {\n e.stopPropagation();\n modal.show(props.modalId, {\n pnl: {\n entity: {\n symbol: props.order.symbol,\n pnl: props.order.realized_pnl,\n side:\n props.order.side == \"BUY\"\n ? t(\"share.pnl.share.long\")\n : t(\"share.pnl.share.short\"),\n openPrice: props.order.average_executed_price,\n openTime: props.order.updated_time,\n quantity: props.order.quantity,\n },\n refCode: props.refCode,\n leverage: props.leverage,\n ...props.sharePnLConfig,\n },\n });\n }}\n >\n <ShareIcon color=\"white\" opacity={0.54} size={props.iconSize ?? 16} />\n </button>\n );\n};\n","import { useMemo } from \"react\";\nimport { useReferralInfo, useSymbolLeverage } from \"@orderly.network/hooks\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const useShareButtonScript = (props: {\n order: any;\n sharePnLConfig?: SharePnLConfig;\n modalId: string;\n iconSize?: number;\n}) => {\n const { sharePnLConfig, order, modalId, iconSize } = props;\n const { getFirstRefCode } = useReferralInfo();\n const refCode = useMemo(() => {\n return getFirstRefCode()?.code;\n }, [getFirstRefCode]);\n const leverage = useSymbolLeverage(props.order.symbol);\n return {\n iconSize,\n order,\n refCode,\n leverage,\n sharePnLConfig,\n modalId,\n };\n};\n\nexport type ShareButtonState = ReturnType<typeof useShareButtonScript>;\n","import { useShareButtonScript } from \"./shareButton.script\";\nimport { ShareButton } from \"./shareButton.ui\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const ShareButtonWidget = (props: {\n order: any;\n sharePnLConfig?: SharePnLConfig;\n modalId: string;\n iconSize?: number;\n}) => {\n const state = useShareButtonScript(props);\n return <ShareButton {...state} />;\n};\n","import { useMemo } from \"react\";\nimport { utils } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, Tooltip, Text, cn } from \"@orderly.network/ui\";\nimport { calcBracketRoiAndPnL } from \"../../../utils/util\";\nimport { useSymbolContext } from \"../../provider/symbolContext\";\n\nexport const BracketOrderPrice = (props: { order: API.AlgoOrderExt }) => {\n const { order } = props;\n const { quote_dp, base_dp } = useSymbolContext();\n const { t } = useTranslation();\n\n const { sl_trigger_price, tp_trigger_price } = useMemo(() => {\n if (!(\"algo_type\" in order) || !Array.isArray(order.child_orders)) {\n return {};\n }\n return utils.findTPSLFromOrder(props.order.child_orders[0]);\n }, [props.order]);\n\n const { pnl, roi } = calcBracketRoiAndPnL(order);\n\n if (!tp_trigger_price && !sl_trigger_price) {\n return \"--\";\n }\n\n return (\n <Tooltip\n // @ts-ignore\n content={\n <Flex direction={\"column\"} itemAlign={\"start\"} gap={1}>\n {typeof pnl.tpPnL !== \"undefined\" && (\n <Text.numeral\n // @ts-ignore\n prefix={\n <Text intensity={80}>{`${t(\"tpsl.tpPnl\")}:`} </Text>\n }\n suffix={<Text intensity={20}>{\" USDC\"}</Text>}\n dp={quote_dp}\n color=\"buy\"\n showIdentifier\n >\n {pnl.tpPnL}\n </Text.numeral>\n )}\n {typeof pnl.slPnL !== \"undefined\" && (\n <Text.numeral\n // @ts-ignore\n prefix={\n <Text intensity={80}>{`${t(\"tpsl.slPnl\")}:`} </Text>\n }\n suffix={<Text intensity={20}>{\" USDC\"}</Text>}\n dp={quote_dp}\n color=\"sell\"\n >\n {pnl.slPnL}\n </Text.numeral>\n )}\n </Flex>\n }\n className=\"oui-bg-base-6\"\n >\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n justify={\"start\"}\n itemAlign={\"start\"}\n >\n <Price type=\"TP\" value={tp_trigger_price} quote_dp={quote_dp} />\n <Price type=\"SL\" value={sl_trigger_price} quote_dp={quote_dp} />\n </Flex>\n </Tooltip>\n );\n};\n\nconst Price = (props: {\n type: \"TP\" | \"SL\";\n value?: number | string;\n quote_dp: number;\n}) => {\n const { type, value, quote_dp } = props;\n const { t } = useTranslation();\n\n return value ? (\n <Text.numeral\n className={cn(\n \"oui-gap-0 oui-decoration-white/20 oui-border-b oui-border-dashed oui-border-base-contrast-12\",\n type === \"TP\" ? \"oui-text-trade-profit\" : \"oui-text-trade-loss\",\n )}\n key={\"tp\"}\n rule=\"price\"\n dp={quote_dp}\n // @ts-ignore\n prefix={\n <span className={\"oui-text-base-contrast-54\"}>\n {type === \"TP\" ? `${t(\"tpsl.tp\")} -` : `${t(\"tpsl.sl\")} -`}\n \n </span>\n }\n >\n {value}\n </Text.numeral>\n ) : (\n <></>\n );\n};\n","import { FC, useState } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { ThrottledButton, toast } from \"@orderly.network/ui\";\nimport { useOrderListContext } from \"../orderListContext\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const CancelButton: FC<{\n order: API.Order;\n}> = (props) => {\n const { order } = props;\n const { t } = useTranslation();\n\n const { onCancelOrder } = useOrderListContext();\n const [isLoading, setIsLoading] = useState(false);\n\n return (\n <ThrottledButton\n size=\"sm\"\n variant={\"outlined\"}\n color={\"secondary\"}\n onClick={(event) => {\n if (!onCancelOrder) return;\n event.preventDefault();\n event.stopPropagation();\n setIsLoading(true);\n onCancelOrder(order)\n .then(\n (res: any) => res,\n (error: any) => {\n toast.error(error.message);\n }\n )\n .finally(() => {\n setIsLoading(false);\n });\n }}\n loading={isLoading}\n >\n {t(\"common.cancel\")}\n </ThrottledButton>\n );\n};\n","import {\n FC,\n PropsWithChildren,\n createContext,\n useCallback,\n useContext,\n useMemo,\n} from \"react\";\nimport { getMinNotional, useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useMemoizedFn } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, OrderEntity } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\n\nexport interface OrderListContextState {\n onCancelOrder: (order: API.Order | API.AlgoOrder) => Promise<any>;\n onEditOrder: (\n order: API.Order | API.AlgoOrder,\n position?: API.Position,\n ) => Promise<any>;\n editOrder: (id: string, order: OrderEntity) => Promise<any>;\n editAlgoOrder: (id: string, order: OrderEntity) => Promise<any>;\n checkMinNotional: (\n symbol: string,\n price?: string | number,\n qty?: string | number,\n ) => string | undefined;\n}\n\nexport const OrderListContext = createContext<OrderListContextState>(\n {} as OrderListContextState,\n);\n\nexport const useOrderListContext = () => {\n return useContext(OrderListContext);\n};\n\nexport interface OrderListProviderProps {\n cancelOrder: (orderId: number, symbol: string) => Promise<any>;\n editOrder: (orderId: string, order: OrderEntity) => Promise<any>;\n cancelAlgoOrder: (orderId: number, symbol: string) => Promise<any>;\n editAlgoOrder: (orderId: string, order: OrderEntity) => Promise<any>;\n}\n\nexport const OrderListProvider: FC<\n PropsWithChildren<OrderListProviderProps>\n> = (props) => {\n const {\n cancelOrder,\n editOrder,\n cancelAlgoOrder,\n editAlgoOrder,\n // cancelTPSLOrder,\n } = props;\n const { t } = useTranslation();\n const symbolInfo = useSymbolsInfo();\n\n const onCancelOrder = useMemoizedFn(\n async (order: API.Order | API.AlgoOrder) => {\n if (order.algo_order_id !== undefined) {\n if (\n \"root_algo_order_id\" in order &&\n order.root_algo_order_id !== order.algo_order_id\n ) {\n return cancelAlgoOrder(order.root_algo_order_id, order.symbol);\n }\n\n return cancelAlgoOrder(order.algo_order_id, order.symbol).then(\n () => {},\n );\n }\n // @ts-ignore\n return cancelOrder(order.order_id, order.symbol).then(() => {\n // toast.success(\"Order canceled successfully\");\n });\n },\n );\n\n const onEditOrder = useMemoizedFn(\n async (order: API.Order | API.AlgoOrder, position?: API.Position) => {\n const isHidden =\n order.visible_quantity !== undefined\n ? order.visible_quantity === 0\n : (order as any).visible !== undefined\n ? (order as any).visible === 0\n : false;\n const orderEntry = await modal.sheet({\n title: t(\"orders.editOrder\"),\n classNames: {\n content: \"oui-edit-order-sheet-content\",\n },\n content: <>Content</>,\n });\n },\n );\n\n const checkMinNotional = useMemoizedFn(\n (symbol: string, price?: string | number, qty?: string | number) => {\n const { min_notional } = symbolInfo[symbol]();\n const minNotional = getMinNotional({ price, qty, min_notional });\n if (minNotional !== undefined) {\n return t(\"orderEntry.total.error.min\", { value: minNotional });\n }\n },\n );\n\n const memoizedValue = useMemo<OrderListContextState>(() => {\n return {\n onCancelOrder,\n onEditOrder,\n editOrder,\n editAlgoOrder,\n checkMinNotional,\n };\n }, [onCancelOrder, onEditOrder, editOrder, editAlgoOrder, checkMinNotional]);\n\n return (\n <OrderListContext.Provider value={memoizedValue}>\n {props.children}\n </OrderListContext.Provider>\n );\n};\n","import { FC, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useSymbolPriceRange } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { cn, Flex, Popover, toast, Text } from \"@orderly.network/ui\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { grayCell } from \"../../../utils/util\";\nimport { useSymbolContext } from \"../../provider/symbolContext\";\nimport { useOrderListContext } from \"../orderListContext\";\nimport { ConfirmContent, EditType } from \"./editOrder/confirmContent\";\nimport { InnerInput } from \"./editOrder/innerInput\";\n\nexport const Price = (props: {\n order: API.OrderExt;\n disableEdit?: boolean;\n}) => {\n const { order } = props;\n const { t } = useTranslation();\n\n const [price, setPrice] = useState<string>(() => {\n if (order.type === OrderType.MARKET && !order.price) {\n return \"Market\";\n }\n return order.price?.toString() ?? \"Market\";\n });\n\n const [open, setOpen] = useState(false);\n const [editing, setEditing] = useState(false);\n\n const isAlgoOrder = order?.algo_order_id !== undefined;\n\n const isStopMarket = order?.type === \"MARKET\" && isAlgoOrder;\n\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const { editOrder, editAlgoOrder, checkMinNotional } = useOrderListContext();\n\n const { base, quote_dp } = useSymbolContext();\n const rangeInfo = useSymbolPriceRange(\n order.symbol,\n // @ts-ignore\n order.side,\n isAlgoOrder ? order.trigger_price : undefined,\n );\n const closePopover = () => {\n setOpen(false);\n setEditing(false);\n };\n const cancelPopover = () => {\n setOpen(false);\n setPrice(order.price?.toString() ?? \"Market\");\n setEditing(false);\n };\n\n const hintInfo = useMemo(() => {\n if (!rangeInfo) return \"\";\n if (isStopMarket) return \"\";\n if (!editing) return \"\";\n\n if (Number(price) > rangeInfo.max) {\n return t(\"orders.price.greaterThan\", { max: rangeInfo.max });\n }\n if (Number(price) < rangeInfo.min) {\n return t(\"orders.price.lessThan\", { min: rangeInfo.min });\n }\n return \"\";\n }, [isStopMarket, editing, rangeInfo, price, t]);\n\n const onClick = (event: any) => {\n event?.stopPropagation();\n event?.preventDefault();\n\n if (hintInfo.length > 0) {\n return;\n }\n\n if (price === `${order.price}`) {\n setEditing(false);\n return;\n }\n\n if (order.reduce_only !== true) {\n const notionalText = checkMinNotional(\n order.symbol,\n price,\n order.quantity,\n );\n if (notionalText) {\n toast.error(notionalText);\n setIsSubmitting(false);\n cancelPopover();\n return;\n }\n }\n\n setOpen(true);\n };\n\n const handleKeyDown = (event: any) => {\n if (event.key === \"Enter\") {\n onClick(event);\n }\n };\n\n const onConfirm = () => {\n setIsSubmitting(true);\n\n let order_id = order.order_id;\n let data: any = {\n order_price: price,\n order_quantity: order.quantity,\n symbol: order.symbol,\n order_type: order.type,\n side: order.side,\n // reduce_only: Boolean(order.reduce_only),\n };\n if (typeof order.reduce_only !== \"undefined\") {\n data.reduce_only = order.reduce_only;\n }\n\n if (order.order_tag !== undefined) {\n data = { ...data, order_tag: order.order_tag };\n }\n\n if (isAlgoOrder) {\n order_id = order.algo_order_id as number;\n data = {\n ...data,\n order_id,\n price: price,\n algo_order_id: order_id,\n };\n }\n\n if (order?.visible_quantity === 0) {\n data[\"visible_quantity\"] = 0;\n }\n\n // @ts-ignore\n if (order.tag !== undefined) {\n // @ts-ignore\n data[\"order_tag\"] = order.tag;\n }\n\n let future;\n if (order.algo_order_id !== undefined) {\n future = editAlgoOrder(order.algo_order_id.toString(), data);\n } else {\n future = editOrder(order.order_id.toString(), data);\n }\n\n future\n .then(\n (result: any) => {\n closePopover();\n setPrice(price);\n // setTimeout(() => inputRef.current?.blur(), 300);\n },\n (err: any) => {\n toast.error(err.message);\n cancelPopover();\n },\n )\n .finally(() => setIsSubmitting(false));\n };\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n {\n if (!!props.order.price) {\n setPrice(`${props.order.price}`);\n }\n }\n }, [props.order.price]);\n\n const componentRef = useRef<HTMLDivElement | null>(null);\n\n const handleClickOutside = (event: any) => {\n if (\n componentRef.current &&\n !componentRef.current.contains(event.target as Node) &&\n !open\n ) {\n cancelPopover();\n }\n };\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [open, order.price]);\n\n const isAlgoMarketOrder = order.algo_order_id && order.type == \"MARKET\";\n\n if (isAlgoMarketOrder || price === \"Market\") {\n return <span>{t(\"common.marketPrice\")}</span>;\n }\n\n const trigger = () => {\n if (!editing || props.disableEdit) {\n return (\n <NormalState\n order={order}\n price={price}\n setEditing={setEditing}\n disableEdit={props.disableEdit}\n />\n );\n }\n\n return (\n <InnerInput\n inputRef={inputRef}\n dp={quote_dp}\n value={price}\n setValue={setPrice}\n setEditing={setEditing}\n handleKeyDown={handleKeyDown}\n onClick={onClick}\n onClose={cancelPopover}\n hintInfo={hintInfo}\n />\n );\n };\n\n return (\n <Popover\n open={open}\n onOpenChange={setOpen}\n content={\n <ConfirmContent\n type={EditType.price}\n base={base}\n value={price}\n cancelPopover={cancelPopover}\n isSubmitting={isSubmitting}\n onConfirm={onConfirm}\n />\n }\n >\n <div\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n ref={componentRef}\n >\n {trigger()}\n </div>\n </Popover>\n );\n};\n\nconst NormalState: FC<{\n order: any;\n price: string;\n setEditing: any;\n disableEdit?: boolean;\n}> = (props) => {\n const { order, price } = props;\n\n return (\n <div\n className={cn(\n \"oui-flex oui-max-w-[110px] oui-justify-start oui-items-center oui-gap-1 oui-relative oui-font-semibold\",\n grayCell(order) && \"oui-text-base-contrast-20\",\n )}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.setEditing(true);\n }}\n >\n <Flex\n r=\"base\"\n className={cn(\n \"oui-min-w-[70px] oui-h-[28px]\",\n !props.disableEdit &&\n \"oui-bg-base-7 oui-px-2 oui-border oui-border-line-12\",\n )}\n >\n <Text size=\"2xs\">{commifyOptional(price)}</Text>\n </Flex>\n </div>\n );\n};\n","import { FC } from \"react\";\nimport { Button, CloseIcon, ThrottledButton } from \"@orderly.network/ui\";\nimport { commify } from \"@orderly.network/utils\";\nimport { useTranslation, Trans } from \"@orderly.network/i18n\";\n\nexport enum EditType {\n quantity,\n price,\n triggerPrice,\n}\n\nexport const ConfirmContent: FC<{\n type: EditType;\n base: string;\n value: string;\n cancelPopover: () => void;\n isSubmitting: boolean;\n onConfirm: (e: any) => void;\n}> = (props) => {\n const { type, base, value, cancelPopover, isSubmitting, onConfirm } = props;\n const { t } = useTranslation();\n\n const renderLabel = () => {\n const common = {\n values: { base, value: commify(value) },\n components: [<span className=\"oui-text-warning-darken\" />],\n };\n\n switch (type) {\n case EditType.quantity:\n return (\n // @ts-ignore\n <Trans i18nKey=\"order.edit.confirm.quantity\" {...common} />\n );\n case EditType.price:\n return (\n // @ts-ignore\n <Trans i18nKey=\"order.edit.confirm.price\" {...common} />\n );\n case EditType.triggerPrice:\n return (\n // @ts-ignore\n <Trans i18nKey=\"order.edit.confirm.triggerPrice\" {...common} />\n );\n }\n };\n\n return (\n <div className=\"oui-pt-5 oui-relative\">\n <div className=\"oui-text-base-contrast-54 oui-text-2xs desktop:oui-text-sm\">\n {renderLabel()}\n </div>\n <div className=\"oui-grid oui-grid-cols-2 oui-gap-2 oui-mt-5\">\n <Button\n color=\"secondary\"\n size={\"md\"}\n onClick={cancelPopover}\n disabled={isSubmitting}\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton size={\"md\"} loading={isSubmitting} onClick={onConfirm}>\n {t(\"common.confirm\")}\n </ThrottledButton>\n </div>\n <button\n className=\"oui-absolute oui-right-0 oui-top-0 oui-text-base-contrast-54\"\n onClick={cancelPopover}\n >\n <CloseIcon size={16} color=\"white\" opacity={1} />\n </button>\n </div>\n );\n};\n","import { CheckIcon, Input, inputFormatter, Tooltip } from \"@orderly.network/ui\";\nimport { FC, useEffect } from \"react\";\n\nexport const InnerInput: FC<{\n inputRef: any;\n value: string;\n setValue: any;\n setEditing: any;\n error?: string;\n handleKeyDown: (e: any) => void;\n onClick: (e: any) => void;\n onClose: (e: any) => void;\n onFocus?: (e: any) => void;\n onBlur?: (e: any) => void;\n dp: number;\n hintInfo?: string;\n}> = (props) => {\n const {\n inputRef,\n dp,\n value,\n setValue,\n setEditing,\n error,\n handleKeyDown,\n onClick,\n onClose,\n onFocus,\n onBlur,\n hintInfo,\n } = props;\n\n useEffect(() => {\n const input = inputRef.current;\n if (input) {\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }\n setEditing(true);\n }, []);\n const open = (hintInfo?.length || 0) > 0;\n return (\n <Tooltip content={hintInfo} open={open}>\n <Input\n ref={inputRef}\n type=\"text\"\n size=\"sm\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(dp),\n inputFormatter.currencyFormatter,\n ]}\n value={value}\n onValueChange={(e) => setValue(e)}\n helpText={error}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n autoComplete=\"off\"\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyDown={handleKeyDown}\n autoFocus\n color={open ? \"danger\" : undefined}\n classNames={{\n root: \"oui-bg-base-700 oui-px-2 oui-py-1 oui-rounded\",\n input: \"oui-pr-2\",\n }}\n // prefix={\n // <CloseIcon\n // size={14}\n // color=\"white\"\n // opacity={1}\n // className=\"oui-cursor-pointer oui-opacity-50 hover:oui-opacity-100\"\n // onClick={(e) => {\n // e.stopPropagation();\n // e.preventDefault();\n // onClose(e);\n // }}\n // />\n // }\n suffix={\n <button onClick={onClick}>\n <CheckIcon\n size={18}\n color=\"white\"\n opacity={1}\n className=\"oui-cursor-pointer oui-opacity-50 hover:oui-opacity-100\"\n />\n </button>\n }\n />\n </Tooltip>\n );\n};\n","import { FC, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useMaxQty, utils } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, OrderSide } from \"@orderly.network/types\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport {\n cn,\n Flex,\n Popover,\n toast,\n Text,\n Slider,\n Button,\n PopoverTrigger,\n PopoverRoot,\n PopoverContent,\n} from \"@orderly.network/ui\";\nimport { commifyOptional, Decimal } from \"@orderly.network/utils\";\nimport { grayCell } from \"../../../utils/util\";\nimport { useSymbolContext } from \"../../provider/symbolContext\";\nimport { useOrderListContext } from \"../orderListContext\";\nimport { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\nimport { ConfirmContent, EditType } from \"./editOrder/confirmContent\";\nimport { InnerInput } from \"./editOrder/innerInput\";\n\nexport const OrderQuantity = (props: {\n order: API.OrderExt | API.AlgoOrder;\n disableEdit?: boolean;\n otherOrderQuantity?: (order: any) => number | undefined;\n}) => {\n const { order, otherOrderQuantity } = props;\n const { reduce_only } = order;\n const [quantity, originSetQuantity] = useState<string>(\n order.quantity.toString(),\n );\n\n const [editing, setEditing] = useState(false);\n\n const { t } = useTranslation();\n\n useEffect(() => {\n setQuantity(order.quantity.toString());\n }, [props.order.quantity]);\n\n const [open, setOpen] = useState(false);\n const [error, setError] = useState<string>();\n\n const { editOrder, editAlgoOrder, checkMinNotional } = useOrderListContext();\n const { onUpdateOrder: onUpdateTPSLOrder, position } =\n useTPSLOrderRowContext();\n\n const { base_dp, base, base_tick } = useSymbolContext();\n\n const setQuantity = async (qty: string, maxQty?: number): Promise<void> => {\n originSetQuantity(qty);\n const positionQty = Math.abs(position?.position_qty || 0);\n\n if (position && reduce_only && Number(qty) > positionQty) {\n setError(\n t(\"orders.quantity.lessThanPosition\", {\n quantity: positionQty,\n }),\n );\n } else {\n const quantity = Number(qty);\n if (maxQty && quantity > maxQty) {\n setError(\n t(\"orders.quantity.lessThan\", {\n quantity: commifyOptional(maxQty, {\n fix: base_dp,\n }),\n }),\n );\n } else {\n setError(undefined);\n }\n }\n return Promise.resolve();\n };\n\n const closePopover = () => {\n setOpen(false);\n setEditing(false);\n };\n const cancelPopover = () => {\n setOpen(false);\n setQuantity(order.quantity.toString());\n setEditing(false);\n };\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const clickHandler = () => {\n // console.log(\n // \"xxxxx click handler\",\n // checkMinNotional,\n // quantity,\n // error,\n // quantity\n // );\n\n if (!!error) {\n return;\n }\n\n if (Number(quantity) === Number(order.quantity)) {\n setEditing(false);\n return;\n }\n\n const price =\n order.algo_order_id !== undefined ? order.trigger_price : order.price;\n if (price !== null && order.reduce_only !== true) {\n const notionalText = checkMinNotional(order.symbol, price, quantity);\n if (notionalText) {\n toast.error(notionalText);\n setIsSubmitting(false);\n cancelPopover();\n return;\n }\n }\n\n setOpen(true);\n };\n\n const onClick = (event: any) => {\n event?.stopPropagation();\n event?.preventDefault();\n\n clickHandler();\n };\n\n const handleKeyDown = (event: any) => {\n if (event.key === \"Enter\") {\n event?.stopPropagation();\n event?.preventDefault();\n clickHandler();\n }\n };\n\n const onConfirm = useCallback(() => {\n setIsSubmitting(true);\n\n let params: any = {\n symbol: order.symbol,\n order_type: order.type,\n side: order.side,\n order_price: order.price,\n order_quantity: quantity,\n // reduce_only: Boolean(order.reduce_only),\n algo_order_id: order.algo_order_id,\n };\n\n if (\n typeof params.algo_order_id !== \"undefined\" &&\n params.order_type === \"MARKET\"\n ) {\n // stop market order\n const { order_price, ...rest } = params;\n params = rest;\n }\n\n if (typeof order.reduce_only !== \"undefined\") {\n params.reduce_only = order.reduce_only;\n }\n\n if (order.order_tag !== undefined) {\n params = { ...params, order_tag: order.order_tag };\n }\n\n if (order?.visible_quantity === 0) {\n params[\"visible_quantity\"] = 0;\n }\n\n // @ts-ignore\n if (order?.tag !== undefined) {\n // @ts-ignore\n params[\"order_tag\"] = order.tag;\n }\n\n let future;\n\n if (\"algo_type\" in order && order.algo_type === AlgoOrderRootType.TP_SL) {\n future = onUpdateTPSLOrder(order as API.AlgoOrderExt, params);\n } else {\n if (order.algo_order_id !== undefined) {\n future = editAlgoOrder(order.algo_order_id.toString(), params);\n } else {\n future = editOrder((order as API.OrderExt).order_id.toString(), params);\n }\n }\n\n future\n .then(\n (result: any) => {\n closePopover();\n setQuantity(quantity.toString());\n // setTimeout(() => inputRef.current?.blur(), 300);\n },\n (err: any) => {\n toast.error(err.message);\n setQuantity(order.quantity.toString());\n cancelPopover();\n },\n )\n .finally(() => setIsSubmitting(false));\n }, [quantity]);\n\n const componentRef = useRef<HTMLDivElement | null>(null);\n const quantitySliderRef = useRef<HTMLDivElement | null>(null);\n\n const handleClickOutside = (event: any) => {\n if (\n componentRef.current &&\n quantitySliderRef.current &&\n !componentRef.current.contains(event.target as Node) &&\n !quantitySliderRef.current.contains(event.target as Node) &&\n !open\n ) {\n cancelPopover();\n }\n };\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [open, order.quantity]);\n\n const trigger = () => {\n if (!editing || props.disableEdit) {\n return (\n <NormalState\n order={order}\n quantity={quantity}\n setEditing={setEditing}\n disableEdit={props.disableEdit}\n />\n );\n }\n\n return (\n <EditState\n inputRef={inputRef}\n quantitySliderRef={quantitySliderRef}\n base_dp={base_dp}\n base_tick={base_tick}\n quantity={quantity}\n setQuantity={setQuantity}\n editing={editing}\n setEditing={setEditing}\n handleKeyDown={handleKeyDown}\n onClick={onClick}\n onClose={cancelPopover}\n symbol={order.symbol}\n reduce_only={reduce_only}\n positionQty={position?.position_qty}\n error={error}\n confirmOpen={open}\n side={order.side}\n order={order}\n setError={setError}\n />\n );\n\n // return (\n // <InnerInput\n // inputRef={inputRef}\n // dp={base_dp}\n // value={quantity}\n // setValue={setQuantity}\n // setEditing={setEditing}\n // handleKeyDown={handleKeyDown}\n // onClick={onClick}\n // onClose={cancelPopover}\n // hintInfo={error} />\n // );\n };\n\n return (\n <Popover\n open={open}\n onOpenChange={setOpen}\n content={\n <ConfirmContent\n type={EditType.quantity}\n base={base}\n value={quantity}\n cancelPopover={cancelPopover}\n isSubmitting={isSubmitting}\n onConfirm={onConfirm}\n />\n }\n contentProps={{\n onOpenAutoFocus: (e) => {\n // e.preventDefault();\n // e.stopPropagation();\n },\n }}\n >\n <div\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n ref={componentRef}\n >\n {trigger()}\n </div>\n </Popover>\n );\n};\n\nconst NormalState: FC<{\n order: API.AlgoOrder | API.OrderExt;\n quantity: string;\n setEditing: any;\n partial?: boolean;\n disableEdit?: boolean;\n}> = (props) => {\n const { order, quantity } = props;\n\n const executed = (order as API.OrderExt).total_executed_quantity;\n\n return (\n <Flex\n direction=\"row\"\n justify={\"start\"}\n gap={1}\n className={cn(\n \"oui-max-w-[110px] oui-relative\",\n\n order.side === OrderSide.BUY && \"oui-text-trade-profit\",\n order.side === OrderSide.SELL && \"oui-text-trade-loss\",\n grayCell(order) && \"oui-text-base-contrast-20\",\n )}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.setEditing(true);\n }}\n >\n {\"algo_type\" in order &&\n order.algo_type === AlgoOrderRootType.TP_SL ? null : (\n <>\n <span>{executed}</span>\n <span>/</span>\n </>\n )}\n\n <Flex\n r=\"base\"\n className={cn(\n \"oui-min-w-[70px] oui-h-[28px]\",\n\n !props.disableEdit &&\n \"oui-bg-base-7 oui-px-2 oui-border oui-border-line-12\",\n )}\n >\n <Text size=\"2xs\">{quantity}</Text>\n </Flex>\n </Flex>\n );\n};\n\nconst EditState: FC<{\n inputRef: any;\n quantitySliderRef: any;\n base_dp: number;\n base_tick: number;\n quantity: string;\n setQuantity: (quantity: string, maxQty: number) => Promise<void>;\n editing: boolean;\n confirmOpen: boolean;\n setEditing: (value: boolean) => void;\n handleKeyDown: (e: any) => void;\n onClick: (e: any) => void;\n onClose: () => void;\n error?: string;\n symbol: string;\n reduce_only: boolean;\n positionQty?: number;\n side?: string;\n order: any;\n setError: (err: string) => void;\n}> = (props) => {\n const {\n inputRef,\n quantitySliderRef,\n base_dp,\n base_tick,\n quantity,\n setQuantity,\n editing,\n setEditing,\n handleKeyDown,\n onClick,\n onClose,\n error,\n symbol,\n reduce_only,\n positionQty,\n confirmOpen,\n side,\n order,\n } = props;\n\n // const { maxQty } = useOrderEntry(symbol, {\n // initialOrder: {\n // side,\n // },\n // });\n\n const maxQty = useMaxQty(symbol, order.side, order.reduce_only);\n\n const qty = useMemo(() => {\n if (reduce_only) {\n return Math.abs(positionQty ?? 0);\n }\n return order.quantity + Math.abs(maxQty);\n }, [order.quantity, maxQty, reduce_only, positionQty]);\n\n const [sliderValue, setSliderValue] = useState<number | undefined>(undefined);\n\n useEffect(() => {\n if (sliderValue === undefined) {\n const sliderValue = new Decimal(quantity)\n .div(qty)\n .abs()\n .mul(100)\n .toNumber();\n setSliderValue(sliderValue);\n }\n }, [sliderValue, qty, quantity]);\n\n const formatQuantity = async (_qty: string | number): Promise<void> => {\n if (base_tick > 0) {\n _qty = utils.formatNumber(_qty, base_tick) ?? _qty;\n }\n return setQuantity(`${_qty}`, qty);\n };\n\n return (\n <PopoverRoot open={!confirmOpen}>\n <PopoverTrigger>\n <InnerInput\n inputRef={inputRef}\n dp={base_dp}\n value={quantity}\n setValue={(e: string) => {\n const quantity = Math.abs(Math.min(Number(e), qty)).toString();\n setQuantity(e, qty);\n if (e.endsWith(\".\")) return;\n if (Number(quantity) === 0) {\n setSliderValue(0);\n return;\n }\n const sliderValue = new Decimal(e)\n .div(qty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n setSliderValue(Math.min(100, sliderValue));\n }}\n setEditing={setEditing}\n handleKeyDown={handleKeyDown}\n onClick={onClick}\n onClose={onClose}\n onBlur={(e) => {\n formatQuantity(e.target.value);\n }}\n hintInfo={error}\n />\n </PopoverTrigger>\n <PopoverContent\n className=\"oui-w-[360px] oui-rounded-xl\"\n align=\"start\"\n side=\"bottom\"\n onOpenAutoFocus={(event) => {\n // event.stopPropagation();\n event.preventDefault();\n }}\n >\n <Flex\n p={1}\n gap={2}\n width={\"100%\"}\n itemAlign={\"start\"}\n ref={quantitySliderRef}\n >\n <Text.numeral\n size=\"xs\"\n intensity={98}\n className=\"oui-min-w-[30px] \"\n dp={2}\n padding={false}\n unit=\"%\"\n rm={Decimal.ROUND_DOWN}\n >\n {`${sliderValue}`}\n </Text.numeral>\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n className=\"oui-mt-[6px]\"\n >\n <Slider\n markCount={4}\n value={[sliderValue ?? 0]}\n onValueChange={(e) => {\n const values = Array.from(e.values());\n setSliderValue(values[0]);\n const quantity = new Decimal(values[0])\n .div(100)\n .mul(qty)\n .abs()\n .toFixed(base_dp, Decimal.ROUND_DOWN);\n setQuantity(quantity, qty);\n }}\n onValueCommit={(values) => {\n const quantity = new Decimal(values[0])\n .div(100)\n .mul(qty)\n .abs()\n .toFixed(base_dp, Decimal.ROUND_DOWN);\n formatQuantity(quantity).finally(() => {\n inputRef.current.focus();\n });\n }}\n />\n <Buttons\n onClick={(value) => {\n setSliderValue(value * 100);\n let quantity = new Decimal(value)\n .mul(qty)\n .abs()\n .toFixed(base_dp, Decimal.ROUND_DOWN);\n quantity = utils.formatNumber(quantity, base_tick) ?? quantity;\n\n setQuantity(quantity, qty);\n setTimeout(() => {\n inputRef.current.focus();\n inputRef.current.setSelectionRange(\n quantity.length,\n quantity.length,\n );\n }, 100);\n }}\n />\n </Flex>\n </Flex>\n </PopoverContent>\n </PopoverRoot>\n );\n\n // return (\n // <Popover\n // open={editing}\n // onOpenChange={setSliderOpen}\n // content={\n // <Flex p={1} gap={2} width={\"100%\"} itemAlign={\"start\"}>\n // <Text size=\"xs\" intensity={98} className=\"oui-min-w-[30px]\">\n // {`${sliderValue}%`}\n // </Text>\n // <Flex direction={\"column\"} width={\"100%\"} gap={2}>\n // <Slider\n // markCount={4}\n // value={[sliderValue]}\n // onValueChange={(e) => {\n // const values = Array.from(e.values());\n // setSliderValue(values[0]);\n // // resetQuantity(values[0]);\n // }}\n // />\n // <Buttons\n // onClick={(value) => {\n // setSliderValue(value * 100);\n // // resetQuantity(value * 100);\n // }}\n // />\n // </Flex>\n // </Flex>\n // }\n // >\n // <InnerInput\n // inputRef={inputRef}\n // dp={base_dp}\n // value={quantity}\n // setValue={setQuantity}\n // setEditing={setEditing}\n // handleKeyDown={handleKeyDown}\n // onClick={onClick}\n // onClose={onClose}\n // hintInfo={error}\n // onFocus={(e) => {\n // setSliderOpen(true);\n // }}\n // onBlur={(e) => {\n // setSliderOpen(false);\n // }}\n // />\n // </Popover>\n // );\n};\n\nconst Buttons = (props: { onClick: (value: number) => void }) => {\n const { t } = useTranslation();\n const list = [\n {\n label: \"0%\",\n value: 0,\n },\n {\n label: \"25%\",\n value: 0.25,\n },\n {\n label: \"50%\",\n value: 0.5,\n },\n {\n label: \"75%\",\n value: 0.75,\n },\n {\n label: t(\"common.max\"),\n value: 1,\n },\n ];\n\n return (\n <Flex gap={2} width={\"100%\"}>\n {list.map((item, index) => {\n return (\n <Button\n key={index}\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.onClick(item.value);\n }}\n className=\"oui-w-1/5\"\n >\n {item.label}\n </Button>\n );\n })}\n </Flex>\n );\n};\n","import {\n createContext,\n FC,\n PropsWithChildren,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport {\n unstable_serialize,\n useAccount,\n useMemoizedFn,\n useMutation,\n useSWRConfig,\n utils,\n} from \"@orderly.network/hooks\";\nimport {\n findTPSLOrderPriceFromOrder,\n findTPSLFromOrder,\n} from \"@orderly.network/hooks\";\nimport { API, OrderType } from \"@orderly.network/types\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport { useSymbolContext } from \"../provider/symbolContext\";\n\nexport type TPSLOrderRowContextState = {\n order: API.AlgoOrderExt;\n tp_trigger_price?: number;\n sl_trigger_price?: number;\n sl_order_price?: number | OrderType;\n tp_order_price?: number | OrderType;\n tpPnL?: number;\n slPnL?: number;\n\n onCancelOrder: (order: API.AlgoOrderExt) => Promise<void>;\n onUpdateOrder: (order: API.AlgoOrderExt, params: any) => Promise<void>;\n\n getRelatedPosition: (symbol: string) => API.PositionTPSLExt | undefined;\n\n position?: API.PositionTPSLExt;\n};\n\nexport const TPSLOrderRowContext = createContext<TPSLOrderRowContextState>(\n {} as TPSLOrderRowContextState,\n);\n\nexport const useTPSLOrderRowContext = () => {\n return useContext(TPSLOrderRowContext);\n};\n\nexport const TPSLOrderRowProvider: FC<\n PropsWithChildren<{ order: API.AlgoOrderExt }>\n> = (props) => {\n const { order, children } = props;\n const { quote_dp } = useSymbolContext();\n const [position, setPosition] = useState<API.PositionTPSLExt>();\n\n const [doDeleteOrder] = useMutation(\"/v1/algo/order\", \"DELETE\");\n const [doUpdateOrder] = useMutation(\"/v1/algo/order\", \"PUT\");\n\n const config = useSWRConfig();\n const { state } = useAccount();\n\n const positionKey = useMemo(() => {\n return unstable_serialize(() => [\"/v1/positions\", state.accountId]);\n }, [state.accountId]);\n\n const onCancelOrder = useMemoizedFn(async (order: API.AlgoOrderExt) => {\n return doDeleteOrder(null, {\n order_id: order.algo_order_id,\n symbol: order.symbol,\n });\n });\n\n const onUpdateOrder = useMemoizedFn(\n async (order: API.AlgoOrderExt, params: any) => {\n return doUpdateOrder({\n order_id: order.algo_order_id,\n child_orders: order.child_orders.map((order) => ({\n order_id: order.algo_order_id,\n quantity: params.order_quantity,\n })),\n });\n },\n );\n\n const getRelatedPosition = useMemoizedFn(\n (symbol: string): API.PositionTPSLExt => {\n const positions = config.cache.get(positionKey);\n return positions?.data.rows.find(\n (p: API.PositionTPSLExt) => p.symbol === symbol,\n );\n },\n );\n\n const {\n sl_trigger_price,\n tp_trigger_price,\n tpPnL,\n slPnL,\n sl_order_price,\n tp_order_price,\n } = calcTPSLPnL({\n order: order,\n position,\n quote_dp,\n });\n\n useEffect(() => {\n if (\"algo_type\" in order || ((order as any)?.reduce_only ?? false)) {\n const position = getRelatedPosition(order.symbol);\n if (position) {\n setPosition(position);\n }\n }\n }, [order.symbol]);\n\n const memoizedValue = useMemo<TPSLOrderRowContextState>(() => {\n return {\n order: order,\n sl_trigger_price,\n tp_trigger_price,\n sl_order_price,\n tp_order_price,\n tpPnL,\n slPnL,\n position,\n onCancelOrder,\n onUpdateOrder,\n getRelatedPosition,\n };\n }, [\n order,\n sl_trigger_price,\n tp_trigger_price,\n sl_order_price,\n tp_order_price,\n tpPnL,\n slPnL,\n position,\n onCancelOrder,\n onUpdateOrder,\n getRelatedPosition,\n ]);\n\n return (\n <TPSLOrderRowContext.Provider value={memoizedValue}>\n {children}\n </TPSLOrderRowContext.Provider>\n );\n};\n\nfunction calcTPSLPnL(props: {\n order: API.AlgoOrderExt;\n position?: API.PositionTPSLExt;\n quote_dp: number;\n}) {\n const { order, position, quote_dp } = props;\n\n if (!position)\n return {\n sl_trigger_price: undefined,\n tp_trigger_price: undefined,\n slPnL: undefined,\n tpPnL: undefined,\n };\n\n const isTPSLOrder = \"algo_type\" in order && Array.isArray(order.child_orders);\n\n const { sl_trigger_price, tp_trigger_price } = isTPSLOrder\n ? findTPSLFromOrder(order)\n : {\n sl_trigger_price: undefined,\n tp_trigger_price: undefined,\n };\n const { sl_order_price, tp_order_price } = isTPSLOrder\n ? findTPSLOrderPriceFromOrder(order)\n : {\n sl_order_price: undefined,\n tp_order_price: undefined,\n };\n\n let quantity = order.quantity;\n\n if (quantity === 0) {\n if (order.child_orders?.[0].type === \"CLOSE_POSITION\") {\n quantity = position.position_qty;\n }\n }\n\n const avgOpenPrice = position.average_open_price;\n const tpPnL =\n typeof quantity === \"number\" &&\n typeof tp_trigger_price === \"number\" &&\n typeof avgOpenPrice === \"number\"\n ? utils.priceToPnl(\n {\n qty: quantity,\n price: tp_trigger_price,\n entryPrice: position.average_open_price,\n orderSide: order.side as OrderSide,\n orderType: AlgoOrderType.TAKE_PROFIT,\n },\n { symbol: { quote_dp } },\n )\n : undefined;\n\n const slPnL =\n typeof quantity === \"number\" &&\n typeof sl_trigger_price === \"number\" &&\n typeof avgOpenPrice === \"number\"\n ? utils.priceToPnl(\n {\n qty: quantity,\n price: sl_trigger_price,\n entryPrice: position.average_open_price,\n orderSide: order.side as OrderSide,\n orderType: AlgoOrderType.STOP_LOSS,\n },\n { symbol: { quote_dp } },\n )\n : undefined;\n\n return {\n sl_trigger_price,\n tp_trigger_price,\n sl_order_price,\n tp_order_price,\n slPnL,\n tpPnL,\n };\n}\n","import { FC, useCallback, useState } from \"react\";\nimport { useConfig, useMutation } from \"@orderly.network/hooks\";\nimport { OrderEntity } from \"@orderly.network/types\";\nimport { Button } from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const Renew: FC<{ record: any }> = (props) => {\n const { record } = props;\n const [open, setOpen] = useState(false);\n const [doCreateOrder, { data, error, reset, isMutating }] = useMutation<\n OrderEntity,\n any\n >(\"/v1/order\");\n\n const { t } = useTranslation();\n\n const brokerId = useConfig(\"brokerId\");\n const onSubmit = useCallback(() => {\n setOpen(false);\n const data: OrderEntity = {\n symbol: record.symbol,\n order_type: record.type,\n order_price: record.price,\n order_quantity: record.quantity,\n order_amount: record.amount,\n // visible_quantity: record.visible,\n side: record.side,\n // reduce_only: record.reduce_only,\n broker_id: brokerId,\n };\n\n if (Number(record.visible_quantity) < Number(record.quantity)) {\n data.visible_quantity = 0;\n }\n\n if (typeof record.reduce_only !== \"undefined\") {\n data.reduce_only = record.reduce_only;\n }\n\n doCreateOrder(data);\n }, []);\n\n return (\n <Button\n size={\"sm\"}\n variant={\"outlined\"}\n color={\"secondary\"}\n loading={isMutating}\n disabled={isMutating}\n onClick={(event) => {\n if (isMutating) return;\n event.preventDefault();\n event.stopPropagation();\n onSubmit();\n }}\n >\n {t(\"orders.history.renew\")}\n </Button>\n );\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { PositionTPSLPopover } from \"@orderly.network/ui-tpsl\";\nimport { useSymbolContext } from \"../../provider/symbolContext\";\nimport { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\n\nexport const TP_SLEditButton = (props: { order: API.Order }) => {\n const { position, order } = useTPSLOrderRowContext();\n const { quote_dp, base_dp } = useSymbolContext();\n const { t } = useTranslation();\n\n return (\n <PositionTPSLPopover\n quoteDP={quote_dp}\n baseDP={base_dp}\n position={position!}\n order={order}\n label={t(\"common.edit\")}\n isEditing\n />\n );\n};\n","import {\n findTPSLOrderPriceFromOrder,\n findTPSLFromOrder,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { i18n, useTranslation } from \"@orderly.network/i18n\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { Text } from \"@orderly.network/ui\";\nimport { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\n\nexport const TPSLOrderPrice = () => {\n const {\n sl_trigger_price,\n tp_trigger_price,\n sl_order_price,\n tp_order_price,\n order,\n } = useTPSLOrderRowContext();\n const { t } = useTranslation();\n const symbolInfo = useSymbolsInfo()[order.symbol]();\n return (\n <div>\n {!!tp_trigger_price ? (\n <div className={\"oui-text-base-contrast-80 oui-td-bg-transparent\"}>\n <Text intensity={54}>{`${t(\"tpsl.tp\")} -`} </Text>\n <TPSLOrderPriceItem\n price={tp_order_price}\n quoteDP={symbolInfo.quote_dp}\n />\n </div>\n ) : null}\n {!!sl_trigger_price ? (\n <div className={\"oui-text-base-contrast-80 oui-td-bg-transparent\"}>\n <span className={\"oui-text-base-contrast-54\"}>\n {`${t(\"tpsl.sl\")} -`} \n </span>\n <TPSLOrderPriceItem\n price={sl_order_price}\n quoteDP={symbolInfo.quote_dp}\n />\n </div>\n ) : null}\n </div>\n );\n};\n\nconst TPSLOrderPriceItem = ({\n price,\n quoteDP,\n}: {\n price?: number | OrderType;\n quoteDP: number;\n}) => {\n const { t } = useTranslation();\n if (!price) {\n return null;\n }\n if (price === OrderType.MARKET) {\n return <span>{t(\"common.marketPrice\")}</span>;\n }\n\n return (\n <Text.numeral\n className=\"oui-text-base-contrast-80\"\n rule={\"price\"}\n dp={quoteDP}\n >\n {price}\n </Text.numeral>\n );\n};\n\nexport function useTPSLOrderPrice(order: any) {\n // @ts-ignore\n const { sl_trigger_price, tp_trigger_price } =\n !(\"algo_type\" in order) || !Array.isArray(order.child_orders)\n ? {}\n : findTPSLFromOrder(order);\n\n const tpTriggerPrice = tp_trigger_price\n ? `${i18n.t(\"tpsl.tp\")} - ${i18n.t(\"common.marketPrice\")}`\n : undefined;\n const slTriggerPrice = sl_trigger_price\n ? `${i18n.t(\"tpsl.sl\")} - ${i18n.t(\"common.marketPrice\")}`\n : undefined;\n\n return { tpTriggerPrice, slTriggerPrice };\n}\n","import { FC, useMemo } from \"react\";\nimport { useSymbolsInfo, utils } from \"@orderly.network/hooks\";\nimport { API, AlgoOrderType } from \"@orderly.network/types\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { cn, Text, Tooltip } from \"@orderly.network/ui\";\nimport { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nexport const OrderTriggerPrice = () => {\n const { sl_trigger_price, tp_trigger_price, order, position } =\n useTPSLOrderRowContext();\n\n return (\n <TPSLTriggerPrice\n stopLossPrice={sl_trigger_price}\n takeProfitPrice={tp_trigger_price}\n direction={\"column\"}\n order={order}\n position={position}\n tooltip\n />\n );\n};\n\nexport const TPSLTriggerPrice: FC<{\n takeProfitPrice: number | undefined;\n stopLossPrice: number | undefined;\n className?: string;\n direction?: \"row\" | \"column\";\n tooltip?: boolean;\n order?: API.AlgoOrder;\n position?: API.PositionTPSLExt;\n}> = (props) => {\n const { direction = \"row\", order, position } = props;\n // const symbolInfo = useSymbolsInfo()[position?.symbol ?? \"\"]();\n const symbolInfo = useSymbolsInfo();\n const { t } = useTranslation();\n\n const pnl = useMemo(() => {\n const msgs = [];\n\n if (!props.tooltip || !order || !position) return;\n\n let quantity = order.quantity;\n\n if (quantity === 0) {\n if (order.child_orders?.[0].type === \"CLOSE_POSITION\") {\n quantity = position.position_qty;\n }\n }\n\n if (!!props.takeProfitPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"tp\"}\n qty={quantity}\n price={props.takeProfitPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.TAKE_PROFIT}\n symbolInfo={symbolInfo[order.symbol]()}\n />\n );\n }\n\n if (!!props.stopLossPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"sl\"}\n qty={quantity}\n price={props.stopLossPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.STOP_LOSS}\n symbolInfo={symbolInfo[order.symbol]()}\n />\n );\n }\n\n return <div>{msgs}</div>;\n }, [\n props.takeProfitPrice,\n props.stopLossPrice,\n position?.average_open_price,\n order?.side,\n order?.quantity,\n order?.algo_type,\n ]);\n\n const child = useMemo(() => {\n const children = [];\n\n if (!order?.symbol) return <span>-</span>;\n if (props.takeProfitPrice) {\n children.push(\n <Text.numeral\n className={cn(\n \"oui-text-trade-profit oui-gap-0 oui-decoration-white/20 oui-border-b oui-border-dashed oui-border-base-contrast-12\"\n )}\n key={\"tp\"}\n rule=\"price\"\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={props.takeProfitPrice}\n // @ts-ignore\n prefix={\n !props.stopLossPrice || direction === \"column\" ? (\n <span className={\"oui-text-base-contrast-54\"}>\n {`${t(\"tpsl.tp\")} -`} \n </span>\n ) : (\n \"\"\n )\n }\n />\n );\n }\n if (props.stopLossPrice) {\n children.push(\n <Text.numeral\n key={\"sl\"}\n className={cn(\n \"oui-text-trade-loss oui-gap-0 oui-decoration-white/20 oui-border-b oui-border-dashed oui-border-base-contrast-12\"\n )}\n rule={\"price\"}\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={props.stopLossPrice}\n // @ts-ignore\n prefix={\n !props.takeProfitPrice || direction === \"column\" ? (\n <span className={\"oui-text-base-contrast-54\"}>\n {`${t(\"tpsl.sl\")} -`} \n </span>\n ) : (\n \"\"\n )\n }\n />\n );\n }\n\n if (children.length === 0) return <span>-</span>;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <span key={\"split\"}>/</span>);\n }\n\n return children;\n }, [props.takeProfitPrice, props.stopLossPrice, order?.symbol, t]);\n\n const content = (\n <div\n className={cn(\n \"oui-inline-flex oui-text-base-contrast-36\",\n props.direction === \"column\"\n ? \"oui-flex-col\"\n : \"oui-flex-row oui-gap-1\",\n props.className\n )}\n >\n {child}\n </div>\n );\n\n if (props.tooltip) {\n // @ts-ignore\n return (\n <Tooltip\n // @ts-ignore\n content={pnl}\n className=\"oui-bg-base-5\"\n arrow={{ className: \"oui-fill-base-5\" }}\n >\n {content}\n </Tooltip>\n );\n }\n\n return content;\n};\n\nconst TriggerPriceItem: FC<{\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n symbolInfo: API.SymbolExt;\n}> = (props) => {\n const { qty, price, entryPrice, orderSide, orderType, symbolInfo } = props;\n const { t } = useTranslation();\n\n const pnl = utils.priceToPnl(\n {\n qty,\n price,\n entryPrice,\n orderSide,\n orderType,\n },\n {\n symbol: symbolInfo,\n }\n );\n\n const type = orderType === AlgoOrderType.TAKE_PROFIT ? \"TP\" : \"SL\";\n const label = type === \"TP\" ? `${t(\"tpsl.tpPnl\")}:` : `${t(\"tpsl.slPnl\")}:`;\n\n // console.log(\"trigger price item\", \"dp\", symbolInfo.quote_dp);\n\n return (\n <div className=\"oui-flex oui-items-center\">\n <span className=\"oui-text-base-contrast-54 oui-mr-1\">{label}</span>\n <Text.numeral\n rule=\"price\"\n dp={symbolInfo.quote_dp}\n padding={false}\n className={\n pnl === 0\n ? \"oui-text-base-contrast-36\"\n : pnl > 0\n ? \"oui-text-trade-profit oui-gap-0\"\n : \"oui-text-trade-loss oui-gap-0\"\n }\n // @ts-ignore\n prefix={\n // @ts-ignore\n <span>{pnl === 0 ? \"\" : pnl > 0 ? \"+\" : \"-\"}</span>\n }\n suffix={\n <span className=\"oui-text-base-contrast-36 oui-ml-1\">USDC</span>\n }\n >{`${Math.abs(pnl)}`}</Text.numeral>\n </div>\n );\n};\n","import { FC, useEffect, useMemo, useRef, useState } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { cn, Flex, Popover, toast, Text } from \"@orderly.network/ui\";\nimport { grayCell } from \"../../../utils/util\";\nimport { useSymbolContext } from \"../../provider/symbolContext\";\nimport { useOrderListContext } from \"../orderListContext\";\nimport { ConfirmContent, EditType } from \"./editOrder/confirmContent\";\nimport { InnerInput } from \"./editOrder/innerInput\";\n\nexport const TriggerPrice = (props: {\n order: API.AlgoOrderExt;\n disableEdit?: boolean;\n}) => {\n const { order } = props;\n\n const [price, setPrice] = useState<string>(\"\");\n\n useEffect(() => {\n setPrice(order.trigger_price?.toString() ?? \"0\");\n }, [order.trigger_price]);\n\n const isAlgoOrder = order?.algo_order_id !== undefined;\n const isBracketOrder = order?.algo_type === \"BRACKET\";\n const [open, setOpen] = useState(false);\n const [editing, setEditing] = useState(false);\n\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const { editAlgoOrder, checkMinNotional } = useOrderListContext();\n\n const { base, quote_dp, quote_max, quote_min } = useSymbolContext();\n\n const hintInfo = useMemo(() => {\n if (!isAlgoOrder || isBracketOrder) if (!editing) return undefined;\n if (Number(price) > quote_max) {\n return `Trigger price must be less than ${quote_max}`;\n } else if (Number(price) < quote_min) {\n return `Trigger price must be greater than ${quote_min}`;\n }\n }, [editing, price, isAlgoOrder, isBracketOrder]);\n\n const closePopover = () => {\n setOpen(false);\n setEditing(false);\n };\n const cancelPopover = () => {\n setPrice(order.trigger_price?.toString() ?? \"0\");\n setOpen(false);\n setEditing(false);\n };\n\n const componentRef = useRef<HTMLDivElement | null>(null);\n\n const handleClickOutside = (event: any) => {\n if (\n componentRef.current &&\n !componentRef.current.contains(event.target as Node) &&\n !open\n ) {\n cancelPopover();\n }\n };\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [open, order.trigger_price]);\n\n const onClick = (event: any) => {\n event?.stopPropagation();\n event?.preventDefault();\n\n setEditing(false);\n\n if (Number(price) === Number(order.trigger_price)) {\n return;\n }\n\n if (order.price && order.reduce_only !== true) {\n const notionalText = checkMinNotional(\n order.symbol,\n order.price,\n order.quantity,\n );\n if (notionalText) {\n toast.error(notionalText);\n setIsSubmitting(false);\n cancelPopover();\n return;\n }\n }\n\n setOpen(true);\n };\n\n const handleKeyDown = (event: any) => {\n if (event.key === \"Enter\") {\n onClick(event);\n }\n };\n\n const onConfirm = () => {\n if ((hintInfo ?? \"\").length > 0) {\n return;\n }\n setIsSubmitting(true);\n\n let data: any = {\n // price: price,\n quantity: order.quantity,\n trigger_price: price,\n symbol: order.symbol,\n // order_type: order.type,\n // side: order.side,\n // reduce_only: Boolean(order.reduce_only),\n algo_order_id: order.algo_order_id,\n };\n\n if (order.order_tag !== undefined) {\n data = { ...data, order_tag: order.order_tag };\n }\n\n editAlgoOrder(`${order.algo_order_id}`, data)\n .then(\n (result: any) => {\n closePopover();\n setPrice(price);\n // setTimeout(() => inputRef.current?.blur(), 300);\n },\n (err: any) => {\n toast.error(err.message);\n\n setPrice(order.trigger_price?.toString() ?? \"--\");\n cancelPopover();\n },\n )\n .finally(() => setIsSubmitting(false));\n };\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n if (!isAlgoOrder || isBracketOrder) {\n return <Text>{`--`}</Text>;\n }\n const trigger = () => {\n if (!editing || props.disableEdit) {\n return (\n <NormalState\n order={order}\n price={price}\n setEditing={setEditing}\n disableEdit={props.disableEdit}\n />\n );\n }\n\n return (\n <InnerInput\n inputRef={inputRef}\n dp={quote_dp}\n value={price}\n setValue={setPrice}\n setEditing={setEditing}\n handleKeyDown={handleKeyDown}\n onClick={onClick}\n onClose={cancelPopover}\n hintInfo={hintInfo}\n />\n );\n };\n\n return (\n <Popover\n open={open}\n onOpenChange={setOpen}\n content={\n <ConfirmContent\n type={EditType.triggerPrice}\n base={base}\n value={price}\n cancelPopover={cancelPopover}\n isSubmitting={isSubmitting}\n onConfirm={onConfirm}\n />\n }\n >\n <div\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n ref={componentRef}\n >\n {trigger()}\n </div>\n </Popover>\n );\n};\n\nconst NormalState: FC<{\n order: any;\n price: string;\n setEditing: any;\n disableEdit?: boolean;\n}> = (props) => {\n const { order, price } = props;\n\n return (\n <div\n className={cn(\n \"oui-flex oui-max-w-[110px] oui-justify-start oui-items-center oui-gap-1 oui-relative oui-font-semibold\",\n grayCell(order) && \"oui-text-base-contrast-20\",\n )}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.setEditing(true);\n }}\n >\n <Flex\n r=\"base\"\n className={cn(\n \"oui-min-w-[70px] oui-h-[28px]\",\n !props.disableEdit &&\n \"oui-bg-base-7 oui-px-2 oui-border oui-border-line-12\",\n )}\n >\n <Text size=\"2xs\">{price}</Text>\n </Flex>\n </div>\n );\n};\n","import React, { FC } from \"react\";\nimport { Divider, Flex, Grid, Text } from \"@orderly.network/ui\";\nimport { TabType } from \"../../orders.widget\";\nimport { BracketOrderPriceWidget } from \"./bracketOrderPrice\";\nimport { CancelBtnWidget } from \"./cancelBtn\";\nimport { EditBtnWidget } from \"./editBtn\";\nimport {\n OrderTime,\n SymbolToken,\n OrderTypeView,\n Qty,\n Filled,\n EstTotal,\n TriggerPrice,\n LimitPrice,\n MarkPrice,\n TPTrigger,\n TPPrice,\n TPSLQuantity,\n SLTrigger,\n SLPrice,\n AvgPrice,\n OrderPrice,\n RealizedPnL,\n OrderState,\n Fee,\n} from \"./items\";\nimport { OrderCellState } from \"./orderCell.script\";\n\nexport const OrderCell: FC<\n OrderCellState & {\n className?: string;\n }\n> = (props) => {\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n itemAlign={\"start\"}\n className={props.className}\n >\n <Header {...props} />\n <Divider intensity={6} className=\"oui-w-full\" />\n <Body {...props} />\n {props.type === TabType.pending && <BracketOrderPriceWidget {...props} />}\n {props.type !== TabType.orderHistory && <Btns {...props} />}\n </Flex>\n );\n};\n\nexport const Header: FC<OrderCellState> = (props) => {\n return (\n <Flex direction={\"column\"} gap={1} width={\"100%\"}>\n <Flex justify={\"between\"} width={\"100%\"}>\n <SymbolToken {...props} />\n <OrderTime {...props} />\n </Flex>\n <Flex width={\"100%\"} justify={\"between\"}>\n <OrderTypeView {...props} />\n {props.type === TabType.orderHistory && <OrderState {...props} />}\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<OrderCellState> = (props) => {\n return (\n <Grid cols={3} rows={2} width={\"100%\"} gap={1}>\n {itemsWithType(props)}\n </Grid>\n );\n};\n\nexport const Btns: FC<OrderCellState> = (props) => {\n return (\n <Grid cols={3} rows={1} width={\"100%\"} gap={2}>\n <div></div>\n <EditBtnWidget state={props} />\n <CancelBtnWidget state={props} />\n </Grid>\n );\n};\n\nfunction itemsWithType(props: OrderCellState) {\n switch (props.type) {\n case TabType.all:\n return <></>;\n case TabType.pending:\n return (\n <>\n <Qty {...props} />\n <Filled {...props} />\n <EstTotal {...props} />\n <TriggerPrice {...props} />\n <LimitPrice {...props} />\n <MarkPrice {...props} />\n </>\n );\n\n case TabType.tp_sl:\n return (\n <>\n <TPTrigger {...props} />\n <TPPrice {...props} />\n <TPSLQuantity {...props} />\n <SLTrigger {...props} />\n <SLPrice {...props} />\n </>\n );\n case TabType.filled:\n return <></>;\n case TabType.cancelled:\n return <></>;\n case TabType.rejected:\n return <></>;\n case TabType.orderHistory:\n return (\n <>\n <Qty {...props} />\n <Filled {...props} />\n <TriggerPrice {...props} align=\"end\" />\n <AvgPrice {...props} />\n <OrderPrice {...props} />\n <RealizedPnL {...props} />\n {/* placeholder */}\n <div></div>\n {/* placeholder */}\n <div></div>\n <Fee {...props} />\n </>\n );\n }\n}\n","import { FC } from \"react\";\nimport { cn, Flex, Text } from \"@orderly.network/ui\";\nimport { BracketOrderPriceState } from \"./bracketOrderPrice.script\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { MobileTooltip } from \"../items\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const BracketOrderPrice: FC<BracketOrderPriceState> = (props) => {\n const { t } = useTranslation();\n\n if (!props.sl_trigger_price && !props.tp_trigger_price) return <></>;\n\n return (\n <>\n <MobileTooltip\n classNames={{\n content: \"oui-bg-base-6 oui-ml-2\",\n arrow: \"oui-fill-base-6\",\n }}\n content={\n <Flex direction={\"column\"} itemAlign={\"start\"} gap={1}>\n {typeof props.pnl?.tpPnL !== \"undefined\" && (\n <Text.numeral\n // @ts-ignore\n prefix={\n <Text intensity={80}>{`${t(\"tpsl.tpPnl\")}:`} </Text>\n }\n suffix={<Text intensity={20}>{\" USDC\"}</Text>}\n dp={props.quote_dp}\n color=\"buy\"\n showIdentifier\n >\n {props.pnl?.tpPnL}\n </Text.numeral>\n )}\n {typeof props.pnl?.slPnL !== \"undefined\" && (\n <Text.numeral\n // @ts-ignore\n prefix={\n <Text intensity={80}>{`${t(\"tpsl.slPnl\")}:`} </Text>\n }\n suffix={<Text intensity={20}>{\" USDC\"}</Text>}\n dp={props.quote_dp}\n color=\"sell\"\n >\n {props.pnl?.slPnL}\n </Text.numeral>\n )}\n </Flex>\n }\n >\n <button\n onClick={() => {\n props.setOpen(!props.open);\n }}\n >\n <Flex gap={1} width={\"1\"}>\n {props.tp_trigger_price && (\n <Price\n type=\"TP\"\n value={props.tp_trigger_price}\n quote_dp={props.quote_dp}\n />\n )}\n {props.sl_trigger_price && (\n <Price\n type=\"SL\"\n value={props.sl_trigger_price}\n quote_dp={props.quote_dp}\n />\n )}\n </Flex>\n </button>\n </MobileTooltip>\n </>\n );\n};\n\nconst Price = (props: {\n type: \"TP\" | \"SL\";\n value?: number | string;\n quote_dp: number;\n}) => {\n const { type, value, quote_dp } = props;\n\n return value ? (\n <Text.numeral\n size=\"2xs\"\n className={cn(\n \"oui-border-b oui-border-dashed oui-border-base-contrast-12\",\n type === \"TP\" ? \"oui-text-trade-profit\" : \"oui-text-trade-loss\"\n )}\n key={\"tp\"}\n rule=\"price\"\n dp={quote_dp}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n // @ts-ignore\n prefix={\n <span className={\"oui-text-base-contrast-36\"}>\n {`${type} `}: \n </span>\n }\n >\n {value}\n </Text.numeral>\n ) : (\n <></>\n );\n};\n","import {\n FC,\n PropsWithChildren,\n ReactNode,\n useCallback,\n useMemo,\n useState,\n} from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n AlgoOrderRootType,\n API,\n OrderStatus,\n OrderType,\n} from \"@orderly.network/types\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { Badge, cn, Flex, Statistic, Text, Tooltip } from \"@orderly.network/ui\";\nimport { SharePnLBottomSheetId } from \"@orderly.network/ui-share\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { parseBadgesFor, upperCaseFirstLetter } from \"../../../utils/util\";\nimport { ShareButtonWidget } from \"../../shareButton\";\nimport { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\nimport { OrderCellState } from \"./orderCell.script\";\n\nexport const SymbolToken: FC<OrderCellState> = (props) => {\n const { item } = props;\n const isBuy = item.side === OrderSide.BUY;\n const { t } = useTranslation();\n\n return (\n <Text.formatted\n intensity={80}\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"sm\"\n // @ts-ignore\n prefix={\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? t(\"common.buy\") : t(\"common.sell\")}\n </Badge>\n }\n onClick={() => {\n props.onSymbolChange?.({ symbol: item.symbol } as API.Symbol);\n }}\n // showIcon\n >\n {item.symbol}\n </Text.formatted>\n );\n};\n\nexport const OrderTypeView: FC<OrderCellState> = (props) => {\n const { item } = props;\n\n const orderType = useCallback(() => {\n const type =\n typeof item.type === \"string\"\n ? item.type.replace(\"_ORDER\", \"\").toLowerCase()\n : item.type;\n const isAlgoOrder =\n item.algo_order_id && item.algo_type !== AlgoOrderRootType.BRACKET;\n if (isAlgoOrder) {\n return `Stop ${type}`;\n }\n return upperCaseFirstLetter(item.type);\n }, [item]);\n\n return (\n <Flex direction={\"row\"} gap={1}>\n {parseBadgesFor(props.item)?.map((e, index) => (\n <Badge\n key={index}\n color={e.toLocaleLowerCase() === \"position\" ? \"primary\" : \"neutral\"}\n size=\"xs\"\n >\n {e}\n </Badge>\n ))}\n </Flex>\n );\n};\n\nexport const OrderTime: FC<OrderCellState> = (props) => {\n const { item } = props;\n\n return (\n <Text.formatted\n rule={\"date\"}\n formatString=\"yyyy-MM-dd hh:mm:ss\"\n intensity={36}\n size=\"2xs\"\n >\n {item.updated_time}\n </Text.formatted>\n );\n};\n\nexport const OrderState: FC<OrderCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n // @ts-ignore\n const status = item.status || item.algo_status;\n\n const statusMap = useMemo(() => {\n return {\n [OrderStatus.NEW]: t(\"orders.status.pending\"),\n [OrderStatus.FILLED]: t(\"orders.status.filled\"),\n [OrderStatus.PARTIAL_FILLED]: t(\"orders.status.partialFilled\"),\n [OrderStatus.CANCELLED]: t(\"orders.status.canceled\"),\n [OrderStatus.REJECTED]: t(\"orders.status.rejected\"),\n [OrderStatus.INCOMPLETE]: t(\"orders.status.incomplete\"),\n [OrderStatus.COMPLETED]: t(\"orders.status.completed\"),\n };\n }, [t]);\n\n return (\n <Text.formatted intensity={80} size=\"2xs\">\n {statusMap[status as keyof typeof statusMap] ||\n upperCaseFirstLetter(status)}\n </Text.formatted>\n );\n};\n\nexport const Qty: FC<OrderCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n const isEntirePosition =\n item.type === OrderType.CLOSE_POSITION &&\n // @ts-ignore\n item?.status !== OrderStatus.FILLED;\n\n return (\n <Statistic\n label={t(\"common.qty\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.base_dp}\n padding={false}\n coloring\n placeholder={t(\"tpsl.entirePosition\")}\n intensity={80}\n >\n {isEntirePosition ? t(\"tpsl.entirePosition\") : item.quantity}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Filled: FC<OrderCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={<Text>{t(\"orders.status.filled\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.base_dp}\n intensity={80}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n >\n {/* {item.algo_order_id\n ? item.total_executed_quantity\n : (item as unknown as API.OrderExt).executed} */}\n {item.total_executed_quantity}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Notional: FC<OrderCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n align=\"end\"\n label={\n <Text>\n {t(\"common.notional\")}\n <Text intensity={20}>(USDC)</Text>\n </Text>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.quote_dp}\n coloring\n intensity={80}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n >\n {(item as any).notional ?? \"--\"}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const EstTotal: FC<OrderCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const value = useMemo(() => {\n if (item.price && item.quantity) {\n return new Decimal(item.price)\n .mul(item.quantity)\n .toFixed(props.quote_dp, Decimal.ROUND_DOWN);\n }\n return \"--\";\n }, [item.price, item.quantity]);\n\n return (\n <Statistic\n align=\"end\"\n label={\n <Text>\n {t(\"common.notional\")}\n <Text intensity={20}>(USDC)</Text>\n </Text>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.quote_dp}\n coloring\n intensity={80}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n >\n {value}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const TriggerPrice: FC<\n OrderCellState & {\n align?: \"start\" | \"end\";\n }\n> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"orders.column.triggerPrice\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align={props.align}\n >\n <Text.numeral\n dp={props.quote_dp}\n intensity={80}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n >\n {item.trigger_price ?? \"--\"}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MarkPrice: FC<OrderCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.markPrice\")}\n align=\"end\"\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n padding={false}\n >\n {item.mark_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const LimitPrice: FC<OrderCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const isAlgoOrder = item?.algo_order_id !== undefined;\n const isStopMarket = item?.type === \"MARKET\" && isAlgoOrder;\n\n return (\n <Statistic\n label={t(\"common.limitPrice\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n {isStopMarket ? (\n <Text>{t(\"common.marketPrice\")}</Text>\n ) : (\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n padding={false}\n >\n {item.price ?? \"--\"}\n </Text.numeral>\n )}\n </Statistic>\n );\n};\n\nexport const TPTrigger: FC<OrderCellState> = (props) => {\n const { tp_trigger_price, tpPnL } = useTPSLOrderRowContext();\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"tpsl.tpTrigger\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <MobileTooltip\n content={\n tpPnL && (\n <Text.numeral\n size=\"2xs\"\n showIdentifier\n // @ts-ignore\n prefix={<Text intensity={54}>{`${t(\"tpsl.tpPnl\")}:`} </Text>}\n suffix={<Text intensity={20}> USDC</Text>}\n coloring\n >\n {tpPnL}\n </Text.numeral>\n )\n }\n classNames={{\n content: \"oui-bg-base-6 oui-ml-2\",\n arrow: \"oui-fill-base-6\",\n }}\n >\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n color=\"buy\"\n padding={false}\n className={\n tp_trigger_price\n ? \"oui-border-b oui-border-dashed oui-border-base-contrast-12\"\n : undefined\n }\n >\n {tp_trigger_price ?? \"--\"}\n </Text.numeral>\n </MobileTooltip>\n </Statistic>\n );\n};\n\nexport const SLTrigger: FC<OrderCellState> = (props) => {\n const { sl_trigger_price, slPnL } = useTPSLOrderRowContext();\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"tpsl.slTrigger\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <MobileTooltip\n content={\n slPnL && (\n <Text.numeral\n size=\"2xs\"\n // @ts-ignore\n prefix={\n <Text intensity={54}>{`${t(\"tpsl.slPnl\")}:`} </Text>\n }\n suffix={<Text intensity={20}> USDC</Text>}\n coloring\n >\n {slPnL}\n </Text.numeral>\n )\n }\n classNames={{\n content: \"oui-bg-base-6 oui-ml-2\",\n arrow: \"oui-fill-base-6\",\n }}\n >\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n color=\"sell\"\n padding={false}\n className={\n sl_trigger_price\n ? \"oui-border-b oui-border-dashed oui-border-base-contrast-12\"\n : undefined\n }\n >\n {sl_trigger_price ?? \"--\"}\n </Text.numeral>\n </MobileTooltip>\n </Statistic>\n );\n};\n\nexport const TPPrice: FC<OrderCellState> = (props) => {\n const { t } = useTranslation();\n const { tp_order_price } = useTPSLOrderRowContext();\n\n const renderOrderPrice = useMemo(() => {\n if (tp_order_price === undefined) {\n return <Text>--</Text>;\n }\n if (tp_order_price === OrderType.MARKET) {\n return <Text>{t(\"common.marketPrice\")}</Text>;\n }\n return (\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n padding={false}\n >\n {tp_order_price}\n </Text.numeral>\n );\n }, [tp_order_price]);\n\n return (\n <Statistic\n label={t(\"tpsl.tpPrice\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n {renderOrderPrice}\n </Statistic>\n );\n};\nexport const SLPrice: FC<OrderCellState> = (props) => {\n const { t } = useTranslation();\n const { sl_order_price } = useTPSLOrderRowContext();\n\n const renderOrderPrice = useMemo(() => {\n if (sl_order_price === undefined) {\n return <Text>--</Text>;\n }\n if (sl_order_price === OrderType.MARKET) {\n return <Text>{t(\"common.marketPrice\")}</Text>;\n }\n return (\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n padding={false}\n >\n {sl_order_price}\n </Text.numeral>\n );\n }, [sl_order_price]);\n\n return (\n <Statistic\n label={t(\"tpsl.slPrice\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n {renderOrderPrice}\n </Statistic>\n );\n};\n\nexport const TPSLQuantity: FC<OrderCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const quantity = useMemo(() => {\n if (item.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n return (\n <span className=\"oui-text-base-contrast-80\">\n {t(\"tpsl.entirePosition\")}\n </span>\n );\n }\n\n return (\n <Text.numeral\n dp={props.base_dp}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n padding={false}\n >\n {item.quantity}\n </Text.numeral>\n );\n }, [item, t]);\n\n return (\n <Statistic\n label={t(\"common.quantity\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n {quantity}\n </Statistic>\n );\n};\n\nexport const AvgPrice: FC<OrderCellState> = (props) => {\n const { t } = useTranslation();\n return (\n <Statistic\n label={\n <Text>\n {t(\"common.avgPrice\")}\n <Text intensity={20}>(USDC)</Text>\n </Text>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n padding={false}\n >\n {/* @ts-ignore */}\n {props.item?.average_executed_price ?? \"--\"}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const OrderPrice: FC<OrderCellState> = (props) => {\n const { t } = useTranslation();\n return (\n <Statistic\n label={\n <Text>\n {t(\"common.orderPrice\")}\n <Text intensity={20}>(USDC)</Text>\n </Text>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n padding={false}\n placeholder={t(\"common.marketPrice\")}\n >\n {/* @ts-ignore */}\n {props.item?.price ?? \"--\"}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const RealizedPnL: FC<OrderCellState> = (props) => {\n // @ts-ignore\n const value = props?.item?.realized_pnl;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={\n <Text>\n {t(\"common.realizedPnl\")}\n <Text intensity={20}>(USDC)</Text>\n </Text>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n <Flex gap={1}>\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n padding={false}\n intensity={(value ?? 0) == 0 ? 80 : undefined}\n showIdentifier={(value ?? 0) > 0}\n coloring={(value ?? 0) != 0}\n >\n {value ?? \"--\"}\n </Text.numeral>\n <ShareButtonWidget\n order={props.item}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLBottomSheetId}\n iconSize={12}\n />\n </Flex>\n </Statistic>\n );\n};\n\nexport const MobileTooltip: FC<\n PropsWithChildren<{\n content?: string | ReactNode;\n classNames?: {\n content?: string;\n arrow?: string;\n };\n }>\n> = (props) => {\n const { classNames, content } = props;\n const [open, setOpen] = useState(false);\n if (typeof content === \"undefined\") return props.children;\n return (\n <Tooltip\n // @ts-ignore\n content={content}\n className={classNames?.content}\n open={open}\n onOpenChange={setOpen}\n arrow={{ className: classNames?.arrow }}\n >\n <div onClick={() => setOpen((e) => !e)}>{props.children}</div>\n </Tooltip>\n );\n};\n\nexport const Fee: FC<OrderCellState> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex justify=\"end\" gapX={1} mt={1}>\n <Text size=\"2xs\" intensity={36}>\n {t(\"common.fee\")}:\n </Text>\n <Text size=\"2xs\" intensity={80}>\n {props.item?.total_fee ?? \"--\"}\n </Text>\n </Flex>\n );\n};\n","import { useMemo, useState } from \"react\";\nimport { OrderCellState } from \"../orderCell.script\";\nimport { utils } from \"@orderly.network/hooks\";\nimport { calcBracketRoiAndPnL } from \"../../../../utils/util\";\n\nexport const useBracketOrderPriceScript = (props: OrderCellState) => {\n const { item: order, quote_dp, base_dp } = props;\n\n const [open, setOpen] = useState(false);\n\n const { sl_trigger_price, tp_trigger_price } = useMemo(() => {\n if (!(\"algo_type\" in order) || !Array.isArray(order.child_orders)) {\n return {};\n }\n return utils.findTPSLFromOrder(order.child_orders[0]);\n }, [order]);\n\n const { pnl, roi } = calcBracketRoiAndPnL(order);\n\n return {\n sl_trigger_price,\n tp_trigger_price,\n pnl,\n roi,\n quote_dp,\n open,\n setOpen,\n };\n};\n\nexport type BracketOrderPriceState = ReturnType<\n typeof useBracketOrderPriceScript\n>;\n","import { FC } from \"react\";\nimport { OrderCellState } from \"../orderCell.script\";\nimport { useBracketOrderPriceScript } from \"./bracketOrderPrice.script\";\nimport { BracketOrderPrice } from \"./bracketOrderPrice.ui\";\n\nexport const BracketOrderPriceWidget: FC<OrderCellState> = (props) => {\n const state = useBracketOrderPriceScript(props);\n return (<BracketOrderPrice {...state} />);\n};\n","import { FC } from \"react\";\nimport { Button, SimpleDialog, Text } from \"@orderly.network/ui\";\nimport { CancelBtnState } from \"./cancelBtn.script\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const CancelBtn: FC<CancelBtnState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <>\n <Button\n variant=\"outlined\"\n fullWidth\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={(e) => props.setOpen(true)}\n >\n {t(\"common.cancel\")}\n </Button>\n {props.open && (\n <SimpleDialog\n size=\"xs\"\n open={props.open}\n onOpenChange={props.setOpen}\n title={t(\"orders.cancelOrder\")}\n actions={{\n primary: {\n label: t(\"common.confirm\"),\n loading: props.isLoading,\n fullWidth: true,\n size: \"md\",\n onClick: (e) => {\n props.onCancel(e);\n },\n },\n secondary: {\n label: t(\"common.cancel\"),\n fullWidth: true,\n size: \"md\",\n onClick: () => {\n props.onClose();\n },\n },\n }}\n >\n <Text size=\"2xs\" intensity={54}>\n {t(\"orders.cancelOrder.description\")}\n </Text>\n </SimpleDialog>\n )}\n </>\n );\n};\n","import { FC, useState } from \"react\";\nimport { OrderCellState } from \"../orderCell.script\";\nimport { useOrderListContext } from \"../../orderListContext\";\nimport { toast } from \"@orderly.network/ui\";\n\nexport const useCancelBtnScript = (props: { state: OrderCellState }) => {\n const { state } = props;\n const [open, setOpen] = useState(false);\n\n const { onCancelOrder } = useOrderListContext();\n const [isLoading, setIsLoading] = useState(false);\n\n const onCancel = (event?: any) => {\n if (!onCancelOrder) return Promise.resolve();\n event?.preventDefault();\n event?.stopPropagation();\n setIsLoading(true);\n return onCancelOrder(state.item)\n .then(\n (res: any) => {\n setOpen(false);\n },\n (error: any) => {\n toast.error(error.message);\n }\n ).finally(() => {\n setIsLoading(false);\n });\n };\n\n const onClose = () => {\n setOpen(false);\n };\n\n return {\n ...state,\n\n open,\n setOpen,\n onCancel,\n onClose,\n isLoading,\n };\n};\n\nexport type CancelBtnState = ReturnType<typeof useCancelBtnScript>;\n","import { FC } from \"react\";\nimport { OrderCellState } from \"../orderCell.script\";\nimport { useCancelBtnScript } from \"./cancelBtn.script\";\nimport { CancelBtn } from \"./cancelBtn.ui\";\n\nexport const CancelBtnWidget = (props: { state: OrderCellState }) => {\n const state = useCancelBtnScript(props);\n return <CancelBtn {...state} />;\n};\n","import { FC } from \"react\";\nimport { Button } from \"@orderly.network/ui\";\nimport { EditBtnState } from \"./editBtn.script\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const EditBtn: FC<EditBtnState> = (props) => {\n const { t } = useTranslation();\n const { item } = props;\n const isBuy = item.quantity > 0;\n\n return (\n <>\n <Button\n variant=\"outlined\"\n fullWidth\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={() => {\n props.onShowEditSheet();\n }}\n >\n {t(\"common.edit\")}\n </Button>\n </>\n );\n};\n","import { useCallback } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { modal } from \"@orderly.network/ui\";\nimport { PositionTPSLSheet, TPSLSheetId } from \"@orderly.network/ui-tpsl\";\nimport { TabType } from \"../../../orders.widget\";\nimport { useOrderListContext } from \"../../orderListContext\";\nimport { useTPSLOrderRowContext } from \"../../tpslOrderRowContext\";\nimport { EditSheetWidget } from \"../editSheet\";\nimport { OrderCellState } from \"../orderCell.script\";\n\nexport const useEditBtnScript = (props: { state: OrderCellState }) => {\n const { state } = props;\n const { t } = useTranslation();\n const symbolInfo = useSymbolsInfo()[props.state.item.symbol]();\n\n const { editAlgoOrder, editOrder } = useOrderListContext();\n const { order, position } = useTPSLOrderRowContext();\n\n const onShowEditSheet = useCallback(() => {\n if (props.state.type === TabType.tp_sl) {\n modal\n .sheet({\n content: (\n <PositionTPSLSheet\n symbolInfo={symbolInfo}\n isEditing\n order={props.state.item}\n position={position!}\n />\n ),\n })\n .catch((error) => {\n console.log(error);\n });\n } else {\n modal\n .sheet({\n title: t(\"orders.editOrder\"),\n // size: \"xs\",\n classNames: {\n content: \"oui-bg-base-8\",\n },\n content: (\n <EditSheetWidget\n position={position}\n state={state}\n editAlgoOrder={editAlgoOrder}\n editOrder={editOrder}\n />\n ),\n })\n .catch((error) => {\n console.log(error);\n });\n }\n }, [state]);\n\n return {\n ...state,\n onShowEditSheet,\n };\n};\n\nexport type EditBtnState = ReturnType<typeof useEditBtnScript>;\n","import { FC } from \"react\";\nimport { utils } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@orderly.network/react-app\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport {\n Badge,\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n SimpleDialog,\n Slider,\n Text,\n ThrottledButton,\n toast,\n} from \"@orderly.network/ui\";\nimport { parseBadgesFor } from \"../../../../utils/util\";\nimport { ConfirmDialogContent } from \"./editDialogContent\";\nimport { EditSheetState } from \"./editSheet.script\";\n\nexport const EditSheet: FC<EditSheetState> = (props) => {\n const { item } = props;\n const isBuy = item.side === OrderSide.BUY;\n const { t } = useTranslation();\n\n const { parseErrorMsg } = useOrderEntryFormErrorMsg(props.errors!);\n\n const orderQuantityErrorMsg = parseErrorMsg(\"order_quantity\");\n const orderPriceErrorMsg = parseErrorMsg(\"order_price\");\n const triggerPriceErrorMsg = parseErrorMsg(\"trigger_price\");\n\n const percentages =\n props.quantity && props.maxQty\n ? Math.min(Number(props.quantity) / props.maxQty, 1)\n : undefined;\n\n const onBlur = (value: string) => {\n const baseTick = props.baseTick;\n if (baseTick && baseTick > 0) {\n const formatQty = utils.formatNumber(value, baseTick) ?? value;\n props.setQuantity(formatQty);\n }\n };\n\n return (\n <>\n <Flex\n direction={\"column\"}\n gap={3}\n width={\"100%\"}\n itemAlign={\"start\"}\n className=\"oui-text-sm\"\n >\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text.formatted rule={\"symbol\"} showIcon intensity={80}>\n {item.symbol}\n </Text.formatted>\n <Flex direction={\"row\"} gap={1}>\n {parseBadgesFor(props.item)?.map((e, index) => (\n <Badge\n key={index}\n color={\n e.toLocaleLowerCase() === \"position\" ? \"primary\" : \"neutral\"\n }\n size=\"xs\"\n >\n {e}\n </Badge>\n ))}\n {isBuy && (\n <Badge color=\"success\" size=\"xs\">\n {t(\"common.buy\")}\n </Badge>\n )}\n {!isBuy && (\n <Badge color=\"danger\" size=\"xs\">\n {t(\"common.sell\")}\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider intensity={8} className=\"oui-w-full\" />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text>{t(\"common.lastPrice\")}</Text>\n <Text.numeral dp={(props.item as any)?.symbolInfo?.duote_dp}>\n {props.curMarkPrice ?? \"--\"}\n </Text.numeral>\n </Flex>\n <Flex width={\"100%\"} direction={\"column\"} itemAlign={\"stretch\"} gap={2}>\n {props.isAlgoOrder && (\n <Input.tooltip\n prefix={\n <Text intensity={54} className=\"oui-px-3\">\n {t(\"orders.column.triggerPrice\")}\n </Text>\n }\n suffix={\n <Text intensity={54} className=\"oui-px-3\">\n {props.quote}\n </Text>\n }\n color={triggerPriceErrorMsg ? \"danger\" : undefined}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.quote_dp),\n ]}\n value={props.triggerPrice}\n onValueChange={(e) => props.setTriggerPrice(e)}\n tooltip={triggerPriceErrorMsg}\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 classNames={{\n input: \"oui-text-base-contrast oui-w-full\",\n root: cn(\n \"oui-outline-line-12\",\n triggerPriceErrorMsg && \"oui-outline-danger\",\n ),\n }}\n />\n )}\n <Input.tooltip\n prefix={\n <Text intensity={54} className=\"oui-px-3\">\n {t(\"common.price\")}\n </Text>\n }\n suffix={\n <Text intensity={54} className=\"oui-px-3\">\n {props.quote}\n </Text>\n }\n color={orderPriceErrorMsg ? \"danger\" : undefined}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.quote_dp),\n ]}\n disabled={!props.priceEdit}\n value={\n props.isStopMarket\n ? t(\"orderEntry.orderType.market\")\n : props.price\n }\n onValueChange={(e) => props.setPrice(e)}\n tooltip={orderPriceErrorMsg}\n tooltipProps={{\n content: {\n className: \"oui-bg-base-5\",\n },\n arrow: {\n className: \"oui-fill-base-5\",\n },\n }}\n classNames={{\n input: \"oui-text-base-contrast\",\n root: cn(\n \"oui-outline-line-12\",\n orderPriceErrorMsg && \"oui-outline-danger\",\n ),\n }}\n />\n <Input.tooltip\n prefix={\n <Text intensity={54} className=\"oui-px-3\">\n {t(\"common.quantity\")}\n </Text>\n }\n suffix={\n <Text intensity={54} className=\"oui-px-3\">\n {props.base}\n </Text>\n }\n color={orderQuantityErrorMsg ? \"danger\" : undefined}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.base_dp),\n // inputFormatter.rangeFormatter({ max: props.maxQty }),\n ]}\n value={props.quantity}\n onValueChange={(e) => {\n props.setQuantity(e);\n }}\n onBlur={(event) => onBlur(event.target.value)}\n tooltip={orderQuantityErrorMsg}\n tooltipProps={{\n content: {\n className: \"oui-bg-base-6\",\n },\n arrow: {\n className: \"oui-fill-base-6\",\n },\n }}\n classNames={{\n input: \"oui-text-base-contrast\",\n root: cn(\n \"oui-outline-line-12\",\n orderQuantityErrorMsg && \"oui-outline-danger\",\n ),\n }}\n />\n <Slider\n markCount={4}\n value={[props.sliderValue ?? 0]}\n onValueChange={(e) => {\n props.setSliderValue(e[0]);\n }}\n color=\"primary\"\n />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text.numeral\n color=\"primary\"\n size=\"2xs\"\n dp={2}\n padding={false}\n rule=\"percentages\"\n >{`${percentages ?? 0}`}</Text.numeral>\n <Flex\n gap={1}\n onClick={() => {\n props.setQuantity(props.maxQty.toString());\n }}\n >\n <Text size=\"2xs\" color=\"primary\">\n {t(\"common.max\")}\n </Text>\n <Text.numeral intensity={54} size=\"2xs\" dp={props.base_dp}>\n {props.maxQty}\n </Text.numeral>\n </Flex>\n </Flex>\n </Flex>\n <Flex width={\"100%\"} gap={3} mt={2}>\n <Button\n fullWidth\n color=\"secondary\"\n onClick={(e) => {\n props.onClose();\n }}\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton\n fullWidth\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.onSheetConfirm();\n }}\n loading={props.submitting}\n disabled={!props.isChanged}\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n </Flex>\n\n <SimpleDialog\n open={props.dialogOpen}\n onOpenChange={props.setDialogOpen}\n title={t(\"orders.editOrder\")}\n size=\"xs\"\n actions={{\n primary: {\n label: t(\"common.confirm\"),\n onClick: props.onDialogConfirm,\n loading: props.submitting,\n fullWidth: true,\n },\n secondary: {\n label: t(\"common.cancel\"),\n onClick: props.onCloseDialog,\n fullWidth: true,\n },\n }}\n classNames={{\n content: \"oui-pb-4\",\n body: \"oui-p-0\",\n footer: \"oui-pt-3 oui-pb-0\",\n }}\n >\n <ConfirmDialogContent {...props} />\n </SimpleDialog>\n </>\n );\n};\n","import { FC } from \"react\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { parseBadgesFor } from \"../../../../utils/util\";\nimport { Badge, Checkbox, Divider, Flex, Text } from \"@orderly.network/ui\";\nimport { EditSheetState } from \"./editSheet.script\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const ConfirmDialogContent: FC<EditSheetState> = (props) => {\n const { side } = props.item;\n const { price, quantity, triggerPrice, isAlgoOrder } = props;\n const isBuy = side === OrderSide.BUY;\n const { t } = useTranslation();\n\n return (\n <div className=\"oui-pt-2\">\n <Text\n intensity={80}\n >{`You agree to edit your ${props.base}-PERP order.`}</Text>\n <Flex gap={2} mb={3} mt={2} justify={\"between\"}>\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"base\"\n showIcon\n >\n {props.item.symbol}\n </Text.formatted>\n <Flex direction={\"row\"} gap={1}>\n {parseBadgesFor(props.item)?.map((e, index) => (\n <Badge\n key={index}\n color={\n e.toLocaleLowerCase() === \"position\" ? \"primary\" : \"neutral\"\n }\n size=\"xs\"\n >\n {e}\n </Badge>\n ))}\n {isBuy && (\n <Badge color=\"success\" size=\"xs\">\n {t(\"common.buy\")}\n </Badge>\n )}\n {!isBuy && (\n <Badge color=\"danger\" size=\"xs\">\n {t(\"common.sell\")}\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider />\n <Flex\n direction={\"column\"}\n gap={1}\n width={\"100%\"}\n className=\"oui-text-sm oui-text-base-contrast-54\"\n py={3}\n >\n {isAlgoOrder && (\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"orders.column.triggerPrice\")}</Text>\n <Text.numeral\n intensity={80}\n dp={props.quote_dp}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n suffix={<Text intensity={54}>{\" USDC\"}</Text>}\n >\n {triggerPrice ?? \"--\"}\n </Text.numeral>\n </Flex>\n )}\n\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.price\")}</Text>\n <Text.numeral\n intensity={80}\n dp={props.quote_dp}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n suffix={<Text intensity={54}>{\" USDC\"}</Text>}\n placeholder={props.isStopMarket ? t(\"common.marketPrice\") : \"--\"}\n >\n {props.isStopMarket ? t(\"common.marketPrice\") : price ?? \"--\"}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.qty\")}</Text>\n <Text.numeral\n color={side === OrderSide.BUY ? \"buy\" : \"sell\"}\n dp={props.base_dp}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n >\n {quantity ?? \"--\"}\n </Text.numeral>\n </Flex>\n </Flex>\n\n <Flex className=\"oui-gap-[2px]\">\n <Checkbox\n color=\"white\"\n id=\"oui-checkbox-disableOrderConfirmation\"\n // className=\"oui-h-[10px] oui-w-[10px]\"\n // size={10}\n checked={!props.orderConfirm}\n onCheckedChange={(e: boolean) => {\n props.setOrderConfirm(!e);\n }}\n />\n <label\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n htmlFor=\"oui-checkbox-disableOrderConfirmation\"\n >\n {t(\"orderEntry.disableOrderConfirm\")}\n </label>\n </Flex>\n </div>\n );\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport {\n useLocalStorage,\n useMaxQty,\n useOrderEntity,\n useThrottledCallback,\n utils,\n} from \"@orderly.network/hooks\";\nimport { API, OrderEntity } from \"@orderly.network/types\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { toast, useModal } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderCellState } from \"../orderCell.script\";\n\nexport const useEditSheetScript = (props: {\n state: OrderCellState;\n editAlgoOrder: (id: string, order: OrderEntity) => Promise<any>;\n editOrder: (id: string, order: OrderEntity) => Promise<any>;\n autoCheckInput?: boolean;\n position?: API.PositionTPSLExt;\n}) => {\n const {\n state,\n editAlgoOrder,\n editOrder,\n autoCheckInput = true,\n position,\n } = props;\n const { item: order } = state;\n const { hide } = useModal();\n const [dialogOpen, setDialogOpen] = useState(false);\n\n const isAlgoOrder =\n order?.algo_order_id !== undefined &&\n order.algo_type !== AlgoOrderRootType.BRACKET;\n const isStopMarket = order?.type === \"MARKET\" && isAlgoOrder;\n const isMarketOrder = isStopMarket || order?.type === \"MARKET\";\n const [submitting, setSubmitting] = useState(false);\n\n const orderType = useMemo(() => {\n if (isAlgoOrder && order.algo_type !== AlgoOrderRootType.BRACKET) {\n return `STOP_${order.type}`;\n }\n\n return order.type;\n }, [order, isAlgoOrder]);\n\n const [orderConfirm, setOrderConfirm] = useLocalStorage(\n \"orderly_order_confirm\",\n true,\n );\n\n const { base_dp, base_tick } = props.state;\n\n const {\n formattedOrder,\n setValue,\n symbolInfo,\n markPrice,\n errors,\n validate,\n maxQty,\n } = useOrderEntry({\n order: order,\n orderType,\n position,\n });\n\n const onSheetConfirm = () => {\n validate()\n .then(\n (result) => {\n if (orderConfirm) {\n setDialogOpen(true);\n } else {\n // @ts-ignore\n onSubmit(formattedOrder);\n }\n },\n (error) => {\n // rejected\n if (error?.total?.message) {\n toast.error(error?.total.message);\n }\n },\n )\n .catch((err) => {});\n };\n\n const onCloseDialog = useCallback(() => {\n setDialogOpen(false);\n }, []);\n\n const onDialogConfirm = () => {\n if (formattedOrder) {\n // @ts-ignore\n return onSubmit(formattedOrder);\n }\n return Promise.reject();\n };\n\n const onClose = useCallback(() => {\n hide();\n }, []);\n\n const onSubmit = useCallback(\n async (values: OrderEntity) => {\n let future;\n const isHidden =\n order.visible_quantity !== undefined\n ? order.visible_quantity === 0\n : (order as any).visible !== undefined\n ? (order as any).visible === 0\n : false;\n if (order.algo_order_id !== undefined) {\n if (isStopMarket && \"order_price\" in values) {\n const { order_price, ...rest } = values;\n values = rest;\n }\n future = editAlgoOrder(order.algo_order_id.toString(), {\n ...values,\n });\n } else {\n future = editOrder((order as any).order_id.toString(), {\n ...values,\n ...(isHidden ? { visible_quantity: 0 } : {}),\n });\n }\n try {\n setSubmitting(true);\n\n const res = await future;\n onClose();\n } catch (err: any) {\n toast.error(err?.message ?? `${err}`);\n } finally {\n setSubmitting(false);\n }\n },\n [editAlgoOrder, editOrder],\n );\n\n const sliderValue = useMemo(() => {\n const qty = formattedOrder.order_quantity;\n if (qty && Number(qty) !== 0 && maxQty !== 0) {\n const value = new Decimal(qty)\n .div(maxQty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n return value;\n }\n return 0;\n }, [formattedOrder.order_quantity, maxQty]);\n\n const isChanged =\n order.price != formattedOrder.order_price ||\n order.quantity != formattedOrder.order_quantity ||\n order.trigger_price != formattedOrder.trigger_price;\n\n const setSliderValue = useThrottledCallback(\n (value: number) => {\n const quantity = new Decimal(value)\n .div(100)\n .mul(maxQty)\n .toDecimalPlaces(base_dp, Decimal.ROUND_DOWN)\n .toNumber();\n setValue(\"order_quantity\", utils.formatNumber(quantity, base_tick));\n },\n 50,\n {},\n );\n\n const setOrderValue = (key: any, value: string | number) => {\n setValue(key, value);\n };\n\n return {\n ...state,\n curMarkPrice: markPrice,\n isAlgoOrder,\n isStopMarket,\n price: formattedOrder.order_price,\n setPrice: (value: string) => setOrderValue(\"order_price\", value),\n priceEdit: !isStopMarket,\n triggerPrice: formattedOrder.trigger_price,\n setTriggerPrice: (value: string) => setOrderValue(\"trigger_price\", value),\n quantity: formattedOrder.order_quantity,\n setQuantity: (value: string) => {\n console.trace(\"set quantity\");\n setOrderValue(\"order_quantity\", value);\n },\n maxQty,\n sliderValue,\n setSliderValue,\n onClose: onClose,\n onSheetConfirm: onSheetConfirm,\n errors,\n orderType,\n isChanged,\n baseTick: base_tick,\n\n dialogOpen,\n setDialogOpen,\n onDialogConfirm,\n onCloseDialog,\n submitting,\n\n orderConfirm,\n setOrderConfirm,\n };\n};\n\nexport type EditSheetState = ReturnType<typeof useEditSheetScript>;\n\nconst useOrderEntry = (props: {\n order: API.AlgoOrderExt;\n orderType: string;\n position?: API.PositionTPSLExt;\n}) => {\n const { order, orderType, position } = props;\n\n const [formattedOrder, setFormattedOrder] = useState({\n side: order.side,\n order_type: orderType,\n order_price: order.price,\n order_quantity: order.quantity,\n trigger_price: order.trigger_price,\n reduce_only: order.reduce_only,\n symbol: order.symbol,\n });\n\n const { reduce_only } = order;\n\n const positionQty = position?.position_qty;\n\n const _maxQty = useMaxQty(order.symbol, order.side as any, order.reduce_only);\n\n const maxQty = useMemo(() => {\n if (reduce_only) {\n return Math.abs(positionQty ?? 0);\n }\n return order.quantity + Math.abs(_maxQty);\n }, [order.quantity, _maxQty, reduce_only, positionQty]);\n\n const { symbolInfo, markPrice, errors, validate } = useOrderEntity(\n // @ts-ignore\n {\n ...formattedOrder,\n symbol: order.symbol,\n },\n {\n maxQty,\n },\n );\n\n const setValue = (key: any, value: any) => {\n setFormattedOrder((oldValue) => ({\n ...oldValue,\n [key]: value,\n }));\n };\n\n return {\n symbolInfo,\n markPrice,\n errors,\n validate,\n setValue,\n formattedOrder,\n maxQty,\n };\n};\n","import { API, OrderEntity } from \"@orderly.network/types\";\nimport { OrderCellState } from \"../orderCell.script\";\nimport { useEditSheetScript } from \"./editSheet.script\";\nimport { EditSheet } from \"./editSheet.ui\";\n\nexport const EditSheetWidget = (props: {\n state: OrderCellState;\n editAlgoOrder: (id: string, order: OrderEntity) => Promise<any>;\n editOrder: (id: string, order: OrderEntity) => Promise<any>;\n autoCheckInput?: boolean;\n position?: API.PositionTPSLExt;\n}) => {\n const state = useEditSheetScript(props);\n return <EditSheet {...state} />;\n};\n","import { FC } from \"react\";\nimport { useEditBtnScript } from \"./editBtn.script\";\nimport { EditBtn } from \"./editBtn.ui\";\nimport { OrderCellState } from \"../orderCell.script\";\n\nexport const EditBtnWidget = (props: {\n state : OrderCellState;\n}) => {\n const state = useEditBtnScript(props);\n return (<EditBtn {...state} />);\n};\n","import { API } from \"@orderly.network/types\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { TabType } from \"../../orders.widget\";\nimport { useSymbolContext } from \"../../provider/symbolContext\";\n\nexport const useOrderCellScript = (props: {\n item: API.AlgoOrderExt;\n index: number;\n type: TabType;\n sharePnLConfig?: SharePnLConfig;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}) => {\n const symbolInfo = useSymbolContext();\n return {\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type OrderCellState = ReturnType<typeof useOrderCellScript>;\n","import { API } from \"@orderly.network/types\";\nimport { useOrderCellScript } from \"./orderCell.script\";\nimport { OrderCell } from \"./orderCell.ui\";\nimport { TabType } from \"../../orders.widget\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const OrderCellWidget = (props: {\n item: API.AlgoOrderExt;\n index: number;\n className?: string;\n type: TabType;\n sharePnLConfig?: SharePnLConfig;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}) => {\n const { className, ...rest } = props;\n\n const state = useOrderCellScript(rest);\n return <OrderCell {...state} className={className} />;\n};\n","import { forwardRef } from \"react\";\nimport { OrderSide, OrderStatus, API } from \"@orderly.network/types\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { TabType } from \"../orders.widget\";\nimport { OrderListInstance, useOrderListScript } from \"./orderList.script\";\nimport { DesktopOrderList, MobileOrderList } from \"./orderList.ui\";\n\nexport type DesktopOrderListWidgetProps = {\n type: TabType;\n ordersStatus?: OrderStatus;\n /** if has value, will be fetch current symbol orders*/\n symbol?: string;\n onSymbolChange?: (symbol: API.Symbol) => void;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n testIds?: {\n tableBody?: string;\n };\n};\n\nexport const DesktopOrderListWidget = forwardRef<\n OrderListInstance,\n DesktopOrderListWidgetProps\n>((props, ref) => {\n const { testIds, ...rest } = props;\n const state = useOrderListScript({ ...rest, ref });\n return <DesktopOrderList {...state} testIds={testIds} />;\n});\n\nexport const MobileOrderListWidget = (props: {\n type: TabType;\n ordersStatus?: OrderStatus;\n /** if has value, will be fetch current symbol orders*/\n symbol?: string;\n onSymbolChange?: (symbol: API.Symbol) => void;\n sharePnLConfig?: SharePnLConfig;\n classNames?: {\n root?: string;\n cell?: string;\n content?: string;\n };\n showFilter?: boolean;\n filterConfig?: {\n side?: OrderSide | \"all\";\n range?: {\n from?: Date;\n to?: Date;\n };\n };\n}) => {\n const state = useOrderListScript({\n ...props,\n enableLoadMore: true,\n });\n return (\n <MobileOrderList\n {...state}\n classNames={props.classNames}\n showFilter={props.showFilter}\n />\n );\n};\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n ForwardedRef,\n useImperativeHandle,\n} from \"react\";\nimport { differenceInDays, setHours, subDays, format } from \"date-fns\";\nimport {\n useLocalStorage,\n useOrderStream,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport {\n AlgoOrderRootType,\n OrderStatus,\n OrderSide,\n API,\n} from \"@orderly.network/types\";\nimport { modal, usePagination, Text, Table } from \"@orderly.network/ui\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { areDatesEqual } from \"../../utils/util\";\nimport { TabType } from \"../orders.widget\";\nimport { useFormatOrderHistory } from \"./useFormatOrderHistory\";\n\nexport type OrderListInstance = {\n download?: () => void;\n};\n\nexport type useOrderListScriptOptions = {\n type: TabType;\n ordersStatus?: OrderStatus;\n symbol?: string;\n enableLoadMore?: boolean;\n onSymbolChange?: (symbol: API.Symbol) => void;\n sharePnLConfig?: SharePnLConfig;\n filterConfig?: {\n side?: OrderSide | \"all\";\n range?: {\n from?: Date;\n to?: Date;\n };\n };\n pnlNotionalDecimalPrecision?: number;\n ref?: ForwardedRef<OrderListInstance>;\n};\n\nexport const useOrderListScript = (props: useOrderListScriptOptions) => {\n const {\n ordersStatus,\n type,\n enableLoadMore = false,\n onSymbolChange,\n filterConfig,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n } = props;\n const { t } = useTranslation();\n const symbolsInfo = useSymbolsInfo();\n\n const manualPagination = useMemo(() => {\n // pending and ts_sl list use client pagination\n return ordersStatus !== OrderStatus.INCOMPLETE;\n }, [ordersStatus]);\n\n const defaultPageSize = 50;\n const { page, pageSize, setPage, pagination, parsePagination } =\n usePagination({\n pageSize: defaultPageSize,\n });\n\n // when symbol change, reset page\n useEffect(() => {\n setPage(1);\n }, [props.symbol]);\n\n const {\n orderStatus,\n ordersSide,\n dateRange,\n filterItems,\n onFilter,\n filterDays,\n updateFilterDays,\n } = useFilter(type, {\n ordersStatus,\n setPage,\n filterConfig,\n });\n\n const includes = useMemo(() => {\n if (type === TabType.tp_sl) {\n return [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL];\n }\n return undefined;\n }, [type]);\n\n const excludes = useMemo(() => {\n if (type === TabType.pending) {\n return [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL];\n }\n return undefined;\n }, [type]);\n\n const tableInstance = useRef<Table<any>>();\n\n useImperativeHandle(props.ref, () => ({\n download: () => {\n const filename = `orders_${format(new Date(), \"yyyyMMdd_HHmmss\")}`;\n tableInstance.current?.download(filename);\n },\n }));\n\n const [\n data,\n {\n isLoading,\n loadMore,\n cancelOrder,\n updateOrder,\n cancelAlgoOrder,\n updateAlgoOrder,\n cancelAllOrders,\n cancelAllTPSLOrders,\n meta,\n refresh,\n },\n ] = useOrderStream({\n symbol: props.symbol,\n status: orderStatus,\n side: ordersSide,\n page: enableLoadMore || !manualPagination ? undefined : page,\n // pending and ts_sl list get all data\n size: manualPagination ? pageSize : 500,\n sourceTypeAll: type === TabType.orderHistory,\n dateRange,\n includes,\n excludes,\n });\n\n const localPageSizeKey = `orderly_${type}_pageSize`;\n const [typePageSize, setTypePageSize] = useLocalStorage(\n localPageSizeKey,\n defaultPageSize,\n );\n\n useEffect(() => {\n if (typePageSize !== pageSize) {\n setTypePageSize(pageSize);\n }\n }, [pageSize, typePageSize]);\n\n const onCancelAll = useCallback(() => {\n const title =\n props.type === TabType.pending\n ? t(\"orders.pending.cancelAll\")\n : props.type === TabType.tp_sl\n ? t(\"orders.tpsl.cancelAll\")\n : \"\";\n\n const content = TabType.pending\n ? t(\"orders.pending.cancelAll.description\")\n : props.type === TabType.tp_sl\n ? t(\"orders.tpsl.cancelAll.description\")\n : \"\";\n\n modal.confirm({\n title: title,\n content: <Text size=\"sm\">{content}</Text>,\n onCancel: async () => {},\n onOk: async () => {\n try {\n // await cancelAll(null, { source_type: \"ALL\" });\n if (type === TabType.tp_sl) {\n await cancelAllTPSLOrders();\n } else {\n await cancelAllOrders();\n }\n refresh();\n return Promise.resolve(true);\n } catch (error) {\n // @ts-ignore\n if (error?.message !== undefined) {\n // @ts-ignore\n toast.error(error.message);\n }\n return Promise.resolve(false);\n } finally {\n Promise.resolve();\n }\n },\n });\n }, [type, t]);\n\n const formattedData = useFormatOrderHistory(data ?? []);\n\n const dataSource =\n useDataTap(type !== TabType.tp_sl ? formattedData : data, {\n fallbackData: [],\n }) ?? undefined;\n\n const _pagination = useMemo(() => {\n if (manualPagination) {\n return parsePagination(meta);\n }\n return pagination;\n }, [meta, manualPagination, parsePagination, pagination]);\n\n return {\n type,\n dataSource,\n isLoading,\n loadMore,\n cancelOrder,\n updateOrder,\n cancelAlgoOrder,\n updateAlgoOrder,\n pagination: _pagination,\n manualPagination,\n pnlNotionalDecimalPrecision,\n\n // filter\n onFilter,\n filterItems,\n onCancelAll,\n\n onSymbolChange,\n\n sharePnLConfig,\n tableInstance,\n symbolsInfo,\n filterDays,\n updateFilterDays,\n };\n};\n\nconst useFilter = (\n type: TabType,\n option: {\n ordersStatus?: OrderStatus | \"all\";\n setPage: (page: number) => void;\n filterConfig?: {\n side?: OrderSide | \"all\";\n range?: {\n from?: Date;\n to?: Date;\n };\n };\n },\n) => {\n const { t } = useTranslation();\n const [orderStatus, setOrderStatus] = useState<OrderStatus | \"all\">(\n option.ordersStatus ?? \"all\",\n );\n const [ordersSide, setOrdersSide] = useState<OrderSide | \"all\">(\n option.filterConfig?.side ?? \"all\",\n );\n\n /// default is 90d\n const [filterDays, setFilterDays] = useState<1 | 7 | 30 | 90 | null>(90);\n\n const defaultRange =\n option.filterConfig?.range ??\n (type === TabType.all || type === TabType.orderHistory\n ? formatDatePickerRange({\n to: new Date(),\n from: offsetEndOfDay(subDays(new Date(), 89)),\n })\n : {});\n\n const [dateRange, setDateRange] = useState<{\n from?: Date;\n to?: Date;\n }>(defaultRange);\n\n const updateFilterDays = (days: 1 | 7 | 30 | 90) => {\n setFilterDays(days);\n setDateRange({\n from: offsetStartOfDay(subDays(new Date(), days - 1)),\n to: offsetEndOfDay(new Date()),\n });\n option.setPage(1);\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"side\") {\n setOrdersSide(filter.value);\n option.setPage(1);\n }\n\n if (filter.name === \"status\") {\n setOrderStatus(filter.value);\n option.setPage(1);\n }\n\n if (filter.name === \"dateRange\") {\n setDateRange(formatDatePickerRange(filter.value));\n option.setPage(1);\n\n const newDateRange = formatDatePickerRange(filter.value);\n if (newDateRange.from && newDateRange.to) {\n const diffDays =\n Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) + 1;\n const dateRangeMap: { [key: number]: { from: Date; to: Date } } = {\n 1: {\n from: offsetStartOfDay(new Date())!,\n to: offsetEndOfDay(new Date())!,\n },\n 7: {\n from: offsetStartOfDay(subDays(new Date(), 6))!,\n to: offsetEndOfDay(new Date())!,\n },\n 30: {\n from: offsetStartOfDay(subDays(new Date(), 29))!,\n to: offsetEndOfDay(new Date())!,\n },\n 90: {\n from: offsetStartOfDay(subDays(new Date(), 89))!,\n to: offsetEndOfDay(new Date())!,\n },\n };\n\n const dateRange = dateRangeMap[diffDays];\n if (\n dateRange &&\n areDatesEqual(dateRange.from, newDateRange.from) &&\n areDatesEqual(dateRange.to, newDateRange.to)\n ) {\n setFilterDays(diffDays as any);\n } else {\n setFilterDays(null);\n }\n }\n }\n };\n\n const filterItems = useMemo((): any[] => {\n const sideFilter = {\n type: \"select\",\n name: \"side\",\n options: [\n {\n label: t(\"common.side.all\"),\n value: \"all\",\n },\n {\n label: t(\"common.buy\"),\n value: \"BUY\",\n },\n {\n label: t(\"common.sell\"),\n value: \"SELL\",\n },\n ],\n value: ordersSide,\n };\n\n const dateRangeFilter = {\n type: \"range\",\n name: \"dateRange\",\n value: dateRange,\n };\n\n const statusFilter = {\n type: \"select\",\n name: \"status\",\n options: [\n {\n label: t(\"common.status.all\"),\n value: \"all\",\n },\n {\n label: t(\"orders.status.pending\"),\n value: OrderStatus.INCOMPLETE,\n },\n {\n label: t(\"orders.status.filled\"),\n value: OrderStatus.FILLED,\n },\n {\n label: t(\"orders.status.partialFilled\"),\n value: OrderStatus.PARTIAL_FILLED,\n },\n {\n label: t(\"orders.status.canceled\"),\n value: OrderStatus.CANCELLED,\n },\n {\n label: t(\"orders.status.rejected\"),\n value: OrderStatus.REJECTED,\n },\n ],\n value: orderStatus,\n };\n switch (type) {\n case TabType.all:\n return [sideFilter, statusFilter, dateRangeFilter];\n case TabType.pending:\n return [sideFilter];\n case TabType.tp_sl:\n return [sideFilter];\n case TabType.filled:\n return [sideFilter];\n case TabType.cancelled:\n return [sideFilter];\n case TabType.rejected:\n return [sideFilter];\n case TabType.orderHistory:\n return [sideFilter, statusFilter, dateRangeFilter];\n }\n }, [type, ordersSide, orderStatus, dateRange, t]);\n\n return {\n filterItems,\n onFilter,\n ordersSide: ordersSide === \"all\" ? undefined : ordersSide,\n dateRange,\n orderStatus: orderStatus === \"all\" ? undefined : orderStatus,\n filterDays,\n updateFilterDays,\n };\n};\n\nexport type OrdersBuilderState = ReturnType<typeof useOrderListScript>;\nexport type FilterState = ReturnType<typeof useFilter>;\n\nexport const parseDateRangeForFilter = (dateRange: {\n from: Date;\n to?: Date;\n}) => {\n let { from, to } = dateRange;\n\n if (typeof to === \"undefined\") {\n to = new Date();\n }\n\n const diff = differenceInDays(from, to);\n\n // console.log(\"diff\", diff);\n\n if (diff === 0) {\n return [from, setHours(to, 23)];\n }\n\n return [from, to];\n};\n\nfunction offsetStartOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(0, 0, 0, 0);\n return newDate;\n}\n\nfunction offsetEndOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(23, 59, 59, 999);\n return newDate;\n}\n\nexport const formatDatePickerRange = (option: { from?: Date; to?: Date }) => ({\n from: offsetStartOfDay(option.from),\n to: offsetEndOfDay(option.to ?? option.from),\n});\n","import { useMemo } from \"react\";\nimport { API, AlgoOrderRootType, OrderStatus } from \"@orderly.network/types\";\n\nexport const useFormatOrderHistory = (data: API.AlgoOrderExt[]) => {\n const formattedData = useMemo(() => {\n const _data = [];\n\n for (let index = 0; index < data.length; index++) {\n const element = data[index];\n // console.log(\"element\", element);\n if (\n element.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL ||\n element.algo_type === AlgoOrderRootType.TP_SL\n ) {\n if (\n element.algo_status !== OrderStatus.FILLED &&\n element.algo_status !== OrderStatus.PARTIAL_FILLED\n ) {\n for (let j = 0; j < element.child_orders.length; j++) {\n const e = element.child_orders[j];\n if (!e.is_activated || !e.trigger_price) {\n continue;\n }\n (e as any).parent_algo_type = element.algo_type;\n _data.push(e);\n }\n } else {\n // if order is filled then show only the filled order\n for (let j = 0; j < element.child_orders.length; j++) {\n const e = element.child_orders[j];\n if (\n !!e &&\n (e.algo_status === OrderStatus.FILLED ||\n e.algo_status === OrderStatus.PARTIAL_FILLED)\n ) {\n (e as any).parent_algo_type = element.algo_type;\n _data.push(e);\n }\n }\n }\n } else {\n _data.push(element);\n }\n }\n\n return _data;\n\n // data.map((item) => {});\n }, [data]);\n\n return formattedData;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/orders.widget.tsx","../src/components/orders.script.ts","../src/components/orders.ui.tsx","../src/components/orderList/orderList.ui.tsx","../src/utils/util.ts","../src/components/provider/symbolProvider.tsx","../src/components/provider/symbolContext.tsx","../src/components/orderList/desktop/useColumn.tsx","../src/components/shareButton/shareButton.ui.tsx","../src/components/shareButton/shareButton.script.tsx","../src/components/shareButton/shareButton.widget.tsx","../src/components/orderList/desktop/bracketOrderPrice.tsx","../src/components/orderList/desktop/cancelBtn.tsx","../src/components/orderList/orderListContext.tsx","../src/components/orderList/desktop/price.tsx","../src/components/orderList/desktop/editOrder/confirmContent.tsx","../src/components/orderList/desktop/editOrder/innerInput.tsx","../src/components/orderList/desktop/quantity.tsx","../src/components/orderList/tpslOrderRowContext.tsx","../src/components/orderList/desktop/renew.tsx","../src/components/orderList/desktop/tpslEdit.tsx","../src/components/orderList/desktop/tpslPrice.tsx","../src/components/orderList/desktop/tpslTriggerPrice.tsx","../src/components/orderList/desktop/triggerPrice.tsx","../src/components/orderList/mobile/orderCell.ui.tsx","../src/components/orderList/mobile/bracketOrderPrice/bracketOrderPrice.ui.tsx","../src/components/orderList/mobile/items.tsx","../src/components/orderList/mobile/bracketOrderPrice/bracketOrderPrice.script.tsx","../src/components/orderList/mobile/bracketOrderPrice/bracketOrderPrice.widget.tsx","../src/components/orderList/mobile/cancelBtn/cancelBtn.ui.tsx","../src/components/orderList/mobile/cancelBtn/cancelBtn.script.tsx","../src/components/orderList/mobile/cancelBtn/cancelBtn.widget.tsx","../src/components/orderList/mobile/editBtn/editBtn.ui.tsx","../src/components/orderList/mobile/editBtn/editBtn.script.tsx","../src/components/orderList/mobile/editSheet/editSheet.ui.tsx","../src/components/orderList/mobile/editSheet/editDialogContent.tsx","../src/components/orderList/mobile/editSheet/editSheet.script.tsx","../src/components/orderList/mobile/editSheet/editSheet.widget.tsx","../src/components/orderList/mobile/editBtn/editBtn.widget.tsx","../src/components/orderList/mobile/orderCell.script.tsx","../src/components/orderList/mobile/orderCell.widget.tsx","../src/components/orderList/orderList.widget.tsx","../src/components/orderList/orderList.script.tsx","../src/components/orderList/useFormatOrderHistory.ts"],"names":["forwardRef","useImperativeHandle","useRef","useOrdersScript","props","current","pnlNotionalDecimalPrecision","sharePnLConfig","orderListRef","TabPanel","Tabs","OrderStatus","useTranslation","Flex","ListView","Button","Grid","Picker","DataFilter","cn","TableFeatures","AuthGuardDataTable","utils","OrderSide","AlgoOrderRootType","AlgoOrderType","OrderType","i18n","upperCaseFirstLetter","str","parseBadgesFor","record","orderType","algoType","list","types","type","tpOrder","order","slOrder","grayCell","findBracketTPSLOrder","innerOrder","item","calcBracketRoiAndPnL","defaultCallback","quantity","tpPnL","slPnL","tpRoi","slRoi","areDatesEqual","date1","date2","useMemo","useSymbolsInfo","createContext","useContext","SymbolContext","useSymbolContext","jsx","SymbolProvider","symbol","children","symbolInfo","memoizedValue","format","Text","Badge","SharePnLDialogId","commifyOptional","Decimal","modal","ShareIcon","Fragment","ShareButton","e","useReferralInfo","useSymbolLeverage","useShareButtonScript","modalId","iconSize","getFirstRefCode","refCode","leverage","ShareButtonWidget","state","Tooltip","EditIcon","jsxs","BracketOrderPrice","quote_dp","base_dp","t","sl_trigger_price","tp_trigger_price","pnl","roi","Price","EditBracketOrder","onEdit","value","useState","ThrottledButton","toast","getMinNotional","useMemoizedFn","OrderListContext","useOrderListContext","OrderListProvider","cancelOrder","editOrder","cancelAlgoOrder","editAlgoOrder","onCancelOrder","onEditOrder","position","isHidden","orderEntry","checkMinNotional","price","qty","min_notional","minNotional","CancelButton","isLoading","setIsLoading","event","res","error","useEffect","useSymbolPriceRange","Popover","CloseIcon","commify","Trans","ConfirmContent","base","cancelPopover","isSubmitting","onConfirm","common","CheckIcon","Input","inputFormatter","InnerInput","inputRef","dp","setValue","setEditing","handleKeyDown","onClick","onClose","onFocus","onBlur","hintInfo","input","length","open","setPrice","setOpen","editing","isAlgoOrder","isStopMarket","setIsSubmitting","rangeInfo","closePopover","notionalText","order_id","data","future","result","err","componentRef","handleClickOutside","trigger","NormalState","useCallback","useMaxQty","Slider","PopoverTrigger","PopoverRoot","PopoverContent","unstable_serialize","useAccount","useMutation","useSWRConfig","findTPSLOrderPriceFromOrder","findTPSLFromOrder","TPSLOrderRowContext","useTPSLOrderRowContext","TPSLOrderRowProvider","setPosition","doDeleteOrder","doUpdateOrder","config","positionKey","onUpdateOrder","params","getRelatedPosition","p","sl_order_price","tp_order_price","calcTPSLPnL","isTPSLOrder","avgOpenPrice","OrderQuantity","otherOrderQuantity","reduce_only","originSetQuantity","setQuantity","setError","onUpdateTPSLOrder","base_tick","maxQty","positionQty","clickHandler","order_price","rest","quantitySliderRef","EditState","executed","confirmOpen","side","sliderValue","setSliderValue","formatQuantity","_qty","values","Buttons","index","useConfig","Renew","doCreateOrder","reset","isMutating","brokerId","onSubmit","PositionTPSLPopover","TP_SLEditButton","TPSLOrderPrice","TPSLOrderPriceItem","quoteDP","useTPSLOrderPrice","tpTriggerPrice","slTriggerPrice","OrderTriggerPrice","TPSLTriggerPrice","direction","msgs","TriggerPriceItem","child","content","entryPrice","orderSide","label","TriggerPrice","isBracketOrder","quote_max","quote_min","useOrderColumn","_type","onSymbolChange","instrument","fillAndQuantity","avgOpen","tpslTriggerPrice","realizedPnL","estTotal","fee","status","reduceOnly","hidden","cancelBtn","orderTime","triggerPrice","bracketOrderPrice","pendingTabCancelBtn","tpslPrice","tpslNotional","tpslAction","avgPrice","option","r1","r2","badges","displayBadges","showGray","sortOrder","clsName","a","b","aQuantity","bQuantity","compareNumbers","callback","info","getTPSLTriggerPrice","aTotal","bTotal","estTotalValue","_value","formatValue","date","statusMap","_","isPending","Divider","Statistic","SharePnLBottomSheetId","SymbolToken","isBuy","OrderTypeView","OrderTime","OrderState","Qty","isEntirePosition","Filled","EstTotal","MarkPrice","LimitPrice","TPTrigger","MobileTooltip","SLTrigger","TPPrice","renderOrderPrice","SLPrice","TPSLQuantity","AvgPrice","OrderPrice","RealizedPnL","classNames","Fee","useBracketOrderPriceScript","BracketOrderPriceWidget","SimpleDialog","CancelBtn","useCancelBtnScript","CancelBtnWidget","EditBtn","PositionTPSLSheet","useOrderEntryFormErrorMsg","Checkbox","ConfirmDialogContent","EditSheet","parseErrorMsg","orderQuantityErrorMsg","orderPriceErrorMsg","triggerPriceErrorMsg","percentages","baseTick","formatQty","useLocalStorage","useOrderEntity","useThrottledCallback","useModal","useEditSheetScript","autoCheckInput","hide","dialogOpen","setDialogOpen","isMarketOrder","submitting","setSubmitting","orderConfirm","setOrderConfirm","formattedOrder","markPrice","errors","validate","useOrderEntry","onSheetConfirm","onCloseDialog","onDialogConfirm","isChanged","setOrderValue","key","setFormattedOrder","_maxQty","oldValue","EditSheetWidget","useEditBtnScript","onShowEditSheet","EditBtnWidget","OrderCell","Header","Body","Btns","itemsWithType","useOrderCellScript","OrderCellWidget","className","DesktopOrderList","columns","CancelAll","table","MobileOrderList","differenceInDays","setHours","subDays","useOrderStream","useDataTap","usePagination","useFormatOrderHistory","_data","element","j","useOrderListScript","ordersStatus","enableLoadMore","filterConfig","symbolsInfo","manualPagination","defaultPageSize","page","pageSize","setPage","pagination","parsePagination","orderStatus","ordersSide","dateRange","filterItems","onFilter","filterDays","updateFilterDays","useFilter","includes","excludes","tableInstance","filename","loadMore","updateOrder","updateAlgoOrder","cancelAllOrders","cancelAllTPSLOrders","meta","refresh","localPageSizeKey","typePageSize","setTypePageSize","onCancelAll","title","formattedData","dataSource","_pagination","setOrderStatus","setOrdersSide","setFilterDays","defaultRange","formatDatePickerRange","offsetEndOfDay","setDateRange","days","offsetStartOfDay","filter","newDateRange","diffDays","sideFilter","dateRangeFilter","statusFilter","newDate","DesktopOrderListWidget","ref","testIds","MobileOrderListWidget","Orders","commonProps","TabType","OrdersWidget"],"mappings":"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","sourcesContent":["import { forwardRef } from \"react\";\nimport { useOrdersScript } from \"./orders.script\";\nimport { Orders } from \"./orders.ui\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { OrderListInstance } from \"./orderList/orderList.script\";\n\nexport enum TabType {\n all = \"all\",\n pending = \"pending\",\n tp_sl = \"tp_sl\",\n filled = \"filled\",\n cancelled = \"cancelled\",\n rejected = \"rejected\",\n orderHistory = \"orderHistory\",\n}\n\nexport type OrdersWidgetProps = {\n current?: TabType;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n};\n\nexport const OrdersWidget = forwardRef<OrderListInstance, OrdersWidgetProps>(\n (props, ref) => {\n const state = useOrdersScript({ ...props, ref });\n\n return <Orders {...state} />;\n }\n);\n","import { ForwardedRef, useImperativeHandle, useRef } from \"react\";\nimport { TabType } from \"./orders.widget\";\nimport { OrderListInstance } from \"./orderList/orderList.script\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\ntype UseOrdersScriptOptions = {\n current?: TabType;\n pnlNotionalDecimalPrecision?: number;\n ref: ForwardedRef<OrderListInstance>;\n sharePnLConfig?: SharePnLConfig\n};\n\nexport const useOrdersScript = (props: UseOrdersScriptOptions) => {\n const { current, pnlNotionalDecimalPrecision, sharePnLConfig } = props;\n\n const orderListRef = useRef<OrderListInstance>(null);\n\n useImperativeHandle(props.ref, () => ({\n download: () => {\n orderListRef.current?.download?.();\n },\n }));\n\n return {\n current,\n pnlNotionalDecimalPrecision,\n orderListRef,\n sharePnLConfig,\n };\n};\n\nexport type OrdersBuilderState = ReturnType<typeof useOrdersScript>;\n","import { TabPanel, Tabs } from \"@orderly.network/ui\";\nimport { OrderStatus } from \"@orderly.network/types\";\nimport { OrdersBuilderState } from \"./orders.script\";\nimport { TabType } from \"./orders.widget\";\nimport { DesktopOrderListWidget } from \"./orderList\";\nimport { DesktopOrderListWidgetProps } from \"./orderList/orderList.widget\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const Orders = (props: OrdersBuilderState) => {\n const { t } = useTranslation();\n const commonProps: Partial<DesktopOrderListWidgetProps> = {\n pnlNotionalDecimalPrecision: props.pnlNotionalDecimalPrecision,\n };\n\n return (\n <Tabs\n defaultValue={props.current || TabType.all}\n variant=\"contained\"\n className=\"oui-h-full\"\n classNames={{\n tabsContent: \"oui-h-[calc(100%_-_28px)]\",\n }}\n >\n <TabPanel value={TabType.all} title={t(\"common.all\")}>\n <DesktopOrderListWidget\n ref={props.orderListRef}\n type={TabType.all}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n sharePnLConfig={props.sharePnLConfig}\n {...commonProps}\n />\n </TabPanel>\n <TabPanel value={TabType.pending} title={t(\"orders.status.pending\")}>\n <DesktopOrderListWidget\n ref={props.orderListRef}\n type={TabType.pending}\n ordersStatus={OrderStatus.INCOMPLETE}\n {...commonProps}\n />\n </TabPanel>\n <TabPanel value={TabType.tp_sl} title={t(\"common.tpsl\")}>\n <DesktopOrderListWidget\n ref={props.orderListRef}\n type={TabType.tp_sl}\n ordersStatus={OrderStatus.INCOMPLETE}\n {...commonProps}\n />\n </TabPanel>\n <TabPanel value={TabType.filled} title={t(\"orders.status.filled\")}>\n <DesktopOrderListWidget\n ref={props.orderListRef}\n type={TabType.filled}\n ordersStatus={OrderStatus.FILLED}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n sharePnLConfig={props.sharePnLConfig}\n {...commonProps}\n />\n </TabPanel>\n <TabPanel value={TabType.cancelled} title={t(\"orders.status.canceled\")}>\n <DesktopOrderListWidget\n ref={props.orderListRef}\n type={TabType.cancelled}\n ordersStatus={OrderStatus.CANCELLED}\n {...commonProps}\n />\n </TabPanel>\n <TabPanel value={TabType.rejected} title={t(\"orders.status.rejected\")}>\n <DesktopOrderListWidget\n ref={props.orderListRef}\n type={TabType.rejected}\n ordersStatus={OrderStatus.REJECTED}\n {...commonProps}\n />\n </TabPanel>\n {/* <TabPanel value={TabType.orderHistory} title={t(\"orders.orderHistory\")}>\n <DesktopOrderListWidget\n type={TabType.orderHistory}\n {...commonProps}\n />\n </TabPanel> */}\n </Tabs>\n );\n};\n// ----------------- Orders ui component end -----------------\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Flex,\n ListView,\n Button,\n Grid,\n Picker,\n DataFilter,\n cn,\n TableFeatures,\n} from \"@orderly.network/ui\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { grayCell } from \"../../utils/util\";\nimport { TabType } from \"../orders.widget\";\nimport { SymbolProvider } from \"../provider/symbolProvider\";\nimport { useOrderColumn } from \"./desktop/useColumn\";\nimport { OrderCellWidget } from \"./mobile\";\nimport { OrdersBuilderState } from \"./orderList.script\";\nimport { OrderListProvider } from \"./orderListContext\";\nimport { TPSLOrderRowProvider } from \"./tpslOrderRowContext\";\n\nexport const DesktopOrderList: FC<\n OrdersBuilderState & {\n testIds?: {\n tableBody?: string;\n };\n }\n> = (props) => {\n const { sharePnLConfig, ...rest } = props;\n const columns = useOrderColumn({\n _type: props.type,\n onSymbolChange: props.onSymbolChange,\n pnlNotionalDecimalPrecision: props.pnlNotionalDecimalPrecision,\n sharePnLConfig,\n symbolsInfo: props.symbolsInfo,\n });\n\n return (\n <OrderListProvider\n cancelOrder={props.cancelOrder}\n editOrder={props.updateOrder}\n cancelAlgoOrder={props.cancelAlgoOrder}\n editAlgoOrder={props.updateAlgoOrder}\n // cancelTPSLOrder={props.cancelTPSLOrder}\n >\n <Flex direction=\"column\" width=\"100%\" height=\"100%\" itemAlign=\"start\">\n {props.filterItems.length > 0 && (\n <DataFilter\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n trailing={\n [TabType.pending, TabType.tp_sl].includes(props.type) && (\n <CancelAll {...props} />\n )\n }\n />\n )}\n <AuthGuardDataTable\n columns={columns}\n loading={props.isLoading}\n dataSource={props.dataSource}\n bordered\n ignoreLoadingCheck={true}\n testIds={{\n body: props.testIds?.tableBody,\n }}\n classNames={{\n header: \"oui-h-[38px]\",\n root: \"oui-items-start !oui-h-[calc(100%_-_49px)]\",\n }}\n onRow={(record, index) => {\n return {\n className: cn(\n \"oui-h-[48px]\",\n grayCell(record)\n ? \"oui-text-base-contrast-20\"\n : \"oui-text-base-contrast-80\",\n ),\n };\n }}\n generatedRowKey={(record, index) =>\n `${props.type}${index}${\n record.order_id || record.algo_order_id\n }_index${index}`\n }\n renderRowContainer={(record: any, index, children) => {\n if (\n props.type === TabType.tp_sl ||\n props.type === TabType.pending\n ) {\n children = (\n <TPSLOrderRowProvider order={record}>\n {children}\n </TPSLOrderRowProvider>\n );\n }\n\n return (\n <SymbolProvider symbol={record.symbol}>{children}</SymbolProvider>\n );\n }}\n pagination={props.pagination}\n manualPagination={props.manualPagination}\n features={[TableFeatures.DownloadFeature]}\n getTableInstance={(table) => {\n props.tableInstance.current = table;\n }}\n />\n </Flex>\n </OrderListProvider>\n );\n};\n\nexport const MobileOrderList: FC<\n OrdersBuilderState & {\n classNames?: {\n root?: string;\n cell?: string;\n content?: string;\n };\n showFilter?: boolean;\n }\n> = (props) => {\n const { t } = useTranslation();\n\n return (\n <OrderListProvider\n cancelOrder={props.cancelOrder}\n editOrder={props.updateOrder}\n cancelAlgoOrder={props.cancelAlgoOrder}\n editAlgoOrder={props.updateAlgoOrder}\n // cancelTPSLOrder={props.cancelTPSLOrder}\n >\n <Grid\n cols={1}\n rows={2}\n className=\"oui-w-full oui-grid-rows-[auto,1fr]\"\n gap={2}\n >\n {/* <Filter\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n className=\"oui-px-3\"\n \n /> */}\n\n {props.showFilter ? (\n <Flex gap={2} p={2} className=\"oui-rounded-b-xl oui-bg-base-9\">\n {props.filterItems.map((item) => {\n // not support range type\n if (item.type !== \"select\") {\n return null;\n }\n return (\n <Picker\n key={`item-${item.name}`}\n options={item.options}\n size={\"sm\"}\n value={item.value}\n className=\"oui-text-2xs oui-text-base-contrast-54 \"\n placeholder={\n item.name === \"side\"\n ? t(\"common.side.all\")\n : item.name === \"status\"\n ? t(\"common.status.all\")\n : \"\"\n }\n onValueChange={(value) => {\n //\n props.onFilter?.({ name: item.name, value: value });\n }}\n />\n );\n })}\n </Flex>\n ) : (\n <div></div>\n )}\n <ListView\n className={props.classNames?.root}\n contentClassName={props.classNames?.content}\n dataSource={props.dataSource}\n loadMore={props.loadMore}\n isLoading={props.isLoading}\n renderItem={(item, index) => {\n let children = (\n <OrderCellWidget\n item={item}\n index={index}\n className={props.classNames?.cell}\n type={props.type}\n onSymbolChange={props.onSymbolChange}\n sharePnLConfig={props.sharePnLConfig}\n />\n );\n if ([TabType.tp_sl, TabType.pending].includes(props.type)) {\n children = (\n <TPSLOrderRowProvider order={item}>\n {children}\n </TPSLOrderRowProvider>\n );\n }\n return (\n <SymbolProvider symbol={item.symbol}>{children}</SymbolProvider>\n );\n }}\n />\n </Grid>\n </OrderListProvider>\n );\n};\n\nconst CancelAll: FC<OrdersBuilderState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n disabled={(props.dataSource?.length ?? 0) == 0}\n className=\"disabled:oui-bg-transport\"\n onClick={(e) => props.onCancelAll()}\n data-testid={`oui-testid-dataList-${props.type.toLowerCase()}-cancelAll-button`}\n >\n {t(\"orders.cancelAll\")}\n </Button>\n );\n};\n","import { utils } from \"@orderly.network/hooks\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport {\n AlgoOrderRootType,\n AlgoOrderType,\n API,\n OrderStatus,\n OrderType,\n} from \"@orderly.network/types\";\nimport { i18n } from \"@orderly.network/i18n\";\n\nexport const upperCaseFirstLetter = (str: string) => {\n if (str === undefined) return str;\n if (str.length === 0) return str;\n if (str.length === 1) return str.charAt(0).toUpperCase();\n return str.charAt(0).toUpperCase() + str.toLowerCase().slice(1);\n};\n\n/**\n * order_type: LIMIT、MARKET、CLOSE_POSITION\n * algo_type: STOP、TPSL、positional_TPSL、BRACKET\n */\nexport function parseBadgesFor(record: any): undefined | string[] {\n const orderType = record.type;\n const algoType = record.algo_type;\n if (typeof orderType !== \"undefined\") {\n const list: string[] = [];\n\n if (!!record.parent_algo_type) {\n if (algoType === AlgoOrderType.STOP_LOSS) {\n const types =\n orderType === OrderType.CLOSE_POSITION\n ? [i18n.t(\"common.position\"), i18n.t(\"tpsl.sl\")]\n : [i18n.t(\"tpsl.sl\")];\n list.push(...types);\n }\n\n if (algoType === AlgoOrderType.TAKE_PROFIT) {\n const types =\n orderType === OrderType.CLOSE_POSITION\n ? [i18n.t(\"common.position\"), i18n.t(\"tpsl.tp\")]\n : [i18n.t(\"tpsl.tp\")];\n list.push(...types);\n }\n\n return list;\n }\n\n const type =\n typeof orderType === \"string\" ? orderType.replace(\"_ORDER\", \"\") : \"\";\n\n // bbo(ask, bid) order as a limit type\n if ([OrderType.ASK, OrderType.BID].includes(orderType)) {\n return [i18n.t(\"orderEntry.orderType.limit\")];\n }\n\n if (\n record.algo_order_id === undefined ||\n (record.algo_order_id && algoType === \"BRACKET\")\n ) {\n const typeMap = {\n [OrderType.LIMIT]: i18n.t(\"orderEntry.orderType.limit\"),\n [OrderType.MARKET]: i18n.t(\"orderEntry.orderType.market\"),\n [OrderType.POST_ONLY]: i18n.t(\"orderEntry.orderType.postOnly\"),\n [OrderType.IOC]: i18n.t(\"orderEntry.orderType.ioc\"),\n [OrderType.FOK]: i18n.t(\"orderEntry.orderType.fok\"),\n };\n\n return [\n typeMap[type as keyof typeof typeMap] || upperCaseFirstLetter(type),\n ];\n }\n\n // stop limit, stop market\n if (type) {\n const typeMap = {\n [OrderType.LIMIT]: i18n.t(\"orderEntry.orderType.stopLimit\"),\n [OrderType.MARKET]: i18n.t(\"orderEntry.orderType.stopMarket\"),\n };\n return [typeMap[type as keyof typeof typeMap] || type];\n }\n }\n\n if (typeof algoType !== \"undefined\") {\n const list: string[] = [];\n\n if (algoType === AlgoOrderRootType.POSITIONAL_TP_SL) {\n list.push(i18n.t(\"common.position\"));\n }\n\n const tpOrder = record?.child_orders?.find(\n (order: any) =>\n order.algo_type === AlgoOrderType.TAKE_PROFIT && !!order.trigger_price\n );\n\n const slOrder = record?.child_orders?.find(\n (order: any) =>\n order.algo_type === AlgoOrderType.STOP_LOSS && !!order.trigger_price\n );\n\n if (tpOrder || slOrder) {\n list.push(\n tpOrder && slOrder\n ? i18n.t(\"common.tpsl\")\n : tpOrder\n ? i18n.t(\"tpsl.tp\")\n : i18n.t(\"tpsl.sl\")\n );\n }\n\n return list;\n }\n\n return undefined;\n}\n\nexport function grayCell(record: any): boolean {\n return (\n (record as API.Order).status === OrderStatus.CANCELLED ||\n (record as API.AlgoOrder).algo_status === OrderStatus.CANCELLED\n );\n}\n\nfunction findBracketTPSLOrder(order: API.AlgoOrderExt) {\n if (order.algo_type !== AlgoOrderRootType.BRACKET) {\n return {\n tpOrder: undefined,\n slOrder: undefined,\n };\n }\n\n const innerOrder = order.child_orders?.[0];\n if (!innerOrder)\n return {\n tpOrder: undefined,\n slOrder: undefined,\n };\n\n const tpOrder = innerOrder?.child_orders?.find(\n (item) => item.algo_type === AlgoOrderType.TAKE_PROFIT\n );\n\n const slOrder = innerOrder?.child_orders?.find(\n (item) => item.algo_type === AlgoOrderType.STOP_LOSS\n );\n\n return {\n tpOrder,\n slOrder,\n };\n}\n\nexport function calcBracketRoiAndPnL(order: API.AlgoOrderExt) {\n const defaultCallback = {\n pnl: {\n tpPnL: undefined,\n slPnL: undefined,\n },\n roi: {\n tpRoi: undefined,\n slRoi: undefined,\n },\n };\n const { tpOrder, slOrder } = findBracketTPSLOrder(order);\n if (!tpOrder && !slOrder) return defaultCallback;\n\n if (typeof order.price === undefined || !order.price) return defaultCallback;\n\n const quantity =\n order.side === OrderSide.BUY ? order.quantity : order.quantity * -1;\n\n const tpPnL =\n tpOrder?.trigger_price &&\n utils.priceToPnl({\n qty: quantity,\n price: tpOrder?.trigger_price,\n entryPrice: order.price,\n // @ts-ignore\n orderSide: order.side,\n // @ts-ignore\n orderType: tpOrder.algo_type,\n });\n const slPnL =\n slOrder?.trigger_price &&\n utils.priceToPnl({\n qty: quantity,\n // trigger price\n price: slOrder?.trigger_price,\n //\n entryPrice: order.price,\n // @ts-ignore\n orderSide: order.side,\n // @ts-ignore\n orderType: slOrder.algo_type,\n });\n\n const tpRoi = tpPnL\n ? utils.calcTPSL_ROI({\n pnl: tpPnL,\n qty: order.quantity,\n price: order.price,\n })\n : undefined;\n const slRoi = slPnL\n ? utils.calcTPSL_ROI({\n pnl: slPnL,\n qty: order.quantity,\n price: order.price,\n })\n : undefined;\n\n return {\n pnl: {\n tpPnL,\n slPnL,\n },\n roi: {\n tpRoi,\n slRoi,\n },\n };\n}\n\nexport function areDatesEqual(date1?: Date, date2?: Date): boolean {\n if (!date1 || !date2) return false;\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n );\n}","import { FC, PropsWithChildren, useMemo } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { SymbolContext, SymbolContextState } from \"./symbolContext\";\n\ninterface FormatterProviderProps {\n symbol: string;\n}\n\nexport const SymbolProvider: FC<PropsWithChildren<FormatterProviderProps>> = (\n props,\n) => {\n const { symbol, children } = props;\n const symbolInfo = useSymbolsInfo()[symbol];\n const memoizedValue = useMemo<SymbolContextState>(() => {\n return {\n symbol: symbol,\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n base_tick: symbolInfo(\"base_tick\"),\n quote_tick: symbolInfo(\"quote_tick\"),\n base: symbolInfo(\"base\"),\n quote: symbolInfo(\"quote\"),\n origin: symbolInfo(),\n quote_max: symbolInfo(\"quote_max\"),\n quote_min: symbolInfo(\"quote_min\"),\n };\n }, [symbol, symbolInfo]);\n return (\n <SymbolContext.Provider value={memoizedValue}>\n {children}\n </SymbolContext.Provider>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport type { API } from \"@orderly.network/types\";\n\nexport interface SymbolContextState {\n base_dp: number;\n quote_dp: number;\n base_tick: number;\n quote_tick: number;\n base: string;\n quote: string;\n symbol: string;\n origin: API.SymbolExt;\n quote_min: number;\n quote_max: number;\n}\n\nexport const SymbolContext = createContext<SymbolContextState>(\n {} as SymbolContextState,\n);\n\nexport const useSymbolContext = () => {\n return useContext<SymbolContextState>(SymbolContext);\n};\n","import { useMemo } from \"react\";\nimport { format } from \"date-fns\";\nimport { SymbolInfo, utils } from \"@orderly.network/hooks\";\nimport { useTranslation, i18n } from \"@orderly.network/i18n\";\nimport {\n AlgoOrderRootType,\n AlgoOrderType,\n API,\n OrderSide,\n OrderStatus,\n OrderType,\n} from \"@orderly.network/types\";\nimport { cn, Column, Flex, Text } from \"@orderly.network/ui\";\nimport { Badge } from \"@orderly.network/ui\";\nimport { SharePnLConfig, SharePnLDialogId } from \"@orderly.network/ui-share\";\nimport { commifyOptional, Decimal } from \"@orderly.network/utils\";\nimport {\n grayCell,\n parseBadgesFor,\n upperCaseFirstLetter,\n} from \"../../../utils/util\";\nimport { TabType } from \"../../orders.widget\";\nimport { useSymbolContext } from \"../../provider/symbolContext\";\nimport { ShareButtonWidget } from \"../../shareButton\";\nimport { BracketOrderPrice } from \"./bracketOrderPrice\";\nimport { CancelButton } from \"./cancelBtn\";\nimport { Price } from \"./price\";\nimport { OrderQuantity } from \"./quantity\";\nimport { Renew } from \"./renew\";\nimport { TP_SLEditButton } from \"./tpslEdit\";\nimport { TPSLOrderPrice, useTPSLOrderPrice } from \"./tpslPrice\";\nimport { OrderTriggerPrice } from \"./tpslTriggerPrice\";\nimport { TriggerPrice } from \"./triggerPrice\";\n\nexport const useOrderColumn = (props: {\n _type: TabType;\n onSymbolChange?: (symbol: API.Symbol) => void;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n symbolsInfo?: SymbolInfo;\n}) => {\n const { _type, onSymbolChange, pnlNotionalDecimalPrecision, sharePnLConfig } =\n props;\n const { t } = useTranslation();\n\n const columns = useMemo(() => {\n switch (_type) {\n case TabType.all:\n return [\n instrument({\n width: 130,\n showType: true,\n onSymbolChange: onSymbolChange,\n enableSort: false,\n }),\n side({ width: 130 }),\n fillAndQuantity({\n width: 130,\n disableEdit: true,\n className: \"oui-pl-0 oui-pr-0\",\n enableSort: false,\n }),\n price({\n width: 130,\n title: t(\"common.orderPrice\"),\n disableEdit: true,\n enableSort: false,\n }),\n avgOpen({ width: 130, enableSort: false }),\n tpslTriggerPrice({ width: 130, symbolsInfo: props.symbolsInfo }),\n realizedPnL({\n width: 124,\n pnlNotionalDecimalPrecision: pnlNotionalDecimalPrecision,\n sharePnLConfig: sharePnLConfig,\n symbolsInfo: props.symbolsInfo,\n }),\n estTotal({ width: 130, enableSort: false }),\n fee({ width: 130 }),\n status({ width: 130 }),\n reduceOnly({ width: 130 }),\n hidden({ width: 130 }),\n cancelBtn({ width: 130 }),\n orderTime({ width: 160, enableSort: false }),\n ];\n case TabType.pending:\n return [\n instrument({\n width: 172,\n showType: true,\n onSymbolChange: onSymbolChange,\n enableSort: false,\n }),\n // side({ width: 162 }),\n fillAndQuantity({\n width: 162,\n className: \"oui-pr-0\",\n enableSort: false,\n }),\n price({ width: 162, className: \"oui-pr-0\", enableSort: false }),\n triggerPrice({ width: 162, className: \"oui-pr-0\" }),\n bracketOrderPrice({ width: 130 }),\n estTotal({ width: 162, isPending: true }),\n reduceOnly({ width: 162 }),\n hidden({ width: 162 }),\n orderTime({ width: 162, enableSort: false }),\n pendingTabCancelBtn({ width: 162 }),\n ];\n case TabType.tp_sl:\n return [\n instrument({\n width: 176,\n showType: true,\n onSymbolChange: onSymbolChange,\n enableSort: false,\n }),\n // side({ width: 176 }),\n quantity({ width: 176 }),\n tpslTriggerPrice({ width: 176, symbolsInfo: props.symbolsInfo }),\n tpslPrice({ width: 176, disableEdit: true }),\n tpslNotional({ width: 176 }),\n reduceOnly({ width: 176 }),\n orderTime({ width: 176, enableSort: false }),\n tpslAction({ width: 176 }),\n ];\n case TabType.filled:\n return [\n instrument({\n showType: true,\n width: 154,\n onSymbolChange: onSymbolChange,\n }),\n // type({ width: 124 }),\n // side({ width: 124 }),\n fillAndQuantity({\n width: 124,\n disableEdit: true,\n className: \"oui-pl-0 oui-pr-0\",\n }),\n price({\n width: 124,\n title: t(\"common.orderPrice\"),\n disableEdit: true,\n }),\n avgPrice({ width: 124 }),\n triggerPrice({ width: 124, disableEdit: true }),\n realizedPnL({\n width: 124,\n pnlNotionalDecimalPrecision: pnlNotionalDecimalPrecision,\n sharePnLConfig: sharePnLConfig,\n symbolsInfo: props.symbolsInfo,\n hideShare: true,\n }),\n estTotal({ width: 124 }),\n fee({ width: 124 }),\n status({ width: 124 }),\n reduceOnly({ width: 124 }),\n hidden({ width: 124 }),\n orderTime({ width: 176 }),\n ];\n case TabType.cancelled:\n return [\n instrument({\n showType: true,\n width: 154,\n onSymbolChange: onSymbolChange,\n enableSort: false,\n }),\n // side({ width: 124 }),\n fillAndQuantity({\n width: 124,\n disableEdit: true,\n className: \"oui-pl-0 oui-pr-0\",\n enableSort: false,\n }),\n price({ width: 124, disableEdit: true, enableSort: false }),\n avgOpen({ width: 124, enableSort: false }),\n triggerPrice({ width: 124, disableEdit: true }),\n estTotal({ width: 124 }),\n fee({ width: 124 }),\n status({ width: 124 }),\n reduceOnly({ width: 124 }),\n hidden({ width: 124 }),\n ];\n case TabType.rejected:\n return [\n instrument({\n showType: true,\n width: 154,\n onSymbolChange: onSymbolChange,\n }),\n // side({ width: 124 }),\n fillAndQuantity({\n width: 124,\n disableEdit: true,\n className: \"oui-pl-0 oui-pr-0\",\n }),\n price({ width: 124, disableEdit: true }),\n avgOpen({ width: 124 }),\n triggerPrice({ width: 124, disableEdit: true }),\n estTotal({ width: 124 }),\n fee({ width: 124 }),\n status({ width: 124 }),\n reduceOnly({ width: 124 }),\n hidden({ width: 124 }),\n orderTime({ width: 176 }),\n ];\n case TabType.orderHistory:\n return [\n instrument({\n showType: true,\n width: 154,\n onSymbolChange: onSymbolChange,\n }),\n // side({ width: 124 }),\n fillAndQuantity({\n width: 150,\n disableEdit: true,\n className: \"oui-pl-6 oui-pr-0\",\n }),\n price({ width: 124, disableEdit: true }),\n avgOpen({ width: 124 }),\n triggerPrice({ width: 124, disableEdit: true }),\n realizedPnL({\n width: 124,\n pnlNotionalDecimalPrecision: pnlNotionalDecimalPrecision,\n sharePnLConfig: sharePnLConfig,\n symbolsInfo: props.symbolsInfo,\n }),\n estTotal({ width: 124 }),\n fee({ width: 124 }),\n status({ width: 124 }),\n reduceOnly({ width: 124 }),\n hidden({ width: 124 }),\n orderTime({ width: 150 }),\n cancelBtn({ width: 80 }),\n ];\n }\n }, [_type, pnlNotionalDecimalPrecision, sharePnLConfig, t]);\n\n return columns as Column[];\n\n // return columns();\n};\n\nfunction instrument(option?: {\n showType?: boolean;\n enableSort?: boolean;\n width?: number;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.symbol\"),\n dataIndex: \"symbol\",\n fixed: \"left\",\n // className: \"oui-h-[48px]\",\n width: option?.width,\n onSort: option?.enableSort\n ? (r1, r2) => {\n return r1.symbol.localeCompare(r2.symbol);\n // if (sortOrder === \"asc\") {\n // return r1.symbol.localeCompare(r2.symbol);\n // }\n // return r2.symbol.localeCompare(r1.symbol);\n }\n : undefined,\n renderPlantText: (value: string, record) => {\n const badges = parseBadgesFor(record)?.join(\",\");\n const displayBadges = badges?.length ? ` (${badges})` : \"\";\n return `${value.split(\"_\")[1]}-PERP${displayBadges}`;\n },\n render: (value: string, record) => {\n const showGray = grayCell(record);\n\n return (\n <Flex gap={2}>\n <div\n className={cn(\n \"oui-rounded-[1px] oui-w-1 oui-h-7 oui-shrink-0\",\n record.side === OrderSide.BUY\n ? \"oui-bg-trade-profit\"\n : \"oui-bg-trade-loss\",\n )}\n />\n <Flex direction=\"column\" itemAlign={\"start\"}>\n <Text.formatted\n // rule={\"symbol\"}\n size=\"xs\"\n className=\"oui-cursor-pointer oui-text-xs\"\n onClick={(e) => {\n option?.onSymbolChange?.({ symbol: value } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${value.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n\n {option?.showType && (\n <Flex direction={\"row\"} gap={1}>\n {parseBadgesFor(record)?.map((e, index) => (\n <Badge\n key={index}\n color={\n e.toLocaleLowerCase() === \"position\"\n ? showGray\n ? \"neutral\"\n : \"primary\"\n : \"neutral\"\n }\n size=\"xs\"\n className=\"oui-break-normal oui-whitespace-nowrap\"\n >\n {e}\n </Badge>\n ))}\n </Flex>\n )}\n </Flex>\n </Flex>\n );\n },\n };\n}\n\nfunction side(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.side\"),\n dataIndex: \"side\",\n width: option?.width,\n // className: \"oui-h-[48px]\",\n onSort: option?.enableSort\n ? (r1, r2, sortOrder) => {\n return r2.side.localeCompare(r1.side);\n // if (sortOrder === \"asc\") {\n // return r2.side.localeCompare(r1.side);\n // }\n // return r1.side.localeCompare(r2.side);\n }\n : undefined,\n renderPlantText: (value: string, record) => upperCaseFirstLetter(value),\n render: (value: string, record) => {\n const clsName = grayCell(record)\n ? \"oui-text-base-contrast-20\"\n : value === OrderSide.BUY\n ? \"oui-text-trade-profit\"\n : \"oui-text-trade-loss\";\n return (\n <span className={cn(\"oui-font-semibold\", clsName)}>\n {upperCaseFirstLetter(value)}\n </span>\n );\n },\n };\n}\n\nfunction type(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.type\"),\n dataIndex: \"type\",\n width: option?.width,\n className: option?.className,\n formatter: (value: string, record: any) => {\n if (!!record.parent_algo_type) {\n if (record.algo_type === AlgoOrderType.STOP_LOSS) {\n return record.type === OrderType.CLOSE_POSITION\n ? `Position SL`\n : \"SL\";\n }\n\n if (record.algo_type === AlgoOrderType.TAKE_PROFIT) {\n return record.type === OrderType.CLOSE_POSITION\n ? `Position TP`\n : \"TP\";\n }\n }\n\n if (record.algo_order_id) {\n return `Stop ` + `${record.type}`.toLowerCase();\n }\n return upperCaseFirstLetter(value);\n },\n };\n}\n\nfunction fillAndQuantity(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n disableEdit?: boolean;\n}): Column<API.AlgoOrderExt> {\n return {\n title: i18n.t(\"orders.column.fill&Quantity\"),\n dataIndex: \"fill_quantity\",\n className: option?.className,\n width: option?.width,\n onSort:\n (option?.enableSort ?? false)\n ? (a, b) => {\n const aQuantity =\n (a.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? 0\n : a.quantity) ?? 0;\n const bQuantity =\n (b.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? 0\n : b.quantity) ?? 0;\n\n return compareNumbers(aQuantity, bQuantity);\n\n // if (type == \"asc\") {\n // return compareNumbers(aQuantity, bQuantity);\n // }\n // return compareNumbers(bQuantity, aQuantity);\n }\n : undefined,\n\n renderPlantText: (value: string, record: any) => {\n if (\n record.type === OrderType.CLOSE_POSITION &&\n record.status !== OrderStatus.FILLED\n ) {\n return i18n.t(\"tpsl.entirePosition\");\n }\n\n const executed = (record as API.OrderExt).total_executed_quantity;\n const first =\n \"algo_type\" in record && record.algo_type === AlgoOrderRootType.TP_SL\n ? \"\"\n : `${executed} / `;\n return first + `${record.quantity}`;\n },\n render: (value: string, record: any) => {\n if (\n record.type === OrderType.CLOSE_POSITION &&\n record.status !== OrderStatus.FILLED\n ) {\n return i18n.t(\"tpsl.entirePosition\");\n }\n return <OrderQuantity order={record} disableEdit={option?.disableEdit} />;\n // return value;\n },\n };\n}\n\nfunction quantity(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.AlgoOrderExt> {\n return {\n title: i18n.t(\"common.quantity\"),\n className: option?.className,\n dataIndex: \"quantity\",\n width: option?.width,\n onSort:\n (option?.enableSort ?? false)\n ? (a, b) => {\n const aQuantity =\n (a.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? 0\n : a.quantity) ?? 0;\n const bQuantity =\n (b.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? 0\n : b.quantity) ?? 0;\n return compareNumbers(aQuantity, bQuantity);\n // if (type == \"asc\") {\n // return compareNumbers(aQuantity, bQuantity);\n // }\n // return compareNumbers(bQuantity, aQuantity);\n }\n : undefined,\n renderPlantText: (value: string, record: any) => {\n if (record.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n return i18n.t(\"tpsl.entirePosition\");\n }\n\n const executed = (record as API.OrderExt).total_executed_quantity;\n const first =\n \"algo_type\" in record && record.algo_type === AlgoOrderRootType.TP_SL\n ? \"\"\n : `${executed}/`;\n return first + `${record.quantity}`;\n },\n render: (value: string, record: any) => {\n if (record.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n return i18n.t(\"tpsl.entirePosition\");\n }\n return <OrderQuantity order={record} />;\n // return value;\n },\n };\n}\n\nfunction price(option?: {\n title?: string;\n enableSort?: boolean;\n width?: number;\n className?: string;\n disableEdit?: boolean;\n}): Column<API.Order> {\n return {\n title: option?.title ?? i18n.t(\"common.price\"),\n dataIndex: \"price\",\n className: option?.className,\n width: option?.width,\n onSort:\n (option?.enableSort ?? false)\n ? (a, b, type) => {\n return compareNumbers(a.price ?? 0, b.price ?? 0);\n }\n : undefined,\n renderPlantText: (value: string, record: any) => {\n return commifyOptional(record.price?.toString(), {\n fallback: i18n.t(\"common.marketPrice\"),\n });\n },\n render: (value: string, record: any) => {\n return <Price order={record} disableEdit={option?.disableEdit} />;\n },\n };\n}\n\nfunction tpslPrice(option?: {\n title?: string;\n enableSort?: boolean;\n width?: number;\n className?: string;\n disableEdit?: boolean;\n}): Column<API.Order> {\n return {\n title: option?.title ?? i18n.t(\"common.price\"),\n dataIndex: \"price\",\n className: option?.className,\n width: option?.width,\n onSort: option?.enableSort,\n renderPlantText: (value: string, record: any) => {\n const { tpTriggerPrice, slTriggerPrice } = useTPSLOrderPrice(record);\n const callback = `${tpTriggerPrice || \"\"}${\n slTriggerPrice ? `${tpTriggerPrice ? \"\\n\" : \"\"}${slTriggerPrice}` : \"\"\n }`;\n\n return callback.length > 0 ? callback : \"--\";\n },\n render: (value: string, record: any) => {\n return <TPSLOrderPrice />;\n },\n };\n}\n\nfunction avgPrice(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n disableEdit?: boolean;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.avgPrice\"),\n dataIndex: \"average_executed_price\",\n className: option?.className,\n width: option?.width,\n onSort: option?.enableSort,\n render: (value: string, record: any) => commifyOptional(value),\n };\n}\n\nfunction triggerPrice(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n disableEdit?: boolean;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.trigger\"),\n className: option?.className,\n dataIndex: \"trigger_price\",\n width: option?.width,\n onSort: option?.enableSort,\n renderPlantText: (value: string, record: any) => {\n const isAlgoOrder = record?.algo_order_id !== undefined;\n const isBracketOrder = record?.algo_type === \"BRACKET\";\n if (!isAlgoOrder || isBracketOrder) {\n return \"--\";\n }\n return commifyOptional(value);\n },\n render: (value: string, record: any) => (\n <TriggerPrice order={record} disableEdit={option?.disableEdit} />\n ),\n };\n}\n\nfunction tpslTriggerPrice(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n title?: string;\n symbolsInfo?: SymbolInfo;\n}): Column<API.Order> {\n return {\n title: option?.title ?? i18n.t(\"common.trigger\"),\n className: option?.className,\n dataIndex: \"tpsl_trigger_price\",\n width: option?.width,\n onSort: option?.enableSort,\n renderPlantText: (value: string, record: any) => {\n const info = option?.symbolsInfo?.[record.symbol];\n const quote_dp = info?.(\"quote_dp\");\n // @ts-ignore\n const { sl_trigger_price, tp_trigger_price } =\n !(\"algo_type\" in record) || !Array.isArray(record.child_orders)\n ? {}\n : utils.findTPSLFromOrder(record);\n\n const callback =\n (tp_trigger_price != null\n ? `${i18n.t(\"tpsl.tp\")}: ${commifyOptional(tp_trigger_price, {\n fix: quote_dp,\n padEnd: true,\n })}`\n : \"\") +\n (sl_trigger_price != null\n ? `${tp_trigger_price ? \"\\n\" : \"\"}${i18n.t(\n \"tpsl.sl\",\n )}: ${commifyOptional(sl_trigger_price, {\n fix: quote_dp,\n padEnd: true,\n })}`\n : \"\");\n return callback.length > 0 ? callback : \"--\";\n },\n render: (value: string, record: any) => <OrderTriggerPrice />,\n };\n}\n\nfunction bracketOrderPrice(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}) {\n return {\n title: i18n.t(\"common.tpsl\"),\n className: option?.className,\n dataIndex: \"bracketOrderPrice\",\n width: option?.width,\n onSort: option?.enableSort,\n renderPlantText: (value: string, record: any) => {\n const getTPSLTriggerPrice = (): {\n sl_trigger_price?: number;\n tp_trigger_price?: number;\n } => {\n if (!(\"algo_type\" in record) || !Array.isArray(record.child_orders)) {\n return {};\n }\n return utils.findTPSLFromOrder(record.child_orders[0]);\n };\n\n const { sl_trigger_price, tp_trigger_price } = getTPSLTriggerPrice();\n\n const callback =\n (tp_trigger_price != null\n ? `${i18n.t(\"tpsl.tp\")}: ${tp_trigger_price}`\n : \"\") +\n (sl_trigger_price != null\n ? `${tp_trigger_price ? \"\\n\" : \"\"}${i18n.t(\n \"tpsl.sl\",\n )}: ${sl_trigger_price}`\n : \"\");\n return callback.length > 0 ? callback : \"--\";\n },\n render: (value: string, record: any) => (\n <BracketOrderPrice order={record} />\n ),\n };\n}\n\nfunction estTotal(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n isPending?: boolean;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.notional\"),\n dataIndex: \"executed\",\n width: option?.width,\n className: option?.className,\n onSort:\n (option?.enableSort ?? false)\n ? (a, b, type) => {\n const aTotal =\n a.type === OrderType.CLOSE_POSITION &&\n a.status !== OrderStatus.FILLED\n ? 0\n : a.total_executed_quantity === 0 ||\n Number.isNaN(a.average_executed_price) ||\n a.average_executed_price === null\n ? 0\n : a.total_executed_quantity * a.average_executed_price;\n const bTotal =\n b.type === OrderType.CLOSE_POSITION &&\n b.status !== OrderStatus.FILLED\n ? 0\n : b.total_executed_quantity === 0 ||\n Number.isNaN(b.average_executed_price) ||\n b.average_executed_price === null\n ? 0\n : b.total_executed_quantity * b.average_executed_price;\n return compareNumbers(aTotal, bTotal);\n // if (type === \"asc\") {\n // return compareNumbers(aTotal, bTotal);\n // }\n // return compareNumbers(bTotal, aTotal);\n }\n : undefined,\n renderPlantText: (value: string, record: any) => {\n const estTotal = estTotalValue(record, option?.isPending ?? false);\n\n if (estTotal === \"Entire position\") {\n return i18n.t(\"tpsl.entirePosition\");\n }\n\n return commifyOptional(\n estTotalValue(record, option?.isPending ?? false),\n { fix: 2 },\n );\n },\n render: (value: string, record: any) => {\n const estTotal = estTotalValue(record, option?.isPending ?? false);\n\n if (estTotal === \"Entire position\") {\n return i18n.t(\"tpsl.entirePosition\");\n }\n\n return (\n <Text.numeral rm={Decimal.ROUND_DOWN} dp={2}>\n {estTotal}\n </Text.numeral>\n );\n },\n };\n}\n\nfunction realizedPnL(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n symbolsInfo?: SymbolInfo;\n hideShare?: boolean;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.realizedPnl\"),\n dataIndex: \"realized_pnl\",\n width: option?.width,\n className: option?.className,\n renderPlantText: (_value: string, record: any) => {\n const info = option?.symbolsInfo?.[record.symbol];\n const quote_dp = info?.(\"quote_dp\");\n const dp = option?.pnlNotionalDecimalPrecision ?? quote_dp;\n const value = new Decimal(_value ?? 0)\n .toDecimalPlaces(dp, Decimal.ROUND_DOWN)\n .toNumber();\n\n const formatValue = commifyOptional(value);\n\n return value > 0 ? `+${formatValue}` : formatValue;\n },\n render: (_value: number | undefined, record: any) => {\n const { quote_dp } = useSymbolContext();\n const dp = option?.pnlNotionalDecimalPrecision ?? quote_dp;\n const value = new Decimal(_value ?? 0)\n .toDecimalPlaces(dp, Decimal.ROUND_DOWN)\n .toNumber();\n // wraper flex\n return (\n <Flex gap={1}>\n <Text.numeral\n dp={dp}\n rm={Decimal.ROUND_DOWN}\n padding={false}\n intensity={(value ?? 0) == 0 ? 80 : undefined}\n showIdentifier={(value ?? 0) > 0}\n coloring={(value ?? 0) != 0}\n >\n {value ?? \"--\"}\n </Text.numeral>\n {!option?.hideShare && (\n <ShareButtonWidget\n order={record}\n sharePnLConfig={option?.sharePnLConfig}\n modalId={SharePnLDialogId}\n />\n )}\n </Flex>\n );\n },\n };\n}\n\nfunction reduceOnly(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"orderEntry.reduceOnly\"),\n dataIndex: \"reduce_only\",\n width: option?.width,\n className: option?.className,\n renderPlantText: (value: string, record: any) => {\n return value ? i18n.t(\"common.yes\") : i18n.t(\"common.no\");\n },\n render: (value: boolean) => {\n return <Text>{value ? i18n.t(\"common.yes\") : i18n.t(\"common.no\")}</Text>;\n },\n };\n}\n\nfunction hidden(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"orders.column.hidden\"),\n dataIndex: \"visible\",\n width: option?.width,\n className: option?.className,\n renderPlantText: (value: number, record: any) => {\n return value !== 0 ? i18n.t(\"common.no\") : i18n.t(\"common.yes\");\n },\n render: (value: number, record) => {\n return (\n <Text>\n {record.visible_quantity !== 0\n ? i18n.t(\"common.no\")\n : i18n.t(\"common.yes\")}\n </Text>\n );\n },\n };\n}\n\nfunction orderTime(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n formatString?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"orders.column.orderTime\"),\n dataIndex: \"created_time\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\n renderPlantText: (value: string, record: any) => {\n const date = new Date(value);\n const formattedDate = format(date, \"yyyy-MM-dd HH:mm:ss\");\n return formattedDate;\n },\n render: (value: string) => (\n <Text.formatted\n rule={\"date\"}\n formatString={option?.formatString || \"yyyy-MM-dd HH:mm:ss\"}\n className=\"oui-break-normal oui-whitespace-nowrap oui-font-semibold\"\n >\n {value}\n </Text.formatted>\n ),\n };\n}\n\nfunction fee(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.fee\"),\n dataIndex: \"total_fee\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\n };\n}\n\nfunction notional(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.notional\"),\n dataIndex: \"notional\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\n renderPlantText: (value: number, record: any) => {\n return commifyOptional(value, { fix: 2 });\n },\n render: (value?: string) => (\n <Text.numeral className=\"oui-break-normal oui-whitespace-nowrap oui-font-semibold\">\n {value ?? \"--\"}\n </Text.numeral>\n ),\n };\n}\n\nfunction tpslNotional(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.notional\"),\n dataIndex: \"executed\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\n renderPlantText: (value: any, record: any) => {\n if (record.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n return i18n.t(\"tpsl.entirePosition\");\n }\n return commifyOptional(\n record.quantity === 0\n ? \"--\"\n : `${new Decimal(record.mark_price)\n .mul(record.quantity)\n .todp(2)\n .toNumber()}`,\n );\n },\n render: (value: any, record: any) => {\n if (record.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n return i18n.t(\"tpsl.entirePosition\");\n }\n\n return (\n <Text.numeral className=\"oui-break-normal oui-whitespace-nowrap oui-font-semibold\">\n {record.quantity === 0\n ? \"--\"\n : `${new Decimal(record.mark_price)\n .mul(record.quantity)\n .todp(2)\n .toNumber()}`}\n </Text.numeral>\n );\n },\n };\n}\n\nfunction status(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n const statusMap = {\n [OrderStatus.NEW]: i18n.t(\"orders.status.pending\"),\n [OrderStatus.FILLED]: i18n.t(\"orders.status.filled\"),\n [OrderStatus.PARTIAL_FILLED]: i18n.t(\"orders.status.partialFilled\"),\n [OrderStatus.CANCELLED]: i18n.t(\"orders.status.canceled\"),\n [OrderStatus.REJECTED]: i18n.t(\"orders.status.rejected\"),\n [OrderStatus.INCOMPLETE]: i18n.t(\"orders.status.incomplete\"),\n [OrderStatus.COMPLETED]: i18n.t(\"orders.status.completed\"),\n };\n return {\n title: i18n.t(\"common.status\"),\n dataIndex: \"status\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\n renderPlantText: (value: string, record: any) => {\n const status = value || record.algo_status;\n return (\n statusMap[status as keyof typeof statusMap] ||\n upperCaseFirstLetter(status)\n );\n },\n render: (value: string, record: any) => {\n const status = value || record.algo_status;\n return (\n statusMap[status as keyof typeof statusMap] ||\n upperCaseFirstLetter(status)\n );\n },\n };\n}\n\nfunction avgOpen(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: i18n.t(\"common.avgPrice\"),\n dataIndex: \"average_executed_price\",\n width: option?.width,\n onSort:\n (option?.enableSort ?? false)\n ? (a, b) => {\n return compareNumbers(\n a.average_executed_price ?? 0,\n b.average_executed_price ?? 0,\n );\n }\n : undefined,\n className: option?.className,\n render: (value: string, record) => {\n if (record.type === OrderType.MARKET && !value) {\n return \"--\";\n }\n return (\n <Text className=\"oui-break-normal oui-whitespace-nowrap oui-font-semibold\">\n {value}\n </Text>\n );\n },\n renderPlantText: (value: string, record: any) => {\n return commifyOptional(value, { fix: 2 });\n },\n };\n}\n\nfunction cancelBtn(option?: {\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: \"\",\n type: \"action\",\n dataIndex: \"action\",\n width: option?.width,\n className: option?.className,\n align: \"right\",\n fixed: \"right\",\n render: (_: string, record: any) => {\n if (record.status === OrderStatus.CANCELLED) {\n return <Renew record={record} />;\n }\n\n if (\n record.status === OrderStatus.NEW ||\n record.algo_status === OrderStatus.NEW\n ) {\n return <CancelButton order={record} />;\n }\n\n return null;\n },\n };\n}\n\nfunction pendingTabCancelBtn(option?: {\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: \"\",\n type: \"action\",\n dataIndex: \"action\",\n width: option?.width,\n className: option?.className,\n align: \"right\",\n fixed: \"right\",\n render: (_: string, record: any) => {\n return <CancelButton order={record} />;\n },\n };\n}\n\nfunction tpslAction(option?: {\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: \"\",\n type: \"action\",\n dataIndex: \"action\",\n width: option?.width,\n className: option?.className,\n align: \"right\",\n fixed: \"right\",\n render: (_: string, record: any) => {\n return (\n <Flex gap={3}>\n <TP_SLEditButton order={record} />\n <CancelButton order={record} />\n </Flex>\n );\n },\n };\n}\n\nfunction compareNumbers(a: number, b: number): number {\n if (a > b) return 1;\n if (a < b) return -1;\n return 0;\n}\n\n// estTotal\nfunction estTotalValue(record: any, isPending: boolean): string {\n if (isPending) {\n const value = () => {\n if (record.price && record.quantity) {\n return new Decimal(record.price)\n .mul(record.quantity)\n .toFixed(2, Decimal.ROUND_DOWN);\n }\n return \"--\";\n };\n\n return value();\n }\n\n if (\n record.type === OrderType.CLOSE_POSITION &&\n record.status !== OrderStatus.FILLED\n ) {\n return i18n.t(\"tpsl.entirePosition\");\n }\n\n return record.total_executed_quantity === 0 ||\n Number.isNaN(record.average_executed_price) ||\n record.average_executed_price === null\n ? \"--\"\n : `${record.total_executed_quantity * record.average_executed_price}`;\n}\n","import { FC } from \"react\";\nimport { modal, ShareIcon } from \"@orderly.network/ui\";\nimport { ShareButtonState } from \"./shareButton.script\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const ShareButton: FC<ShareButtonState> = (props) => {\n const { t } = useTranslation();\n\n if (props.sharePnLConfig == null) return <></>;\n\n return (\n <button\n type=\"button\"\n onClick={(e: any) => {\n e.stopPropagation();\n modal.show(props.modalId, {\n pnl: {\n entity: {\n symbol: props.order.symbol,\n pnl: props.order.realized_pnl,\n side:\n props.order.side == \"BUY\"\n ? t(\"share.pnl.share.long\")\n : t(\"share.pnl.share.short\"),\n openPrice: props.order.average_executed_price,\n openTime: props.order.updated_time,\n quantity: props.order.quantity,\n },\n refCode: props.refCode,\n leverage: props.leverage,\n ...props.sharePnLConfig,\n },\n });\n }}\n >\n <ShareIcon color=\"white\" opacity={0.54} size={props.iconSize ?? 16} />\n </button>\n );\n};\n","import { useMemo } from \"react\";\nimport { useReferralInfo, useSymbolLeverage } from \"@orderly.network/hooks\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const useShareButtonScript = (props: {\n order: any;\n sharePnLConfig?: SharePnLConfig;\n modalId: string;\n iconSize?: number;\n}) => {\n const { sharePnLConfig, order, modalId, iconSize } = props;\n const { getFirstRefCode } = useReferralInfo();\n const refCode = useMemo(() => {\n return getFirstRefCode()?.code;\n }, [getFirstRefCode]);\n const leverage = useSymbolLeverage(props.order.symbol);\n return {\n iconSize,\n order,\n refCode,\n leverage,\n sharePnLConfig,\n modalId,\n };\n};\n\nexport type ShareButtonState = ReturnType<typeof useShareButtonScript>;\n","import { useShareButtonScript } from \"./shareButton.script\";\nimport { ShareButton } from \"./shareButton.ui\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const ShareButtonWidget = (props: {\n order: any;\n sharePnLConfig?: SharePnLConfig;\n modalId: string;\n iconSize?: number;\n}) => {\n const state = useShareButtonScript(props);\n return <ShareButton {...state} />;\n};\n","import { useMemo } from \"react\";\nimport { utils } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Flex,\n Tooltip,\n Text,\n cn,\n EditIcon,\n useModal,\n modal,\n} from \"@orderly.network/ui\";\nimport { calcBracketRoiAndPnL } from \"../../../utils/util\";\nimport { useSymbolContext } from \"../../provider/symbolContext\";\n\nexport const BracketOrderPrice = (props: { order: API.AlgoOrderExt }) => {\n const { order } = props;\n const { quote_dp, base_dp } = useSymbolContext();\n const { t } = useTranslation();\n\n const { sl_trigger_price, tp_trigger_price } = useMemo(() => {\n if (!(\"algo_type\" in order) || !Array.isArray(order.child_orders)) {\n return {};\n }\n return utils.findTPSLFromOrder(props.order.child_orders[0]);\n }, [props.order]);\n\n const { pnl, roi } = calcBracketRoiAndPnL(order);\n\n if (!tp_trigger_price && !sl_trigger_price) {\n return \"--\";\n }\n\n return (\n <Tooltip\n // @ts-ignore\n content={\n <Flex direction={\"column\"} itemAlign={\"start\"} gap={1}>\n {typeof pnl.tpPnL !== \"undefined\" && (\n <Text.numeral\n // @ts-ignore\n prefix={\n <Text intensity={80}>{`${t(\"tpsl.tpPnl\")}:`} </Text>\n }\n suffix={<Text intensity={20}>{\" USDC\"}</Text>}\n dp={quote_dp}\n color=\"buy\"\n showIdentifier\n >\n {pnl.tpPnL}\n </Text.numeral>\n )}\n {typeof pnl.slPnL !== \"undefined\" && (\n <Text.numeral\n // @ts-ignore\n prefix={\n <Text intensity={80}>{`${t(\"tpsl.slPnl\")}:`} </Text>\n }\n suffix={<Text intensity={20}>{\" USDC\"}</Text>}\n dp={quote_dp}\n color=\"sell\"\n >\n {pnl.slPnL}\n </Text.numeral>\n )}\n </Flex>\n }\n className=\"oui-bg-base-6\"\n >\n <Flex itemAlign={\"center\"} justify={\"start\"} gap={2}>\n <Flex direction={\"column\"} justify={\"start\"} itemAlign={\"start\"}>\n <Price type=\"TP\" value={tp_trigger_price} quote_dp={quote_dp} />\n <Price type=\"SL\" value={sl_trigger_price} quote_dp={quote_dp} />\n </Flex>\n <EditBracketOrder order={order} />\n </Flex>\n </Tooltip>\n );\n};\n\nconst EditBracketOrder = (props: { order: API.AlgoOrderExt }) => {\n const { order } = props;\n\n const onEdit = () => {\n modal.show(\"EditBracketOrderDialogId\", {\n order,\n });\n };\n\n return (\n <EditIcon\n size={16}\n className=\"oui-text-base-contrast oui-cursor-pointer\"\n onClick={() => {\n onEdit();\n }}\n />\n );\n};\n\nconst Price = (props: {\n type: \"TP\" | \"SL\";\n value?: number | string;\n quote_dp: number;\n}) => {\n const { type, value, quote_dp } = props;\n const { t } = useTranslation();\n\n return value ? (\n <Text.numeral\n className={cn(\n \"oui-gap-0 oui-decoration-white/20 oui-border-b oui-border-dashed oui-border-base-contrast-12\",\n type === \"TP\" ? \"oui-text-trade-profit\" : \"oui-text-trade-loss\",\n )}\n key={\"tp\"}\n rule=\"price\"\n dp={quote_dp}\n // @ts-ignore\n prefix={\n <span className={\"oui-text-base-contrast-54\"}>\n {type === \"TP\" ? `${t(\"tpsl.tp\")} -` : `${t(\"tpsl.sl\")} -`}\n \n </span>\n }\n >\n {value}\n </Text.numeral>\n ) : (\n <></>\n );\n};\n","import { FC, useState } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { ThrottledButton, toast } from \"@orderly.network/ui\";\nimport { useOrderListContext } from \"../orderListContext\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const CancelButton: FC<{\n order: API.Order;\n}> = (props) => {\n const { order } = props;\n const { t } = useTranslation();\n\n const { onCancelOrder } = useOrderListContext();\n const [isLoading, setIsLoading] = useState(false);\n\n return (\n <ThrottledButton\n size=\"sm\"\n variant={\"outlined\"}\n color={\"secondary\"}\n onClick={(event) => {\n if (!onCancelOrder) return;\n event.preventDefault();\n event.stopPropagation();\n setIsLoading(true);\n onCancelOrder(order)\n .then(\n (res: any) => res,\n (error: any) => {\n toast.error(error.message);\n }\n )\n .finally(() => {\n setIsLoading(false);\n });\n }}\n loading={isLoading}\n >\n {t(\"common.cancel\")}\n </ThrottledButton>\n );\n};\n","import {\n FC,\n PropsWithChildren,\n createContext,\n useCallback,\n useContext,\n useMemo,\n} from \"react\";\nimport { getMinNotional, useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useMemoizedFn } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, OrderEntity } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\n\nexport interface OrderListContextState {\n onCancelOrder: (order: API.Order | API.AlgoOrder) => Promise<any>;\n onEditOrder: (\n order: API.Order | API.AlgoOrder,\n position?: API.Position,\n ) => Promise<any>;\n editOrder: (id: string, order: OrderEntity) => Promise<any>;\n editAlgoOrder: (id: string, order: OrderEntity) => Promise<any>;\n checkMinNotional: (\n symbol: string,\n price?: string | number,\n qty?: string | number,\n ) => string | undefined;\n}\n\nexport const OrderListContext = createContext<OrderListContextState>(\n {} as OrderListContextState,\n);\n\nexport const useOrderListContext = () => {\n return useContext(OrderListContext);\n};\n\nexport interface OrderListProviderProps {\n cancelOrder: (orderId: number, symbol: string) => Promise<any>;\n editOrder: (orderId: string, order: OrderEntity) => Promise<any>;\n cancelAlgoOrder: (orderId: number, symbol: string) => Promise<any>;\n editAlgoOrder: (orderId: string, order: OrderEntity) => Promise<any>;\n}\n\nexport const OrderListProvider: FC<\n PropsWithChildren<OrderListProviderProps>\n> = (props) => {\n const {\n cancelOrder,\n editOrder,\n cancelAlgoOrder,\n editAlgoOrder,\n // cancelTPSLOrder,\n } = props;\n const { t } = useTranslation();\n const symbolInfo = useSymbolsInfo();\n\n const onCancelOrder = useMemoizedFn(\n async (order: API.Order | API.AlgoOrder) => {\n if (order.algo_order_id !== undefined) {\n if (\n \"root_algo_order_id\" in order &&\n order.root_algo_order_id !== order.algo_order_id\n ) {\n return cancelAlgoOrder(order.root_algo_order_id, order.symbol);\n }\n\n return cancelAlgoOrder(order.algo_order_id, order.symbol).then(\n () => {},\n );\n }\n // @ts-ignore\n return cancelOrder(order.order_id, order.symbol).then(() => {\n // toast.success(\"Order canceled successfully\");\n });\n },\n );\n\n const onEditOrder = useMemoizedFn(\n async (order: API.Order | API.AlgoOrder, position?: API.Position) => {\n const isHidden =\n order.visible_quantity !== undefined\n ? order.visible_quantity === 0\n : (order as any).visible !== undefined\n ? (order as any).visible === 0\n : false;\n const orderEntry = await modal.sheet({\n title: t(\"orders.editOrder\"),\n classNames: {\n content: \"oui-edit-order-sheet-content\",\n },\n content: <>Content</>,\n });\n },\n );\n\n const checkMinNotional = useMemoizedFn(\n (symbol: string, price?: string | number, qty?: string | number) => {\n const { min_notional } = symbolInfo[symbol]();\n const minNotional = getMinNotional({ price, qty, min_notional });\n if (minNotional !== undefined) {\n return t(\"orderEntry.total.error.min\", { value: minNotional });\n }\n },\n );\n\n const memoizedValue = useMemo<OrderListContextState>(() => {\n return {\n onCancelOrder,\n onEditOrder,\n editOrder,\n editAlgoOrder,\n checkMinNotional,\n };\n }, [onCancelOrder, onEditOrder, editOrder, editAlgoOrder, checkMinNotional]);\n\n return (\n <OrderListContext.Provider value={memoizedValue}>\n {props.children}\n </OrderListContext.Provider>\n );\n};\n","import { FC, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useSymbolPriceRange } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { cn, Flex, Popover, toast, Text } from \"@orderly.network/ui\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport { grayCell } from \"../../../utils/util\";\nimport { useSymbolContext } from \"../../provider/symbolContext\";\nimport { useOrderListContext } from \"../orderListContext\";\nimport { ConfirmContent, EditType } from \"./editOrder/confirmContent\";\nimport { InnerInput } from \"./editOrder/innerInput\";\n\nexport const Price = (props: {\n order: API.OrderExt;\n disableEdit?: boolean;\n}) => {\n const { order } = props;\n const { t } = useTranslation();\n\n const [price, setPrice] = useState<string>(() => {\n if (order.type === OrderType.MARKET && !order.price) {\n return \"Market\";\n }\n return order.price?.toString() ?? \"Market\";\n });\n\n const [open, setOpen] = useState(false);\n const [editing, setEditing] = useState(false);\n\n const isAlgoOrder = order?.algo_order_id !== undefined;\n\n const isStopMarket = order?.type === \"MARKET\" && isAlgoOrder;\n\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const { editOrder, editAlgoOrder, checkMinNotional } = useOrderListContext();\n\n const { base, quote_dp } = useSymbolContext();\n const rangeInfo = useSymbolPriceRange(\n order.symbol,\n // @ts-ignore\n order.side,\n isAlgoOrder ? order.trigger_price : undefined,\n );\n const closePopover = () => {\n setOpen(false);\n setEditing(false);\n };\n const cancelPopover = () => {\n setOpen(false);\n setPrice(order.price?.toString() ?? \"Market\");\n setEditing(false);\n };\n\n const hintInfo = useMemo(() => {\n if (!rangeInfo) return \"\";\n if (isStopMarket) return \"\";\n if (!editing) return \"\";\n\n if (Number(price) > rangeInfo.max) {\n return t(\"orders.price.greaterThan\", { max: rangeInfo.max });\n }\n if (Number(price) < rangeInfo.min) {\n return t(\"orders.price.lessThan\", { min: rangeInfo.min });\n }\n return \"\";\n }, [isStopMarket, editing, rangeInfo, price, t]);\n\n const onClick = (event: any) => {\n event?.stopPropagation();\n event?.preventDefault();\n\n if (hintInfo.length > 0) {\n return;\n }\n\n if (price === `${order.price}`) {\n setEditing(false);\n return;\n }\n\n if (order.reduce_only !== true) {\n const notionalText = checkMinNotional(\n order.symbol,\n price,\n order.quantity,\n );\n if (notionalText) {\n toast.error(notionalText);\n setIsSubmitting(false);\n cancelPopover();\n return;\n }\n }\n\n setOpen(true);\n };\n\n const handleKeyDown = (event: any) => {\n if (event.key === \"Enter\") {\n onClick(event);\n }\n };\n\n const onConfirm = () => {\n setIsSubmitting(true);\n\n let order_id = order.order_id;\n let data: any = {\n order_price: price,\n order_quantity: order.quantity,\n symbol: order.symbol,\n order_type: order.type,\n side: order.side,\n // reduce_only: Boolean(order.reduce_only),\n };\n if (typeof order.reduce_only !== \"undefined\") {\n data.reduce_only = order.reduce_only;\n }\n\n if (order.order_tag) {\n data.order_tag = order.order_tag;\n }\n\n if (order.client_order_id) {\n data.client_order_id = order.client_order_id;\n }\n\n if (isAlgoOrder) {\n order_id = order.algo_order_id as number;\n data = {\n ...data,\n order_id,\n price: price,\n algo_order_id: order_id,\n };\n }\n\n if (order?.visible_quantity === 0) {\n data[\"visible_quantity\"] = 0;\n }\n\n // @ts-ignore\n if (order.tag !== undefined) {\n // @ts-ignore\n data[\"order_tag\"] = order.tag;\n }\n\n let future;\n if (order.algo_order_id !== undefined) {\n future = editAlgoOrder(order.algo_order_id.toString(), data);\n } else {\n future = editOrder(order.order_id.toString(), data);\n }\n\n future\n .then(\n (result: any) => {\n closePopover();\n setPrice(price);\n // setTimeout(() => inputRef.current?.blur(), 300);\n },\n (err: any) => {\n toast.error(err.message);\n cancelPopover();\n },\n )\n .finally(() => setIsSubmitting(false));\n };\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n {\n if (!!props.order.price) {\n setPrice(`${props.order.price}`);\n }\n }\n }, [props.order.price]);\n\n const componentRef = useRef<HTMLDivElement | null>(null);\n\n const handleClickOutside = (event: any) => {\n if (\n componentRef.current &&\n !componentRef.current.contains(event.target as Node) &&\n !open\n ) {\n cancelPopover();\n }\n };\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [open, order.price]);\n\n const isAlgoMarketOrder = order.algo_order_id && order.type == \"MARKET\";\n\n if (isAlgoMarketOrder || price === \"Market\") {\n return <span>{t(\"common.marketPrice\")}</span>;\n }\n\n const trigger = () => {\n if (!editing || props.disableEdit) {\n return (\n <NormalState\n order={order}\n price={price}\n setEditing={setEditing}\n disableEdit={props.disableEdit}\n />\n );\n }\n\n return (\n <InnerInput\n inputRef={inputRef}\n dp={quote_dp}\n value={price}\n setValue={setPrice}\n setEditing={setEditing}\n handleKeyDown={handleKeyDown}\n onClick={onClick}\n onClose={cancelPopover}\n hintInfo={hintInfo}\n />\n );\n };\n\n return (\n <Popover\n open={open}\n onOpenChange={setOpen}\n content={\n <ConfirmContent\n type={EditType.price}\n base={base}\n value={price}\n cancelPopover={cancelPopover}\n isSubmitting={isSubmitting}\n onConfirm={onConfirm}\n />\n }\n >\n <div\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n ref={componentRef}\n >\n {trigger()}\n </div>\n </Popover>\n );\n};\n\nconst NormalState: FC<{\n order: any;\n price: string;\n setEditing: any;\n disableEdit?: boolean;\n}> = (props) => {\n const { order, price } = props;\n\n return (\n <div\n className={cn(\n \"oui-flex oui-max-w-[110px] oui-justify-start oui-items-center oui-gap-1 oui-relative oui-font-semibold\",\n grayCell(order) && \"oui-text-base-contrast-20\",\n )}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.setEditing(true);\n }}\n >\n <Flex\n r=\"base\"\n className={cn(\n \"oui-min-w-[70px] oui-h-[28px]\",\n !props.disableEdit &&\n \"oui-bg-base-7 oui-px-2 oui-border oui-border-line-12\",\n )}\n >\n <Text size=\"2xs\">{commifyOptional(price)}</Text>\n </Flex>\n </div>\n );\n};\n","import { FC } from \"react\";\nimport { Button, CloseIcon, ThrottledButton } from \"@orderly.network/ui\";\nimport { commify } from \"@orderly.network/utils\";\nimport { useTranslation, Trans } from \"@orderly.network/i18n\";\n\nexport enum EditType {\n quantity,\n price,\n triggerPrice,\n}\n\nexport const ConfirmContent: FC<{\n type: EditType;\n base: string;\n value: string;\n cancelPopover: () => void;\n isSubmitting: boolean;\n onConfirm: (e: any) => void;\n}> = (props) => {\n const { type, base, value, cancelPopover, isSubmitting, onConfirm } = props;\n const { t } = useTranslation();\n\n const renderLabel = () => {\n const common = {\n values: { base, value: commify(value) },\n components: [<span className=\"oui-text-warning-darken\" />],\n };\n\n switch (type) {\n case EditType.quantity:\n return (\n // @ts-ignore\n <Trans i18nKey=\"order.edit.confirm.quantity\" {...common} />\n );\n case EditType.price:\n return (\n // @ts-ignore\n <Trans i18nKey=\"order.edit.confirm.price\" {...common} />\n );\n case EditType.triggerPrice:\n return (\n // @ts-ignore\n <Trans i18nKey=\"order.edit.confirm.triggerPrice\" {...common} />\n );\n }\n };\n\n return (\n <div className=\"oui-pt-5 oui-relative\">\n <div className=\"oui-text-base-contrast-54 oui-text-2xs desktop:oui-text-sm\">\n {renderLabel()}\n </div>\n <div className=\"oui-grid oui-grid-cols-2 oui-gap-2 oui-mt-5\">\n <Button\n color=\"secondary\"\n size={\"md\"}\n onClick={cancelPopover}\n disabled={isSubmitting}\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton size={\"md\"} loading={isSubmitting} onClick={onConfirm}>\n {t(\"common.confirm\")}\n </ThrottledButton>\n </div>\n <button\n className=\"oui-absolute oui-right-0 oui-top-0 oui-text-base-contrast-54\"\n onClick={cancelPopover}\n >\n <CloseIcon size={16} color=\"white\" opacity={1} />\n </button>\n </div>\n );\n};\n","import { CheckIcon, Input, inputFormatter, Tooltip } from \"@orderly.network/ui\";\nimport { FC, useEffect } from \"react\";\n\nexport const InnerInput: FC<{\n inputRef: any;\n value: string;\n setValue: any;\n setEditing: any;\n error?: string;\n handleKeyDown: (e: any) => void;\n onClick: (e: any) => void;\n onClose: (e: any) => void;\n onFocus?: (e: any) => void;\n onBlur?: (e: any) => void;\n dp: number;\n hintInfo?: string;\n}> = (props) => {\n const {\n inputRef,\n dp,\n value,\n setValue,\n setEditing,\n error,\n handleKeyDown,\n onClick,\n onClose,\n onFocus,\n onBlur,\n hintInfo,\n } = props;\n\n useEffect(() => {\n const input = inputRef.current;\n if (input) {\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }\n setEditing(true);\n }, []);\n const open = (hintInfo?.length || 0) > 0;\n return (\n <Tooltip content={hintInfo} open={open}>\n <Input\n ref={inputRef}\n type=\"text\"\n size=\"sm\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(dp),\n inputFormatter.currencyFormatter,\n ]}\n value={value}\n onValueChange={(e) => setValue(e)}\n helpText={error}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n autoComplete=\"off\"\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyDown={handleKeyDown}\n autoFocus\n color={open ? \"danger\" : undefined}\n classNames={{\n root: \"oui-bg-base-700 oui-px-2 oui-py-1 oui-rounded\",\n input: \"oui-pr-2\",\n }}\n // prefix={\n // <CloseIcon\n // size={14}\n // color=\"white\"\n // opacity={1}\n // className=\"oui-cursor-pointer oui-opacity-50 hover:oui-opacity-100\"\n // onClick={(e) => {\n // e.stopPropagation();\n // e.preventDefault();\n // onClose(e);\n // }}\n // />\n // }\n suffix={\n <button onClick={onClick}>\n <CheckIcon\n size={18}\n color=\"white\"\n opacity={1}\n className=\"oui-cursor-pointer oui-opacity-50 hover:oui-opacity-100\"\n />\n </button>\n }\n />\n </Tooltip>\n );\n};\n","import { FC, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useMaxQty, utils } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, OrderSide } from \"@orderly.network/types\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport {\n cn,\n Flex,\n Popover,\n toast,\n Text,\n Slider,\n Button,\n PopoverTrigger,\n PopoverRoot,\n PopoverContent,\n} from \"@orderly.network/ui\";\nimport { commifyOptional, Decimal } from \"@orderly.network/utils\";\nimport { grayCell } from \"../../../utils/util\";\nimport { useSymbolContext } from \"../../provider/symbolContext\";\nimport { useOrderListContext } from \"../orderListContext\";\nimport { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\nimport { ConfirmContent, EditType } from \"./editOrder/confirmContent\";\nimport { InnerInput } from \"./editOrder/innerInput\";\n\nexport const OrderQuantity = (props: {\n order: API.OrderExt | API.AlgoOrder;\n disableEdit?: boolean;\n otherOrderQuantity?: (order: any) => number | undefined;\n}) => {\n const { order, otherOrderQuantity } = props;\n const { reduce_only } = order;\n const [quantity, originSetQuantity] = useState<string>(\n order.quantity.toString(),\n );\n\n const [editing, setEditing] = useState(false);\n\n const { t } = useTranslation();\n\n useEffect(() => {\n setQuantity(order.quantity.toString());\n }, [props.order.quantity]);\n\n const [open, setOpen] = useState(false);\n const [error, setError] = useState<string>();\n\n const { editOrder, editAlgoOrder, checkMinNotional } = useOrderListContext();\n const { onUpdateOrder: onUpdateTPSLOrder, position } =\n useTPSLOrderRowContext();\n\n const { base_dp, base, base_tick } = useSymbolContext();\n\n const setQuantity = async (qty: string, maxQty?: number): Promise<void> => {\n originSetQuantity(qty);\n const positionQty = Math.abs(position?.position_qty || 0);\n\n if (position && reduce_only && Number(qty) > positionQty) {\n setError(\n t(\"orders.quantity.lessThanPosition\", {\n quantity: positionQty,\n }),\n );\n } else {\n const quantity = Number(qty);\n if (maxQty && quantity > maxQty) {\n setError(\n t(\"orders.quantity.lessThan\", {\n quantity: commifyOptional(maxQty, {\n fix: base_dp,\n }),\n }),\n );\n } else {\n setError(undefined);\n }\n }\n return Promise.resolve();\n };\n\n const closePopover = () => {\n setOpen(false);\n setEditing(false);\n };\n const cancelPopover = () => {\n setOpen(false);\n setQuantity(order.quantity.toString());\n setEditing(false);\n };\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const clickHandler = () => {\n // console.log(\n // \"xxxxx click handler\",\n // checkMinNotional,\n // quantity,\n // error,\n // quantity\n // );\n\n if (!!error) {\n return;\n }\n\n if (Number(quantity) === Number(order.quantity)) {\n setEditing(false);\n return;\n }\n\n const price =\n order.algo_order_id !== undefined ? order.trigger_price : order.price;\n if (price !== null && order.reduce_only !== true) {\n const notionalText = checkMinNotional(order.symbol, price, quantity);\n if (notionalText) {\n toast.error(notionalText);\n setIsSubmitting(false);\n cancelPopover();\n return;\n }\n }\n\n setOpen(true);\n };\n\n const onClick = (event: any) => {\n event?.stopPropagation();\n event?.preventDefault();\n\n clickHandler();\n };\n\n const handleKeyDown = (event: any) => {\n if (event.key === \"Enter\") {\n event?.stopPropagation();\n event?.preventDefault();\n clickHandler();\n }\n };\n\n const onConfirm = useCallback(() => {\n setIsSubmitting(true);\n\n let params: any = {\n symbol: order.symbol,\n order_type: order.type,\n side: order.side,\n order_price: order.price,\n order_quantity: quantity,\n // reduce_only: Boolean(order.reduce_only),\n algo_order_id: order.algo_order_id,\n };\n\n if (\n typeof params.algo_order_id !== \"undefined\" &&\n params.order_type === \"MARKET\"\n ) {\n // stop market order\n const { order_price, ...rest } = params;\n params = rest;\n }\n\n if (typeof order.reduce_only !== \"undefined\") {\n params.reduce_only = order.reduce_only;\n }\n\n if (order.order_tag) {\n params.order_tag = order.order_tag;\n }\n\n if (order.client_order_id) {\n params.client_order_id = order.client_order_id;\n }\n\n if (order?.visible_quantity === 0) {\n params[\"visible_quantity\"] = 0;\n }\n\n // @ts-ignore\n if (order?.tag !== undefined) {\n // @ts-ignore\n params[\"order_tag\"] = order.tag;\n }\n\n let future;\n\n if (\"algo_type\" in order && order.algo_type === AlgoOrderRootType.TP_SL) {\n future = onUpdateTPSLOrder(order as API.AlgoOrderExt, params);\n } else {\n if (order.algo_order_id !== undefined) {\n future = editAlgoOrder(order.algo_order_id.toString(), params);\n } else {\n future = editOrder((order as API.OrderExt).order_id.toString(), params);\n }\n }\n\n future\n .then(\n (result: any) => {\n closePopover();\n setQuantity(quantity.toString());\n // setTimeout(() => inputRef.current?.blur(), 300);\n },\n (err: any) => {\n toast.error(err.message);\n setQuantity(order.quantity.toString());\n cancelPopover();\n },\n )\n .finally(() => setIsSubmitting(false));\n }, [quantity]);\n\n const componentRef = useRef<HTMLDivElement | null>(null);\n const quantitySliderRef = useRef<HTMLDivElement | null>(null);\n\n const handleClickOutside = (event: any) => {\n if (\n componentRef.current &&\n quantitySliderRef.current &&\n !componentRef.current.contains(event.target as Node) &&\n !quantitySliderRef.current.contains(event.target as Node) &&\n !open\n ) {\n cancelPopover();\n }\n };\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [open, order.quantity]);\n\n const trigger = () => {\n if (!editing || props.disableEdit) {\n return (\n <NormalState\n order={order}\n quantity={quantity}\n setEditing={setEditing}\n disableEdit={props.disableEdit}\n />\n );\n }\n\n return (\n <EditState\n inputRef={inputRef}\n quantitySliderRef={quantitySliderRef}\n base_dp={base_dp}\n base_tick={base_tick}\n quantity={quantity}\n setQuantity={setQuantity}\n editing={editing}\n setEditing={setEditing}\n handleKeyDown={handleKeyDown}\n onClick={onClick}\n onClose={cancelPopover}\n symbol={order.symbol}\n reduce_only={reduce_only}\n positionQty={position?.position_qty}\n error={error}\n confirmOpen={open}\n side={order.side}\n order={order}\n setError={setError}\n />\n );\n\n // return (\n // <InnerInput\n // inputRef={inputRef}\n // dp={base_dp}\n // value={quantity}\n // setValue={setQuantity}\n // setEditing={setEditing}\n // handleKeyDown={handleKeyDown}\n // onClick={onClick}\n // onClose={cancelPopover}\n // hintInfo={error} />\n // );\n };\n\n return (\n <Popover\n open={open}\n onOpenChange={setOpen}\n content={\n <ConfirmContent\n type={EditType.quantity}\n base={base}\n value={quantity}\n cancelPopover={cancelPopover}\n isSubmitting={isSubmitting}\n onConfirm={onConfirm}\n />\n }\n contentProps={{\n onOpenAutoFocus: (e) => {\n // e.preventDefault();\n // e.stopPropagation();\n },\n }}\n >\n <div\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n ref={componentRef}\n >\n {trigger()}\n </div>\n </Popover>\n );\n};\n\nconst NormalState: FC<{\n order: API.AlgoOrder | API.OrderExt;\n quantity: string;\n setEditing: any;\n partial?: boolean;\n disableEdit?: boolean;\n}> = (props) => {\n const { order, quantity } = props;\n\n const executed = (order as API.OrderExt).total_executed_quantity;\n\n return (\n <Flex\n direction=\"row\"\n justify={\"start\"}\n gap={1}\n className={cn(\n \"oui-max-w-[110px] oui-relative\",\n\n order.side === OrderSide.BUY && \"oui-text-trade-profit\",\n order.side === OrderSide.SELL && \"oui-text-trade-loss\",\n grayCell(order) && \"oui-text-base-contrast-20\",\n )}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.setEditing(true);\n }}\n >\n {\"algo_type\" in order &&\n order.algo_type === AlgoOrderRootType.TP_SL ? null : (\n <>\n <span>{executed}</span>\n <span>/</span>\n </>\n )}\n\n <Flex\n r=\"base\"\n className={cn(\n \"oui-min-w-[70px] oui-h-[28px]\",\n\n !props.disableEdit &&\n \"oui-bg-base-7 oui-px-2 oui-border oui-border-line-12\",\n )}\n >\n <Text size=\"2xs\">{quantity}</Text>\n </Flex>\n </Flex>\n );\n};\n\nconst EditState: FC<{\n inputRef: any;\n quantitySliderRef: any;\n base_dp: number;\n base_tick: number;\n quantity: string;\n setQuantity: (quantity: string, maxQty: number) => Promise<void>;\n editing: boolean;\n confirmOpen: boolean;\n setEditing: (value: boolean) => void;\n handleKeyDown: (e: any) => void;\n onClick: (e: any) => void;\n onClose: () => void;\n error?: string;\n symbol: string;\n reduce_only: boolean;\n positionQty?: number;\n side?: string;\n order: any;\n setError: (err: string) => void;\n}> = (props) => {\n const {\n inputRef,\n quantitySliderRef,\n base_dp,\n base_tick,\n quantity,\n setQuantity,\n editing,\n setEditing,\n handleKeyDown,\n onClick,\n onClose,\n error,\n symbol,\n reduce_only,\n positionQty,\n confirmOpen,\n side,\n order,\n } = props;\n\n // const { maxQty } = useOrderEntry(symbol, {\n // initialOrder: {\n // side,\n // },\n // });\n\n const maxQty = useMaxQty(symbol, order.side, order.reduce_only);\n\n const qty = useMemo(() => {\n if (reduce_only) {\n return Math.abs(positionQty ?? 0);\n }\n return order.quantity + Math.abs(maxQty);\n }, [order.quantity, maxQty, reduce_only, positionQty]);\n\n const [sliderValue, setSliderValue] = useState<number | undefined>(undefined);\n\n useEffect(() => {\n if (sliderValue === undefined) {\n const sliderValue = new Decimal(quantity)\n .div(qty)\n .abs()\n .mul(100)\n .toNumber();\n setSliderValue(sliderValue);\n }\n }, [sliderValue, qty, quantity]);\n\n const formatQuantity = async (_qty: string | number): Promise<void> => {\n if (base_tick > 0) {\n _qty = utils.formatNumber(_qty, base_tick) ?? _qty;\n }\n return setQuantity(`${_qty}`, qty);\n };\n\n return (\n <PopoverRoot open={!confirmOpen}>\n <PopoverTrigger>\n <InnerInput\n inputRef={inputRef}\n dp={base_dp}\n value={quantity}\n setValue={(e: string) => {\n const quantity = Math.abs(Math.min(Number(e), qty)).toString();\n setQuantity(e, qty);\n if (e.endsWith(\".\")) return;\n if (Number(quantity) === 0) {\n setSliderValue(0);\n return;\n }\n const sliderValue = new Decimal(e)\n .div(qty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n setSliderValue(Math.min(100, sliderValue));\n }}\n setEditing={setEditing}\n handleKeyDown={handleKeyDown}\n onClick={onClick}\n onClose={onClose}\n onBlur={(e) => {\n formatQuantity(e.target.value);\n }}\n hintInfo={error}\n />\n </PopoverTrigger>\n <PopoverContent\n className=\"oui-w-[360px] oui-rounded-xl\"\n align=\"start\"\n side=\"bottom\"\n onOpenAutoFocus={(event) => {\n // event.stopPropagation();\n event.preventDefault();\n }}\n >\n <Flex\n p={1}\n gap={2}\n width={\"100%\"}\n itemAlign={\"start\"}\n ref={quantitySliderRef}\n >\n <Text.numeral\n size=\"xs\"\n intensity={98}\n className=\"oui-min-w-[30px] \"\n dp={2}\n padding={false}\n unit=\"%\"\n rm={Decimal.ROUND_DOWN}\n >\n {`${sliderValue}`}\n </Text.numeral>\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n className=\"oui-mt-[6px]\"\n >\n <Slider\n markCount={4}\n value={[sliderValue ?? 0]}\n onValueChange={(e) => {\n const values = Array.from(e.values());\n setSliderValue(values[0]);\n const quantity = new Decimal(values[0])\n .div(100)\n .mul(qty)\n .abs()\n .toFixed(base_dp, Decimal.ROUND_DOWN);\n setQuantity(quantity, qty);\n }}\n onValueCommit={(values) => {\n const quantity = new Decimal(values[0])\n .div(100)\n .mul(qty)\n .abs()\n .toFixed(base_dp, Decimal.ROUND_DOWN);\n formatQuantity(quantity).finally(() => {\n inputRef.current.focus();\n });\n }}\n />\n <Buttons\n onClick={(value) => {\n setSliderValue(value * 100);\n let quantity = new Decimal(value)\n .mul(qty)\n .abs()\n .toFixed(base_dp, Decimal.ROUND_DOWN);\n quantity = utils.formatNumber(quantity, base_tick) ?? quantity;\n\n setQuantity(quantity, qty);\n setTimeout(() => {\n inputRef.current.focus();\n inputRef.current.setSelectionRange(\n quantity.length,\n quantity.length,\n );\n }, 100);\n }}\n />\n </Flex>\n </Flex>\n </PopoverContent>\n </PopoverRoot>\n );\n\n // return (\n // <Popover\n // open={editing}\n // onOpenChange={setSliderOpen}\n // content={\n // <Flex p={1} gap={2} width={\"100%\"} itemAlign={\"start\"}>\n // <Text size=\"xs\" intensity={98} className=\"oui-min-w-[30px]\">\n // {`${sliderValue}%`}\n // </Text>\n // <Flex direction={\"column\"} width={\"100%\"} gap={2}>\n // <Slider\n // markCount={4}\n // value={[sliderValue]}\n // onValueChange={(e) => {\n // const values = Array.from(e.values());\n // setSliderValue(values[0]);\n // // resetQuantity(values[0]);\n // }}\n // />\n // <Buttons\n // onClick={(value) => {\n // setSliderValue(value * 100);\n // // resetQuantity(value * 100);\n // }}\n // />\n // </Flex>\n // </Flex>\n // }\n // >\n // <InnerInput\n // inputRef={inputRef}\n // dp={base_dp}\n // value={quantity}\n // setValue={setQuantity}\n // setEditing={setEditing}\n // handleKeyDown={handleKeyDown}\n // onClick={onClick}\n // onClose={onClose}\n // hintInfo={error}\n // onFocus={(e) => {\n // setSliderOpen(true);\n // }}\n // onBlur={(e) => {\n // setSliderOpen(false);\n // }}\n // />\n // </Popover>\n // );\n};\n\nconst Buttons = (props: { onClick: (value: number) => void }) => {\n const { t } = useTranslation();\n const list = [\n {\n label: \"0%\",\n value: 0,\n },\n {\n label: \"25%\",\n value: 0.25,\n },\n {\n label: \"50%\",\n value: 0.5,\n },\n {\n label: \"75%\",\n value: 0.75,\n },\n {\n label: t(\"common.max\"),\n value: 1,\n },\n ];\n\n return (\n <Flex gap={2} width={\"100%\"}>\n {list.map((item, index) => {\n return (\n <Button\n key={index}\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.onClick(item.value);\n }}\n className=\"oui-w-1/5\"\n >\n {item.label}\n </Button>\n );\n })}\n </Flex>\n );\n};\n","import {\n createContext,\n FC,\n PropsWithChildren,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport {\n unstable_serialize,\n useAccount,\n useMemoizedFn,\n useMutation,\n useSWRConfig,\n utils,\n} from \"@orderly.network/hooks\";\nimport {\n findTPSLOrderPriceFromOrder,\n findTPSLFromOrder,\n} from \"@orderly.network/hooks\";\nimport { API, OrderType } from \"@orderly.network/types\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport { useSymbolContext } from \"../provider/symbolContext\";\n\nexport type TPSLOrderRowContextState = {\n order: API.AlgoOrderExt;\n tp_trigger_price?: number;\n sl_trigger_price?: number;\n sl_order_price?: number | OrderType;\n tp_order_price?: number | OrderType;\n tpPnL?: number;\n slPnL?: number;\n\n onCancelOrder: (order: API.AlgoOrderExt) => Promise<void>;\n onUpdateOrder: (order: API.AlgoOrderExt, params: any) => Promise<void>;\n\n getRelatedPosition: (symbol: string) => API.PositionTPSLExt | undefined;\n\n position?: API.PositionTPSLExt;\n};\n\nexport const TPSLOrderRowContext = createContext<TPSLOrderRowContextState>(\n {} as TPSLOrderRowContextState,\n);\n\nexport const useTPSLOrderRowContext = () => {\n return useContext(TPSLOrderRowContext);\n};\n\nexport const TPSLOrderRowProvider: FC<\n PropsWithChildren<{ order: API.AlgoOrderExt }>\n> = (props) => {\n const { order, children } = props;\n const { quote_dp } = useSymbolContext();\n const [position, setPosition] = useState<API.PositionTPSLExt>();\n\n const [doDeleteOrder] = useMutation(\"/v1/algo/order\", \"DELETE\");\n const [doUpdateOrder] = useMutation(\"/v1/algo/order\", \"PUT\");\n\n const config = useSWRConfig();\n const { state } = useAccount();\n\n const positionKey = useMemo(() => {\n return unstable_serialize(() => [\"/v1/positions\", state.accountId]);\n }, [state.accountId]);\n\n const onCancelOrder = useMemoizedFn(async (order: API.AlgoOrderExt) => {\n return doDeleteOrder(null, {\n order_id: order.algo_order_id,\n symbol: order.symbol,\n });\n });\n\n const onUpdateOrder = useMemoizedFn(\n async (order: API.AlgoOrderExt, params: any) => {\n return doUpdateOrder({\n order_id: order.algo_order_id,\n child_orders: order.child_orders.map((order) => ({\n order_id: order.algo_order_id,\n quantity: params.order_quantity,\n })),\n });\n },\n );\n\n const getRelatedPosition = useMemoizedFn(\n (symbol: string): API.PositionTPSLExt => {\n const positions = config.cache.get(positionKey);\n return positions?.data.rows.find(\n (p: API.PositionTPSLExt) => p.symbol === symbol,\n );\n },\n );\n\n const {\n sl_trigger_price,\n tp_trigger_price,\n tpPnL,\n slPnL,\n sl_order_price,\n tp_order_price,\n } = calcTPSLPnL({\n order: order,\n position,\n quote_dp,\n });\n\n useEffect(() => {\n if (\"algo_type\" in order || ((order as any)?.reduce_only ?? false)) {\n const position = getRelatedPosition(order.symbol);\n if (position) {\n setPosition(position);\n }\n }\n }, [order.symbol]);\n\n const memoizedValue = useMemo<TPSLOrderRowContextState>(() => {\n return {\n order: order,\n sl_trigger_price,\n tp_trigger_price,\n sl_order_price,\n tp_order_price,\n tpPnL,\n slPnL,\n position,\n onCancelOrder,\n onUpdateOrder,\n getRelatedPosition,\n };\n }, [\n order,\n sl_trigger_price,\n tp_trigger_price,\n sl_order_price,\n tp_order_price,\n tpPnL,\n slPnL,\n position,\n onCancelOrder,\n onUpdateOrder,\n getRelatedPosition,\n ]);\n\n return (\n <TPSLOrderRowContext.Provider value={memoizedValue}>\n {children}\n </TPSLOrderRowContext.Provider>\n );\n};\n\nfunction calcTPSLPnL(props: {\n order: API.AlgoOrderExt;\n position?: API.PositionTPSLExt;\n quote_dp: number;\n}) {\n const { order, position, quote_dp } = props;\n\n if (!position)\n return {\n sl_trigger_price: undefined,\n tp_trigger_price: undefined,\n slPnL: undefined,\n tpPnL: undefined,\n };\n\n const isTPSLOrder = \"algo_type\" in order && Array.isArray(order.child_orders);\n\n const { sl_trigger_price, tp_trigger_price } = isTPSLOrder\n ? findTPSLFromOrder(order)\n : {\n sl_trigger_price: undefined,\n tp_trigger_price: undefined,\n };\n const { sl_order_price, tp_order_price } = isTPSLOrder\n ? findTPSLOrderPriceFromOrder(order)\n : {\n sl_order_price: undefined,\n tp_order_price: undefined,\n };\n\n let quantity = order.quantity;\n\n if (quantity === 0) {\n if (order.child_orders?.[0].type === \"CLOSE_POSITION\") {\n quantity = position.position_qty;\n }\n }\n\n const avgOpenPrice = position.average_open_price;\n const tpPnL =\n typeof quantity === \"number\" &&\n typeof tp_trigger_price === \"number\" &&\n typeof avgOpenPrice === \"number\"\n ? utils.priceToPnl(\n {\n qty: quantity,\n price: tp_trigger_price,\n entryPrice: position.average_open_price,\n orderSide: order.side as OrderSide,\n orderType: AlgoOrderType.TAKE_PROFIT,\n },\n { symbol: { quote_dp } },\n )\n : undefined;\n\n const slPnL =\n typeof quantity === \"number\" &&\n typeof sl_trigger_price === \"number\" &&\n typeof avgOpenPrice === \"number\"\n ? utils.priceToPnl(\n {\n qty: quantity,\n price: sl_trigger_price,\n entryPrice: position.average_open_price,\n orderSide: order.side as OrderSide,\n orderType: AlgoOrderType.STOP_LOSS,\n },\n { symbol: { quote_dp } },\n )\n : undefined;\n\n return {\n sl_trigger_price,\n tp_trigger_price,\n sl_order_price,\n tp_order_price,\n slPnL,\n tpPnL,\n };\n}\n","import { FC, useCallback, useState } from \"react\";\nimport { useConfig, useMutation } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { OrderEntity } from \"@orderly.network/types\";\nimport { Button } from \"@orderly.network/ui\";\n\nexport const Renew: FC<{ record: any }> = (props) => {\n const { record } = props;\n const [open, setOpen] = useState(false);\n const [doCreateOrder, { data, error, reset, isMutating }] = useMutation<\n OrderEntity,\n any\n >(\"/v1/order\");\n\n const { t } = useTranslation();\n\n const brokerId = useConfig(\"brokerId\");\n const onSubmit = useCallback(() => {\n setOpen(false);\n const data: OrderEntity = {\n symbol: record.symbol,\n order_type: record.type,\n order_price: record.price,\n order_quantity: record.quantity,\n order_amount: record.amount,\n side: record.side,\n broker_id: brokerId,\n };\n\n if (Number(record.visible_quantity) < Number(record.quantity)) {\n data.visible_quantity = 0;\n }\n\n if (typeof record.reduce_only !== \"undefined\") {\n data.reduce_only = record.reduce_only;\n }\n\n if (record.order_tag) {\n data.order_tag = record.order_tag;\n }\n\n if (record.client_order_id) {\n data.client_order_id = record.client_order_id;\n }\n\n doCreateOrder(data);\n }, []);\n\n return (\n <Button\n size={\"sm\"}\n variant={\"outlined\"}\n color={\"secondary\"}\n loading={isMutating}\n disabled={isMutating}\n onClick={(event) => {\n if (isMutating) return;\n event.preventDefault();\n event.stopPropagation();\n onSubmit();\n }}\n >\n {t(\"orders.history.renew\")}\n </Button>\n );\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { PositionTPSLPopover } from \"@orderly.network/ui-tpsl\";\nimport { useSymbolContext } from \"../../provider/symbolContext\";\nimport { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\n\nexport const TP_SLEditButton = (props: { order: API.Order }) => {\n const { position, order } = useTPSLOrderRowContext();\n const { quote_dp, base_dp } = useSymbolContext();\n const { t } = useTranslation();\n\n return (\n <PositionTPSLPopover\n quoteDP={quote_dp}\n baseDP={base_dp}\n position={position!}\n order={order}\n label={t(\"common.edit\")}\n isEditing\n />\n );\n};\n","import {\n findTPSLOrderPriceFromOrder,\n findTPSLFromOrder,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { i18n, useTranslation } from \"@orderly.network/i18n\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { Text } from \"@orderly.network/ui\";\nimport { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\n\nexport const TPSLOrderPrice = () => {\n const {\n sl_trigger_price,\n tp_trigger_price,\n sl_order_price,\n tp_order_price,\n order,\n } = useTPSLOrderRowContext();\n const { t } = useTranslation();\n const symbolInfo = useSymbolsInfo()[order.symbol]();\n return (\n <div>\n {!!tp_trigger_price ? (\n <div className={\"oui-text-base-contrast-80 oui-td-bg-transparent\"}>\n <Text intensity={54}>{`${t(\"tpsl.tp\")} -`} </Text>\n <TPSLOrderPriceItem\n price={tp_order_price}\n quoteDP={symbolInfo.quote_dp}\n />\n </div>\n ) : null}\n {!!sl_trigger_price ? (\n <div className={\"oui-text-base-contrast-80 oui-td-bg-transparent\"}>\n <span className={\"oui-text-base-contrast-54\"}>\n {`${t(\"tpsl.sl\")} -`} \n </span>\n <TPSLOrderPriceItem\n price={sl_order_price}\n quoteDP={symbolInfo.quote_dp}\n />\n </div>\n ) : null}\n </div>\n );\n};\n\nconst TPSLOrderPriceItem = ({\n price,\n quoteDP,\n}: {\n price?: number | OrderType;\n quoteDP: number;\n}) => {\n const { t } = useTranslation();\n if (!price) {\n return null;\n }\n if (price === OrderType.MARKET) {\n return <span>{t(\"common.marketPrice\")}</span>;\n }\n\n return (\n <Text.numeral\n className=\"oui-text-base-contrast-80\"\n rule={\"price\"}\n dp={quoteDP}\n >\n {price}\n </Text.numeral>\n );\n};\n\nexport function useTPSLOrderPrice(order: any) {\n // @ts-ignore\n const { sl_trigger_price, tp_trigger_price } =\n !(\"algo_type\" in order) || !Array.isArray(order.child_orders)\n ? {}\n : findTPSLFromOrder(order);\n\n const tpTriggerPrice = tp_trigger_price\n ? `${i18n.t(\"tpsl.tp\")} - ${i18n.t(\"common.marketPrice\")}`\n : undefined;\n const slTriggerPrice = sl_trigger_price\n ? `${i18n.t(\"tpsl.sl\")} - ${i18n.t(\"common.marketPrice\")}`\n : undefined;\n\n return { tpTriggerPrice, slTriggerPrice };\n}\n","import { FC, useMemo } from \"react\";\nimport { useSymbolsInfo, utils } from \"@orderly.network/hooks\";\nimport { API, AlgoOrderType } from \"@orderly.network/types\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { cn, Text, Tooltip } from \"@orderly.network/ui\";\nimport { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nexport const OrderTriggerPrice = () => {\n const { sl_trigger_price, tp_trigger_price, order, position } =\n useTPSLOrderRowContext();\n\n return (\n <TPSLTriggerPrice\n stopLossPrice={sl_trigger_price}\n takeProfitPrice={tp_trigger_price}\n direction={\"column\"}\n order={order}\n position={position}\n tooltip\n />\n );\n};\n\nexport const TPSLTriggerPrice: FC<{\n takeProfitPrice: number | undefined;\n stopLossPrice: number | undefined;\n className?: string;\n direction?: \"row\" | \"column\";\n tooltip?: boolean;\n order?: API.AlgoOrder;\n position?: API.PositionTPSLExt;\n}> = (props) => {\n const { direction = \"row\", order, position } = props;\n // const symbolInfo = useSymbolsInfo()[position?.symbol ?? \"\"]();\n const symbolInfo = useSymbolsInfo();\n const { t } = useTranslation();\n\n const pnl = useMemo(() => {\n const msgs = [];\n\n if (!props.tooltip || !order || !position) return;\n\n let quantity = order.quantity;\n\n if (quantity === 0) {\n if (order.child_orders?.[0].type === \"CLOSE_POSITION\") {\n quantity = position.position_qty;\n }\n }\n\n if (!!props.takeProfitPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"tp\"}\n qty={quantity}\n price={props.takeProfitPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.TAKE_PROFIT}\n symbolInfo={symbolInfo[order.symbol]()}\n />\n );\n }\n\n if (!!props.stopLossPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"sl\"}\n qty={quantity}\n price={props.stopLossPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.STOP_LOSS}\n symbolInfo={symbolInfo[order.symbol]()}\n />\n );\n }\n\n return <div>{msgs}</div>;\n }, [\n props.takeProfitPrice,\n props.stopLossPrice,\n position?.average_open_price,\n order?.side,\n order?.quantity,\n order?.algo_type,\n ]);\n\n const child = useMemo(() => {\n const children = [];\n\n if (!order?.symbol) return <span>-</span>;\n if (props.takeProfitPrice) {\n children.push(\n <Text.numeral\n className={cn(\n \"oui-text-trade-profit oui-gap-0 oui-decoration-white/20 oui-border-b oui-border-dashed oui-border-base-contrast-12\"\n )}\n key={\"tp\"}\n rule=\"price\"\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={props.takeProfitPrice}\n // @ts-ignore\n prefix={\n !props.stopLossPrice || direction === \"column\" ? (\n <span className={\"oui-text-base-contrast-54\"}>\n {`${t(\"tpsl.tp\")} -`} \n </span>\n ) : (\n \"\"\n )\n }\n />\n );\n }\n if (props.stopLossPrice) {\n children.push(\n <Text.numeral\n key={\"sl\"}\n className={cn(\n \"oui-text-trade-loss oui-gap-0 oui-decoration-white/20 oui-border-b oui-border-dashed oui-border-base-contrast-12\"\n )}\n rule={\"price\"}\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={props.stopLossPrice}\n // @ts-ignore\n prefix={\n !props.takeProfitPrice || direction === \"column\" ? (\n <span className={\"oui-text-base-contrast-54\"}>\n {`${t(\"tpsl.sl\")} -`} \n </span>\n ) : (\n \"\"\n )\n }\n />\n );\n }\n\n if (children.length === 0) return <span>-</span>;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <span key={\"split\"}>/</span>);\n }\n\n return children;\n }, [props.takeProfitPrice, props.stopLossPrice, order?.symbol, t]);\n\n const content = (\n <div\n className={cn(\n \"oui-inline-flex oui-text-base-contrast-36\",\n props.direction === \"column\"\n ? \"oui-flex-col\"\n : \"oui-flex-row oui-gap-1\",\n props.className\n )}\n >\n {child}\n </div>\n );\n\n if (props.tooltip) {\n // @ts-ignore\n return (\n <Tooltip\n // @ts-ignore\n content={pnl}\n className=\"oui-bg-base-5\"\n arrow={{ className: \"oui-fill-base-5\" }}\n >\n {content}\n </Tooltip>\n );\n }\n\n return content;\n};\n\nconst TriggerPriceItem: FC<{\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n symbolInfo: API.SymbolExt;\n}> = (props) => {\n const { qty, price, entryPrice, orderSide, orderType, symbolInfo } = props;\n const { t } = useTranslation();\n\n const pnl = utils.priceToPnl(\n {\n qty,\n price,\n entryPrice,\n orderSide,\n orderType,\n },\n {\n symbol: symbolInfo,\n }\n );\n\n const type = orderType === AlgoOrderType.TAKE_PROFIT ? \"TP\" : \"SL\";\n const label = type === \"TP\" ? `${t(\"tpsl.tpPnl\")}:` : `${t(\"tpsl.slPnl\")}:`;\n\n // console.log(\"trigger price item\", \"dp\", symbolInfo.quote_dp);\n\n return (\n <div className=\"oui-flex oui-items-center\">\n <span className=\"oui-text-base-contrast-54 oui-mr-1\">{label}</span>\n <Text.numeral\n rule=\"price\"\n dp={symbolInfo.quote_dp}\n padding={false}\n className={\n pnl === 0\n ? \"oui-text-base-contrast-36\"\n : pnl > 0\n ? \"oui-text-trade-profit oui-gap-0\"\n : \"oui-text-trade-loss oui-gap-0\"\n }\n // @ts-ignore\n prefix={\n // @ts-ignore\n <span>{pnl === 0 ? \"\" : pnl > 0 ? \"+\" : \"-\"}</span>\n }\n suffix={\n <span className=\"oui-text-base-contrast-36 oui-ml-1\">USDC</span>\n }\n >{`${Math.abs(pnl)}`}</Text.numeral>\n </div>\n );\n};\n","import { FC, useEffect, useMemo, useRef, useState } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { cn, Flex, Popover, toast, Text } from \"@orderly.network/ui\";\nimport { grayCell } from \"../../../utils/util\";\nimport { useSymbolContext } from \"../../provider/symbolContext\";\nimport { useOrderListContext } from \"../orderListContext\";\nimport { ConfirmContent, EditType } from \"./editOrder/confirmContent\";\nimport { InnerInput } from \"./editOrder/innerInput\";\n\nexport const TriggerPrice = (props: {\n order: API.AlgoOrderExt;\n disableEdit?: boolean;\n}) => {\n const { order } = props;\n\n const [price, setPrice] = useState<string>(\"\");\n\n useEffect(() => {\n setPrice(order.trigger_price?.toString() ?? \"0\");\n }, [order.trigger_price]);\n\n const isAlgoOrder = order?.algo_order_id !== undefined;\n const isBracketOrder = order?.algo_type === \"BRACKET\";\n const [open, setOpen] = useState(false);\n const [editing, setEditing] = useState(false);\n\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const { editAlgoOrder, checkMinNotional } = useOrderListContext();\n\n const { base, quote_dp, quote_max, quote_min } = useSymbolContext();\n\n const hintInfo = useMemo(() => {\n if (!isAlgoOrder || isBracketOrder) if (!editing) return undefined;\n if (Number(price) > quote_max) {\n return `Trigger price must be less than ${quote_max}`;\n } else if (Number(price) < quote_min) {\n return `Trigger price must be greater than ${quote_min}`;\n }\n }, [editing, price, isAlgoOrder, isBracketOrder]);\n\n const closePopover = () => {\n setOpen(false);\n setEditing(false);\n };\n const cancelPopover = () => {\n setPrice(order.trigger_price?.toString() ?? \"0\");\n setOpen(false);\n setEditing(false);\n };\n\n const componentRef = useRef<HTMLDivElement | null>(null);\n\n const handleClickOutside = (event: any) => {\n if (\n componentRef.current &&\n !componentRef.current.contains(event.target as Node) &&\n !open\n ) {\n cancelPopover();\n }\n };\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [open, order.trigger_price]);\n\n const onClick = (event: any) => {\n event?.stopPropagation();\n event?.preventDefault();\n\n setEditing(false);\n\n if (Number(price) === Number(order.trigger_price)) {\n return;\n }\n\n if (order.price && order.reduce_only !== true) {\n const notionalText = checkMinNotional(\n order.symbol,\n order.price,\n order.quantity,\n );\n if (notionalText) {\n toast.error(notionalText);\n setIsSubmitting(false);\n cancelPopover();\n return;\n }\n }\n\n setOpen(true);\n };\n\n const handleKeyDown = (event: any) => {\n if (event.key === \"Enter\") {\n onClick(event);\n }\n };\n\n const onConfirm = () => {\n if ((hintInfo ?? \"\").length > 0) {\n return;\n }\n setIsSubmitting(true);\n\n let data: any = {\n // price: price,\n quantity: order.quantity,\n trigger_price: price,\n symbol: order.symbol,\n // order_type: order.type,\n // side: order.side,\n // reduce_only: Boolean(order.reduce_only),\n algo_order_id: order.algo_order_id,\n };\n\n if (order.order_tag !== undefined) {\n data = { ...data, order_tag: order.order_tag };\n }\n\n editAlgoOrder(`${order.algo_order_id}`, data)\n .then(\n (result: any) => {\n closePopover();\n setPrice(price);\n // setTimeout(() => inputRef.current?.blur(), 300);\n },\n (err: any) => {\n toast.error(err.message);\n\n setPrice(order.trigger_price?.toString() ?? \"--\");\n cancelPopover();\n },\n )\n .finally(() => setIsSubmitting(false));\n };\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n if (!isAlgoOrder || isBracketOrder) {\n return <Text>{`--`}</Text>;\n }\n const trigger = () => {\n if (!editing || props.disableEdit) {\n return (\n <NormalState\n order={order}\n price={price}\n setEditing={setEditing}\n disableEdit={props.disableEdit}\n />\n );\n }\n\n return (\n <InnerInput\n inputRef={inputRef}\n dp={quote_dp}\n value={price}\n setValue={setPrice}\n setEditing={setEditing}\n handleKeyDown={handleKeyDown}\n onClick={onClick}\n onClose={cancelPopover}\n hintInfo={hintInfo}\n />\n );\n };\n\n return (\n <Popover\n open={open}\n onOpenChange={setOpen}\n content={\n <ConfirmContent\n type={EditType.triggerPrice}\n base={base}\n value={price}\n cancelPopover={cancelPopover}\n isSubmitting={isSubmitting}\n onConfirm={onConfirm}\n />\n }\n >\n <div\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n ref={componentRef}\n >\n {trigger()}\n </div>\n </Popover>\n );\n};\n\nconst NormalState: FC<{\n order: any;\n price: string;\n setEditing: any;\n disableEdit?: boolean;\n}> = (props) => {\n const { order, price } = props;\n\n return (\n <div\n className={cn(\n \"oui-flex oui-max-w-[110px] oui-justify-start oui-items-center oui-gap-1 oui-relative oui-font-semibold\",\n grayCell(order) && \"oui-text-base-contrast-20\",\n )}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.setEditing(true);\n }}\n >\n <Flex\n r=\"base\"\n className={cn(\n \"oui-min-w-[70px] oui-h-[28px]\",\n !props.disableEdit &&\n \"oui-bg-base-7 oui-px-2 oui-border oui-border-line-12\",\n )}\n >\n <Text size=\"2xs\">{price}</Text>\n </Flex>\n </div>\n );\n};\n","import React, { FC } from \"react\";\nimport { Divider, Flex, Grid, Text } from \"@orderly.network/ui\";\nimport { TabType } from \"../../orders.widget\";\nimport { BracketOrderPriceWidget } from \"./bracketOrderPrice\";\nimport { CancelBtnWidget } from \"./cancelBtn\";\nimport { EditBtnWidget } from \"./editBtn\";\nimport {\n OrderTime,\n SymbolToken,\n OrderTypeView,\n Qty,\n Filled,\n EstTotal,\n TriggerPrice,\n LimitPrice,\n MarkPrice,\n TPTrigger,\n TPPrice,\n TPSLQuantity,\n SLTrigger,\n SLPrice,\n AvgPrice,\n OrderPrice,\n RealizedPnL,\n OrderState,\n Fee,\n} from \"./items\";\nimport { OrderCellState } from \"./orderCell.script\";\n\nexport const OrderCell: FC<\n OrderCellState & {\n className?: string;\n }\n> = (props) => {\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n itemAlign={\"start\"}\n className={props.className}\n >\n <Header {...props} />\n <Divider intensity={6} className=\"oui-w-full\" />\n <Body {...props} />\n {props.type === TabType.pending && <BracketOrderPriceWidget {...props} />}\n {props.type !== TabType.orderHistory && <Btns {...props} />}\n </Flex>\n );\n};\n\nexport const Header: FC<OrderCellState> = (props) => {\n return (\n <Flex direction={\"column\"} gap={1} width={\"100%\"}>\n <Flex justify={\"between\"} width={\"100%\"}>\n <SymbolToken {...props} />\n <OrderTime {...props} />\n </Flex>\n <Flex width={\"100%\"} justify={\"between\"}>\n <OrderTypeView {...props} />\n {props.type === TabType.orderHistory && <OrderState {...props} />}\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<OrderCellState> = (props) => {\n return (\n <Grid cols={3} rows={2} width={\"100%\"} gap={1}>\n {itemsWithType(props)}\n </Grid>\n );\n};\n\nexport const Btns: FC<OrderCellState> = (props) => {\n return (\n <Grid cols={3} rows={1} width={\"100%\"} gap={2}>\n <div></div>\n <EditBtnWidget state={props} />\n <CancelBtnWidget state={props} />\n </Grid>\n );\n};\n\nfunction itemsWithType(props: OrderCellState) {\n switch (props.type) {\n case TabType.all:\n return <></>;\n case TabType.pending:\n return (\n <>\n <Qty {...props} />\n <Filled {...props} />\n <EstTotal {...props} />\n <TriggerPrice {...props} />\n <LimitPrice {...props} />\n <MarkPrice {...props} />\n </>\n );\n\n case TabType.tp_sl:\n return (\n <>\n <TPTrigger {...props} />\n <TPPrice {...props} />\n <TPSLQuantity {...props} />\n <SLTrigger {...props} />\n <SLPrice {...props} />\n </>\n );\n case TabType.filled:\n return <></>;\n case TabType.cancelled:\n return <></>;\n case TabType.rejected:\n return <></>;\n case TabType.orderHistory:\n return (\n <>\n <Qty {...props} />\n <Filled {...props} />\n <TriggerPrice {...props} align=\"end\" />\n <AvgPrice {...props} />\n <OrderPrice {...props} />\n <RealizedPnL {...props} />\n {/* placeholder */}\n <div></div>\n {/* placeholder */}\n <div></div>\n <Fee {...props} />\n </>\n );\n }\n}\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, EditIcon, Flex, Text, modal } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { MobileTooltip } from \"../items\";\nimport { BracketOrderPriceState } from \"./bracketOrderPrice.script\";\n\nexport const BracketOrderPrice: FC<BracketOrderPriceState> = (props) => {\n const { t } = useTranslation();\n\n const onEdit = () => {\n modal.show(\"EditBracketOrderSheetId\", {\n order: props.order,\n });\n };\n\n if (!props.sl_trigger_price && !props.tp_trigger_price) return <></>;\n\n return (\n <Flex gap={1} itemAlign={\"center\"} justify={\"start\"}>\n <MobileTooltip\n classNames={{\n content: \"oui-bg-base-6 oui-ml-2\",\n arrow: \"oui-fill-base-6\",\n }}\n content={\n <Flex direction={\"column\"} itemAlign={\"start\"} gap={1}>\n {typeof props.pnl?.tpPnL !== \"undefined\" && (\n <Text.numeral\n // @ts-ignore\n prefix={\n <Text intensity={80}>{`${t(\"tpsl.tpPnl\")}:`} </Text>\n }\n suffix={<Text intensity={20}>{\" USDC\"}</Text>}\n dp={props.quote_dp}\n color=\"buy\"\n showIdentifier\n >\n {props.pnl?.tpPnL}\n </Text.numeral>\n )}\n {typeof props.pnl?.slPnL !== \"undefined\" && (\n <Text.numeral\n // @ts-ignore\n prefix={\n <Text intensity={80}>{`${t(\"tpsl.slPnl\")}:`} </Text>\n }\n suffix={<Text intensity={20}>{\" USDC\"}</Text>}\n dp={props.quote_dp}\n color=\"sell\"\n >\n {props.pnl?.slPnL}\n </Text.numeral>\n )}\n </Flex>\n }\n >\n <button\n onClick={() => {\n props.setOpen(!props.open);\n }}\n >\n <Flex gap={1} width={\"1\"}>\n {props.tp_trigger_price && (\n <Price\n type=\"TP\"\n value={props.tp_trigger_price}\n quote_dp={props.quote_dp}\n />\n )}\n {props.sl_trigger_price && (\n <Price\n type=\"SL\"\n value={props.sl_trigger_price}\n quote_dp={props.quote_dp}\n />\n )}\n </Flex>\n </button>\n </MobileTooltip>\n <EditIcon\n onClick={onEdit}\n opacity={1}\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={16}\n />\n </Flex>\n );\n};\n\nconst Price = (props: {\n type: \"TP\" | \"SL\";\n value?: number | string;\n quote_dp: number;\n}) => {\n const { type, value, quote_dp } = props;\n\n return value ? (\n <Text.numeral\n size=\"2xs\"\n className={cn(\n \"oui-border-b oui-border-dashed oui-border-base-contrast-12\",\n type === \"TP\" ? \"oui-text-trade-profit\" : \"oui-text-trade-loss\",\n )}\n key={\"tp\"}\n rule=\"price\"\n dp={quote_dp}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n // @ts-ignore\n prefix={\n <span className={\"oui-text-base-contrast-36\"}>\n {`${type} `}: \n </span>\n }\n >\n {value}\n </Text.numeral>\n ) : (\n <></>\n );\n};\n","import {\n FC,\n PropsWithChildren,\n ReactNode,\n useCallback,\n useMemo,\n useState,\n} from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n AlgoOrderRootType,\n API,\n OrderStatus,\n OrderType,\n} from \"@orderly.network/types\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { Badge, cn, Flex, Statistic, Text, Tooltip } from \"@orderly.network/ui\";\nimport { SharePnLBottomSheetId } from \"@orderly.network/ui-share\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { parseBadgesFor, upperCaseFirstLetter } from \"../../../utils/util\";\nimport { ShareButtonWidget } from \"../../shareButton\";\nimport { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\nimport { OrderCellState } from \"./orderCell.script\";\n\nexport const SymbolToken: FC<OrderCellState> = (props) => {\n const { item } = props;\n const isBuy = item.side === OrderSide.BUY;\n const { t } = useTranslation();\n\n return (\n <Text.formatted\n intensity={80}\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"sm\"\n // @ts-ignore\n prefix={\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? t(\"common.buy\") : t(\"common.sell\")}\n </Badge>\n }\n onClick={() => {\n props.onSymbolChange?.({ symbol: item.symbol } as API.Symbol);\n }}\n // showIcon\n >\n {item.symbol}\n </Text.formatted>\n );\n};\n\nexport const OrderTypeView: FC<OrderCellState> = (props) => {\n const { item } = props;\n\n const orderType = useCallback(() => {\n const type =\n typeof item.type === \"string\"\n ? item.type.replace(\"_ORDER\", \"\").toLowerCase()\n : item.type;\n const isAlgoOrder =\n item.algo_order_id && item.algo_type !== AlgoOrderRootType.BRACKET;\n if (isAlgoOrder) {\n return `Stop ${type}`;\n }\n return upperCaseFirstLetter(item.type);\n }, [item]);\n\n return (\n <Flex direction={\"row\"} gap={1}>\n {parseBadgesFor(props.item)?.map((e, index) => (\n <Badge\n key={index}\n color={e.toLocaleLowerCase() === \"position\" ? \"primary\" : \"neutral\"}\n size=\"xs\"\n >\n {e}\n </Badge>\n ))}\n </Flex>\n );\n};\n\nexport const OrderTime: FC<OrderCellState> = (props) => {\n const { item } = props;\n\n return (\n <Text.formatted\n rule={\"date\"}\n formatString=\"yyyy-MM-dd hh:mm:ss\"\n intensity={36}\n size=\"2xs\"\n >\n {item.updated_time}\n </Text.formatted>\n );\n};\n\nexport const OrderState: FC<OrderCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n // @ts-ignore\n const status = item.status || item.algo_status;\n\n const statusMap = useMemo(() => {\n return {\n [OrderStatus.NEW]: t(\"orders.status.pending\"),\n [OrderStatus.FILLED]: t(\"orders.status.filled\"),\n [OrderStatus.PARTIAL_FILLED]: t(\"orders.status.partialFilled\"),\n [OrderStatus.CANCELLED]: t(\"orders.status.canceled\"),\n [OrderStatus.REJECTED]: t(\"orders.status.rejected\"),\n [OrderStatus.INCOMPLETE]: t(\"orders.status.incomplete\"),\n [OrderStatus.COMPLETED]: t(\"orders.status.completed\"),\n };\n }, [t]);\n\n return (\n <Text.formatted intensity={80} size=\"2xs\">\n {statusMap[status as keyof typeof statusMap] ||\n upperCaseFirstLetter(status)}\n </Text.formatted>\n );\n};\n\nexport const Qty: FC<OrderCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n const isEntirePosition =\n item.type === OrderType.CLOSE_POSITION &&\n // @ts-ignore\n item?.status !== OrderStatus.FILLED;\n\n return (\n <Statistic\n label={t(\"common.qty\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.base_dp}\n padding={false}\n coloring\n placeholder={t(\"tpsl.entirePosition\")}\n intensity={80}\n >\n {isEntirePosition ? t(\"tpsl.entirePosition\") : item.quantity}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Filled: FC<OrderCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={<Text>{t(\"orders.status.filled\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.base_dp}\n intensity={80}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n >\n {/* {item.algo_order_id\n ? item.total_executed_quantity\n : (item as unknown as API.OrderExt).executed} */}\n {item.total_executed_quantity}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Notional: FC<OrderCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n align=\"end\"\n label={\n <Text>\n {t(\"common.notional\")}\n <Text intensity={20}>(USDC)</Text>\n </Text>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.quote_dp}\n coloring\n intensity={80}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n >\n {(item as any).notional ?? \"--\"}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const EstTotal: FC<OrderCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const value = useMemo(() => {\n if (item.price && item.quantity) {\n return new Decimal(item.price)\n .mul(item.quantity)\n .toFixed(props.quote_dp, Decimal.ROUND_DOWN);\n }\n return \"--\";\n }, [item.price, item.quantity]);\n\n return (\n <Statistic\n align=\"end\"\n label={\n <Text>\n {t(\"common.notional\")}\n <Text intensity={20}>(USDC)</Text>\n </Text>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.quote_dp}\n coloring\n intensity={80}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n >\n {value}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const TriggerPrice: FC<\n OrderCellState & {\n align?: \"start\" | \"end\";\n }\n> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"orders.column.triggerPrice\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align={props.align}\n >\n <Text.numeral\n dp={props.quote_dp}\n intensity={80}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n >\n {item.trigger_price ?? \"--\"}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MarkPrice: FC<OrderCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.markPrice\")}\n align=\"end\"\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n padding={false}\n >\n {item.mark_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const LimitPrice: FC<OrderCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const isAlgoOrder = item?.algo_order_id !== undefined;\n const isStopMarket = item?.type === \"MARKET\" && isAlgoOrder;\n\n return (\n <Statistic\n label={t(\"common.limitPrice\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n {isStopMarket ? (\n <Text>{t(\"common.marketPrice\")}</Text>\n ) : (\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n padding={false}\n >\n {item.price ?? \"--\"}\n </Text.numeral>\n )}\n </Statistic>\n );\n};\n\nexport const TPTrigger: FC<OrderCellState> = (props) => {\n const { tp_trigger_price, tpPnL } = useTPSLOrderRowContext();\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"tpsl.tpTrigger\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <MobileTooltip\n content={\n tpPnL && (\n <Text.numeral\n size=\"2xs\"\n showIdentifier\n // @ts-ignore\n prefix={<Text intensity={54}>{`${t(\"tpsl.tpPnl\")}:`} </Text>}\n suffix={<Text intensity={20}> USDC</Text>}\n coloring\n >\n {tpPnL}\n </Text.numeral>\n )\n }\n classNames={{\n content: \"oui-bg-base-6 oui-ml-2\",\n arrow: \"oui-fill-base-6\",\n }}\n >\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n color=\"buy\"\n padding={false}\n className={\n tp_trigger_price\n ? \"oui-border-b oui-border-dashed oui-border-base-contrast-12\"\n : undefined\n }\n >\n {tp_trigger_price ?? \"--\"}\n </Text.numeral>\n </MobileTooltip>\n </Statistic>\n );\n};\n\nexport const SLTrigger: FC<OrderCellState> = (props) => {\n const { sl_trigger_price, slPnL } = useTPSLOrderRowContext();\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"tpsl.slTrigger\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <MobileTooltip\n content={\n slPnL && (\n <Text.numeral\n size=\"2xs\"\n // @ts-ignore\n prefix={\n <Text intensity={54}>{`${t(\"tpsl.slPnl\")}:`} </Text>\n }\n suffix={<Text intensity={20}> USDC</Text>}\n coloring\n >\n {slPnL}\n </Text.numeral>\n )\n }\n classNames={{\n content: \"oui-bg-base-6 oui-ml-2\",\n arrow: \"oui-fill-base-6\",\n }}\n >\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n color=\"sell\"\n padding={false}\n className={\n sl_trigger_price\n ? \"oui-border-b oui-border-dashed oui-border-base-contrast-12\"\n : undefined\n }\n >\n {sl_trigger_price ?? \"--\"}\n </Text.numeral>\n </MobileTooltip>\n </Statistic>\n );\n};\n\nexport const TPPrice: FC<OrderCellState> = (props) => {\n const { t } = useTranslation();\n const { tp_order_price } = useTPSLOrderRowContext();\n\n const renderOrderPrice = useMemo(() => {\n if (tp_order_price === undefined) {\n return <Text>--</Text>;\n }\n if (tp_order_price === OrderType.MARKET) {\n return <Text>{t(\"common.marketPrice\")}</Text>;\n }\n return (\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n padding={false}\n >\n {tp_order_price}\n </Text.numeral>\n );\n }, [tp_order_price]);\n\n return (\n <Statistic\n label={t(\"tpsl.tpPrice\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n {renderOrderPrice}\n </Statistic>\n );\n};\nexport const SLPrice: FC<OrderCellState> = (props) => {\n const { t } = useTranslation();\n const { sl_order_price } = useTPSLOrderRowContext();\n\n const renderOrderPrice = useMemo(() => {\n if (sl_order_price === undefined) {\n return <Text>--</Text>;\n }\n if (sl_order_price === OrderType.MARKET) {\n return <Text>{t(\"common.marketPrice\")}</Text>;\n }\n return (\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n padding={false}\n >\n {sl_order_price}\n </Text.numeral>\n );\n }, [sl_order_price]);\n\n return (\n <Statistic\n label={t(\"tpsl.slPrice\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n {renderOrderPrice}\n </Statistic>\n );\n};\n\nexport const TPSLQuantity: FC<OrderCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const quantity = useMemo(() => {\n if (item.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n return (\n <span className=\"oui-text-base-contrast-80\">\n {t(\"tpsl.entirePosition\")}\n </span>\n );\n }\n\n return (\n <Text.numeral\n dp={props.base_dp}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n padding={false}\n >\n {item.quantity}\n </Text.numeral>\n );\n }, [item, t]);\n\n return (\n <Statistic\n label={t(\"common.quantity\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n {quantity}\n </Statistic>\n );\n};\n\nexport const AvgPrice: FC<OrderCellState> = (props) => {\n const { t } = useTranslation();\n return (\n <Statistic\n label={\n <Text>\n {t(\"common.avgPrice\")}\n <Text intensity={20}>(USDC)</Text>\n </Text>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n padding={false}\n >\n {/* @ts-ignore */}\n {props.item?.average_executed_price ?? \"--\"}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const OrderPrice: FC<OrderCellState> = (props) => {\n const { t } = useTranslation();\n return (\n <Statistic\n label={\n <Text>\n {t(\"common.orderPrice\")}\n <Text intensity={20}>(USDC)</Text>\n </Text>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n padding={false}\n placeholder={t(\"common.marketPrice\")}\n >\n {/* @ts-ignore */}\n {props.item?.price ?? \"--\"}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const RealizedPnL: FC<OrderCellState> = (props) => {\n // @ts-ignore\n const value = props?.item?.realized_pnl;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={\n <Text>\n {t(\"common.realizedPnl\")}\n <Text intensity={20}>(USDC)</Text>\n </Text>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n <Flex gap={1}>\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n padding={false}\n intensity={(value ?? 0) == 0 ? 80 : undefined}\n showIdentifier={(value ?? 0) > 0}\n coloring={(value ?? 0) != 0}\n >\n {value ?? \"--\"}\n </Text.numeral>\n <ShareButtonWidget\n order={props.item}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLBottomSheetId}\n iconSize={12}\n />\n </Flex>\n </Statistic>\n );\n};\n\nexport const MobileTooltip: FC<\n PropsWithChildren<{\n content?: string | ReactNode;\n classNames?: {\n content?: string;\n arrow?: string;\n };\n }>\n> = (props) => {\n const { classNames, content } = props;\n const [open, setOpen] = useState(false);\n if (typeof content === \"undefined\") return props.children;\n return (\n <Tooltip\n // @ts-ignore\n content={content}\n className={classNames?.content}\n open={open}\n onOpenChange={setOpen}\n arrow={{ className: classNames?.arrow }}\n >\n <div onClick={() => setOpen((e) => !e)}>{props.children}</div>\n </Tooltip>\n );\n};\n\nexport const Fee: FC<OrderCellState> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex justify=\"end\" gapX={1} mt={1}>\n <Text size=\"2xs\" intensity={36}>\n {t(\"common.fee\")}:\n </Text>\n <Text size=\"2xs\" intensity={80}>\n {props.item?.total_fee ?? \"--\"}\n </Text>\n </Flex>\n );\n};\n","import { useMemo, useState } from \"react\";\nimport { utils } from \"@orderly.network/hooks\";\nimport { calcBracketRoiAndPnL } from \"../../../../utils/util\";\nimport { OrderCellState } from \"../orderCell.script\";\n\nexport const useBracketOrderPriceScript = (props: OrderCellState) => {\n const { item: order, quote_dp, base_dp } = props;\n\n const [open, setOpen] = useState(false);\n\n const { sl_trigger_price, tp_trigger_price } = useMemo(() => {\n if (!(\"algo_type\" in order) || !Array.isArray(order.child_orders)) {\n return {};\n }\n return utils.findTPSLFromOrder(order.child_orders[0]);\n }, [order]);\n\n const { pnl, roi } = calcBracketRoiAndPnL(order);\n\n return {\n sl_trigger_price,\n order,\n tp_trigger_price,\n pnl,\n roi,\n quote_dp,\n open,\n setOpen,\n };\n};\n\nexport type BracketOrderPriceState = ReturnType<\n typeof useBracketOrderPriceScript\n>;\n","import { FC } from \"react\";\nimport { OrderCellState } from \"../orderCell.script\";\nimport { useBracketOrderPriceScript } from \"./bracketOrderPrice.script\";\nimport { BracketOrderPrice } from \"./bracketOrderPrice.ui\";\n\nexport const BracketOrderPriceWidget: FC<OrderCellState> = (props) => {\n const state = useBracketOrderPriceScript(props);\n return (<BracketOrderPrice {...state} />);\n};\n","import { FC } from \"react\";\nimport { Button, SimpleDialog, Text } from \"@orderly.network/ui\";\nimport { CancelBtnState } from \"./cancelBtn.script\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const CancelBtn: FC<CancelBtnState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <>\n <Button\n variant=\"outlined\"\n fullWidth\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={(e) => props.setOpen(true)}\n >\n {t(\"common.cancel\")}\n </Button>\n {props.open && (\n <SimpleDialog\n size=\"xs\"\n open={props.open}\n onOpenChange={props.setOpen}\n title={t(\"orders.cancelOrder\")}\n actions={{\n primary: {\n label: t(\"common.confirm\"),\n loading: props.isLoading,\n fullWidth: true,\n size: \"md\",\n onClick: (e) => {\n props.onCancel(e);\n },\n },\n secondary: {\n label: t(\"common.cancel\"),\n fullWidth: true,\n size: \"md\",\n onClick: () => {\n props.onClose();\n },\n },\n }}\n >\n <Text size=\"2xs\" intensity={54}>\n {t(\"orders.cancelOrder.description\")}\n </Text>\n </SimpleDialog>\n )}\n </>\n );\n};\n","import { FC, useState } from \"react\";\nimport { OrderCellState } from \"../orderCell.script\";\nimport { useOrderListContext } from \"../../orderListContext\";\nimport { toast } from \"@orderly.network/ui\";\n\nexport const useCancelBtnScript = (props: { state: OrderCellState }) => {\n const { state } = props;\n const [open, setOpen] = useState(false);\n\n const { onCancelOrder } = useOrderListContext();\n const [isLoading, setIsLoading] = useState(false);\n\n const onCancel = (event?: any) => {\n if (!onCancelOrder) return Promise.resolve();\n event?.preventDefault();\n event?.stopPropagation();\n setIsLoading(true);\n return onCancelOrder(state.item)\n .then(\n (res: any) => {\n setOpen(false);\n },\n (error: any) => {\n toast.error(error.message);\n }\n ).finally(() => {\n setIsLoading(false);\n });\n };\n\n const onClose = () => {\n setOpen(false);\n };\n\n return {\n ...state,\n\n open,\n setOpen,\n onCancel,\n onClose,\n isLoading,\n };\n};\n\nexport type CancelBtnState = ReturnType<typeof useCancelBtnScript>;\n","import { FC } from \"react\";\nimport { OrderCellState } from \"../orderCell.script\";\nimport { useCancelBtnScript } from \"./cancelBtn.script\";\nimport { CancelBtn } from \"./cancelBtn.ui\";\n\nexport const CancelBtnWidget = (props: { state: OrderCellState }) => {\n const state = useCancelBtnScript(props);\n return <CancelBtn {...state} />;\n};\n","import { FC } from \"react\";\nimport { Button } from \"@orderly.network/ui\";\nimport { EditBtnState } from \"./editBtn.script\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const EditBtn: FC<EditBtnState> = (props) => {\n const { t } = useTranslation();\n const { item } = props;\n const isBuy = item.quantity > 0;\n\n return (\n <>\n <Button\n variant=\"outlined\"\n fullWidth\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={() => {\n props.onShowEditSheet();\n }}\n >\n {t(\"common.edit\")}\n </Button>\n </>\n );\n};\n","import { useCallback } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { modal } from \"@orderly.network/ui\";\nimport { PositionTPSLSheet, TPSLSheetId } from \"@orderly.network/ui-tpsl\";\nimport { TabType } from \"../../../orders.widget\";\nimport { useOrderListContext } from \"../../orderListContext\";\nimport { useTPSLOrderRowContext } from \"../../tpslOrderRowContext\";\nimport { EditSheetWidget } from \"../editSheet\";\nimport { OrderCellState } from \"../orderCell.script\";\n\nexport const useEditBtnScript = (props: { state: OrderCellState }) => {\n const { state } = props;\n const { t } = useTranslation();\n const symbolInfo = useSymbolsInfo()[props.state.item.symbol]();\n\n const { editAlgoOrder, editOrder } = useOrderListContext();\n const { order, position } = useTPSLOrderRowContext();\n\n const onShowEditSheet = useCallback(() => {\n if (props.state.type === TabType.tp_sl) {\n modal\n .sheet({\n content: (\n <PositionTPSLSheet\n symbol={props.state.item.symbol}\n symbolInfo={symbolInfo}\n isEditing\n order={props.state.item}\n />\n ),\n })\n .catch((error) => {\n console.log(error);\n });\n } else {\n modal\n .sheet({\n title: t(\"orders.editOrder\"),\n // size: \"xs\",\n classNames: {\n content: \"oui-bg-base-8\",\n },\n content: (\n <EditSheetWidget\n position={position}\n state={state}\n editAlgoOrder={editAlgoOrder}\n editOrder={editOrder}\n />\n ),\n })\n .catch((error) => {\n console.log(error);\n });\n }\n }, [state]);\n\n return {\n ...state,\n onShowEditSheet,\n };\n};\n\nexport type EditBtnState = ReturnType<typeof useEditBtnScript>;\n","import { FC } from \"react\";\nimport { utils } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@orderly.network/react-app\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport {\n Badge,\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n SimpleDialog,\n Slider,\n Text,\n ThrottledButton,\n toast,\n} from \"@orderly.network/ui\";\nimport { parseBadgesFor } from \"../../../../utils/util\";\nimport { ConfirmDialogContent } from \"./editDialogContent\";\nimport { EditSheetState } from \"./editSheet.script\";\n\nexport const EditSheet: FC<EditSheetState> = (props) => {\n const { item } = props;\n const isBuy = item.side === OrderSide.BUY;\n const { t } = useTranslation();\n\n const { parseErrorMsg } = useOrderEntryFormErrorMsg(props.errors!);\n\n const orderQuantityErrorMsg = parseErrorMsg(\"order_quantity\");\n const orderPriceErrorMsg = parseErrorMsg(\"order_price\");\n const triggerPriceErrorMsg = parseErrorMsg(\"trigger_price\");\n\n const percentages =\n props.quantity && props.maxQty\n ? Math.min(Number(props.quantity) / props.maxQty, 1)\n : undefined;\n\n const onBlur = (value: string) => {\n const baseTick = props.baseTick;\n if (baseTick && baseTick > 0) {\n const formatQty = utils.formatNumber(value, baseTick) ?? value;\n props.setQuantity(formatQty);\n }\n };\n\n return (\n <>\n <Flex\n direction={\"column\"}\n gap={3}\n width={\"100%\"}\n itemAlign={\"start\"}\n className=\"oui-text-sm\"\n >\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text.formatted rule={\"symbol\"} showIcon intensity={80}>\n {item.symbol}\n </Text.formatted>\n <Flex direction={\"row\"} gap={1}>\n {parseBadgesFor(props.item)?.map((e, index) => (\n <Badge\n key={index}\n color={\n e.toLocaleLowerCase() === \"position\" ? \"primary\" : \"neutral\"\n }\n size=\"xs\"\n >\n {e}\n </Badge>\n ))}\n {isBuy && (\n <Badge color=\"success\" size=\"xs\">\n {t(\"common.buy\")}\n </Badge>\n )}\n {!isBuy && (\n <Badge color=\"danger\" size=\"xs\">\n {t(\"common.sell\")}\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider intensity={8} className=\"oui-w-full\" />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text>{t(\"common.lastPrice\")}</Text>\n <Text.numeral dp={(props.item as any)?.symbolInfo?.duote_dp}>\n {props.curMarkPrice ?? \"--\"}\n </Text.numeral>\n </Flex>\n <Flex width={\"100%\"} direction={\"column\"} itemAlign={\"stretch\"} gap={2}>\n {props.isAlgoOrder && (\n <Input.tooltip\n prefix={\n <Text intensity={54} className=\"oui-px-3\">\n {t(\"orders.column.triggerPrice\")}\n </Text>\n }\n suffix={\n <Text intensity={54} className=\"oui-px-3\">\n {props.quote}\n </Text>\n }\n color={triggerPriceErrorMsg ? \"danger\" : undefined}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.quote_dp),\n ]}\n value={props.triggerPrice}\n onValueChange={(e) => props.setTriggerPrice(e)}\n tooltip={triggerPriceErrorMsg}\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 classNames={{\n input: \"oui-text-base-contrast oui-w-full\",\n root: cn(\n \"oui-outline-line-12\",\n triggerPriceErrorMsg && \"oui-outline-danger\",\n ),\n }}\n />\n )}\n <Input.tooltip\n prefix={\n <Text intensity={54} className=\"oui-px-3\">\n {t(\"common.price\")}\n </Text>\n }\n suffix={\n <Text intensity={54} className=\"oui-px-3\">\n {props.quote}\n </Text>\n }\n color={orderPriceErrorMsg ? \"danger\" : undefined}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.quote_dp),\n ]}\n disabled={!props.priceEdit}\n value={\n props.isStopMarket\n ? t(\"orderEntry.orderType.market\")\n : props.price\n }\n onValueChange={(e) => props.setPrice(e)}\n tooltip={orderPriceErrorMsg}\n tooltipProps={{\n content: {\n className: \"oui-bg-base-5\",\n },\n arrow: {\n className: \"oui-fill-base-5\",\n },\n }}\n classNames={{\n input: \"oui-text-base-contrast\",\n root: cn(\n \"oui-outline-line-12\",\n orderPriceErrorMsg && \"oui-outline-danger\",\n ),\n }}\n />\n <Input.tooltip\n prefix={\n <Text intensity={54} className=\"oui-px-3\">\n {t(\"common.quantity\")}\n </Text>\n }\n suffix={\n <Text intensity={54} className=\"oui-px-3\">\n {props.base}\n </Text>\n }\n color={orderQuantityErrorMsg ? \"danger\" : undefined}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.base_dp),\n // inputFormatter.rangeFormatter({ max: props.maxQty }),\n ]}\n value={props.quantity}\n onValueChange={(e) => {\n props.setQuantity(e);\n }}\n onBlur={(event) => onBlur(event.target.value)}\n tooltip={orderQuantityErrorMsg}\n tooltipProps={{\n content: {\n className: \"oui-bg-base-6\",\n },\n arrow: {\n className: \"oui-fill-base-6\",\n },\n }}\n classNames={{\n input: \"oui-text-base-contrast\",\n root: cn(\n \"oui-outline-line-12\",\n orderQuantityErrorMsg && \"oui-outline-danger\",\n ),\n }}\n />\n <Slider\n markCount={4}\n value={[props.sliderValue ?? 0]}\n onValueChange={(e) => {\n props.setSliderValue(e[0]);\n }}\n color=\"primary\"\n />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text.numeral\n color=\"primary\"\n size=\"2xs\"\n dp={2}\n padding={false}\n rule=\"percentages\"\n >{`${percentages ?? 0}`}</Text.numeral>\n <Flex\n gap={1}\n onClick={() => {\n props.setQuantity(props.maxQty.toString());\n }}\n >\n <Text size=\"2xs\" color=\"primary\">\n {t(\"common.max\")}\n </Text>\n <Text.numeral intensity={54} size=\"2xs\" dp={props.base_dp}>\n {props.maxQty}\n </Text.numeral>\n </Flex>\n </Flex>\n </Flex>\n <Flex width={\"100%\"} gap={3} mt={2}>\n <Button\n fullWidth\n color=\"secondary\"\n onClick={(e) => {\n props.onClose();\n }}\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton\n fullWidth\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.onSheetConfirm();\n }}\n loading={props.submitting}\n disabled={!props.isChanged}\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n </Flex>\n\n <SimpleDialog\n open={props.dialogOpen}\n onOpenChange={props.setDialogOpen}\n title={t(\"orders.editOrder\")}\n size=\"xs\"\n actions={{\n primary: {\n label: t(\"common.confirm\"),\n onClick: props.onDialogConfirm,\n loading: props.submitting,\n fullWidth: true,\n },\n secondary: {\n label: t(\"common.cancel\"),\n onClick: props.onCloseDialog,\n fullWidth: true,\n },\n }}\n classNames={{\n content: \"oui-pb-4\",\n body: \"oui-p-0\",\n footer: \"oui-pt-3 oui-pb-0\",\n }}\n >\n <ConfirmDialogContent {...props} />\n </SimpleDialog>\n </>\n );\n};\n","import { FC } from \"react\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { parseBadgesFor } from \"../../../../utils/util\";\nimport { Badge, Checkbox, Divider, Flex, Text } from \"@orderly.network/ui\";\nimport { EditSheetState } from \"./editSheet.script\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const ConfirmDialogContent: FC<EditSheetState> = (props) => {\n const { side } = props.item;\n const { price, quantity, triggerPrice, isAlgoOrder } = props;\n const isBuy = side === OrderSide.BUY;\n const { t } = useTranslation();\n\n return (\n <div className=\"oui-pt-2\">\n <Text\n intensity={80}\n >{`You agree to edit your ${props.base}-PERP order.`}</Text>\n <Flex gap={2} mb={3} mt={2} justify={\"between\"}>\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"base\"\n showIcon\n >\n {props.item.symbol}\n </Text.formatted>\n <Flex direction={\"row\"} gap={1}>\n {parseBadgesFor(props.item)?.map((e, index) => (\n <Badge\n key={index}\n color={\n e.toLocaleLowerCase() === \"position\" ? \"primary\" : \"neutral\"\n }\n size=\"xs\"\n >\n {e}\n </Badge>\n ))}\n {isBuy && (\n <Badge color=\"success\" size=\"xs\">\n {t(\"common.buy\")}\n </Badge>\n )}\n {!isBuy && (\n <Badge color=\"danger\" size=\"xs\">\n {t(\"common.sell\")}\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider />\n <Flex\n direction={\"column\"}\n gap={1}\n width={\"100%\"}\n className=\"oui-text-sm oui-text-base-contrast-54\"\n py={3}\n >\n {isAlgoOrder && (\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"orders.column.triggerPrice\")}</Text>\n <Text.numeral\n intensity={80}\n dp={props.quote_dp}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n suffix={<Text intensity={54}>{\" USDC\"}</Text>}\n >\n {triggerPrice ?? \"--\"}\n </Text.numeral>\n </Flex>\n )}\n\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.price\")}</Text>\n <Text.numeral\n intensity={80}\n dp={props.quote_dp}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n suffix={<Text intensity={54}>{\" USDC\"}</Text>}\n placeholder={props.isStopMarket ? t(\"common.marketPrice\") : \"--\"}\n >\n {props.isStopMarket ? t(\"common.marketPrice\") : price ?? \"--\"}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.qty\")}</Text>\n <Text.numeral\n color={side === OrderSide.BUY ? \"buy\" : \"sell\"}\n dp={props.base_dp}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n >\n {quantity ?? \"--\"}\n </Text.numeral>\n </Flex>\n </Flex>\n\n <Flex className=\"oui-gap-[2px]\">\n <Checkbox\n color=\"white\"\n id=\"oui-checkbox-disableOrderConfirmation\"\n // className=\"oui-h-[10px] oui-w-[10px]\"\n // size={10}\n checked={!props.orderConfirm}\n onCheckedChange={(e: boolean) => {\n props.setOrderConfirm(!e);\n }}\n />\n <label\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n htmlFor=\"oui-checkbox-disableOrderConfirmation\"\n >\n {t(\"orderEntry.disableOrderConfirm\")}\n </label>\n </Flex>\n </div>\n );\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport {\n useLocalStorage,\n useMaxQty,\n useOrderEntity,\n useThrottledCallback,\n utils,\n} from \"@orderly.network/hooks\";\nimport { API, OrderEntity } from \"@orderly.network/types\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { toast, useModal } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderCellState } from \"../orderCell.script\";\n\nexport const useEditSheetScript = (props: {\n state: OrderCellState;\n editAlgoOrder: (id: string, order: OrderEntity) => Promise<any>;\n editOrder: (id: string, order: OrderEntity) => Promise<any>;\n autoCheckInput?: boolean;\n position?: API.PositionTPSLExt;\n}) => {\n const {\n state,\n editAlgoOrder,\n editOrder,\n autoCheckInput = true,\n position,\n } = props;\n const { item: order } = state;\n const { hide } = useModal();\n const [dialogOpen, setDialogOpen] = useState(false);\n\n const isAlgoOrder =\n order?.algo_order_id !== undefined &&\n order.algo_type !== AlgoOrderRootType.BRACKET;\n const isStopMarket = order?.type === \"MARKET\" && isAlgoOrder;\n const isMarketOrder = isStopMarket || order?.type === \"MARKET\";\n const [submitting, setSubmitting] = useState(false);\n\n const orderType = useMemo(() => {\n if (isAlgoOrder && order.algo_type !== AlgoOrderRootType.BRACKET) {\n return `STOP_${order.type}`;\n }\n\n return order.type;\n }, [order, isAlgoOrder]);\n\n const [orderConfirm, setOrderConfirm] = useLocalStorage(\n \"orderly_order_confirm\",\n true,\n );\n\n const { base_dp, base_tick } = props.state;\n\n const {\n formattedOrder,\n setValue,\n symbolInfo,\n markPrice,\n errors,\n validate,\n maxQty,\n } = useOrderEntry({\n order: order,\n orderType,\n position,\n });\n\n const onSheetConfirm = () => {\n validate()\n .then(\n (result) => {\n if (orderConfirm) {\n setDialogOpen(true);\n } else {\n // @ts-ignore\n onSubmit(formattedOrder);\n }\n },\n (error) => {\n // rejected\n if (error?.total?.message) {\n toast.error(error?.total.message);\n }\n },\n )\n .catch((err) => {});\n };\n\n const onCloseDialog = useCallback(() => {\n setDialogOpen(false);\n }, []);\n\n const onDialogConfirm = () => {\n if (formattedOrder) {\n // @ts-ignore\n return onSubmit(formattedOrder);\n }\n return Promise.reject();\n };\n\n const onClose = useCallback(() => {\n hide();\n }, []);\n\n const onSubmit = useCallback(\n async (values: OrderEntity) => {\n let future;\n const isHidden =\n order.visible_quantity !== undefined\n ? order.visible_quantity === 0\n : (order as any).visible !== undefined\n ? (order as any).visible === 0\n : false;\n\n if (order.order_tag) {\n values.order_tag = order.order_tag;\n }\n\n if (order.client_order_id) {\n values.client_order_id = order.client_order_id;\n }\n\n if (order.algo_order_id !== undefined) {\n if (isStopMarket && \"order_price\" in values) {\n const { order_price, ...rest } = values;\n values = rest;\n }\n future = editAlgoOrder(order.algo_order_id.toString(), {\n ...values,\n });\n } else {\n future = editOrder((order as any).order_id.toString(), {\n ...values,\n ...(isHidden ? { visible_quantity: 0 } : {}),\n });\n }\n try {\n setSubmitting(true);\n\n const res = await future;\n onClose();\n } catch (err: any) {\n toast.error(err?.message ?? `${err}`);\n } finally {\n setSubmitting(false);\n }\n },\n [editAlgoOrder, editOrder],\n );\n\n const sliderValue = useMemo(() => {\n const qty = formattedOrder.order_quantity;\n if (qty && Number(qty) !== 0 && maxQty !== 0) {\n const value = new Decimal(qty)\n .div(maxQty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n return value;\n }\n return 0;\n }, [formattedOrder.order_quantity, maxQty]);\n\n const isChanged =\n order.price != formattedOrder.order_price ||\n order.quantity != formattedOrder.order_quantity ||\n order.trigger_price != formattedOrder.trigger_price;\n\n const setSliderValue = useThrottledCallback(\n (value: number) => {\n const quantity = new Decimal(value)\n .div(100)\n .mul(maxQty)\n .toDecimalPlaces(base_dp, Decimal.ROUND_DOWN)\n .toNumber();\n setValue(\"order_quantity\", utils.formatNumber(quantity, base_tick));\n },\n 50,\n {},\n );\n\n const setOrderValue = (key: any, value: string | number) => {\n setValue(key, value);\n };\n\n return {\n ...state,\n curMarkPrice: markPrice,\n isAlgoOrder,\n isStopMarket,\n price: formattedOrder.order_price,\n setPrice: (value: string) => setOrderValue(\"order_price\", value),\n priceEdit: !isStopMarket,\n triggerPrice: formattedOrder.trigger_price,\n setTriggerPrice: (value: string) => setOrderValue(\"trigger_price\", value),\n quantity: formattedOrder.order_quantity,\n setQuantity: (value: string) => {\n console.trace(\"set quantity\");\n setOrderValue(\"order_quantity\", value);\n },\n maxQty,\n sliderValue,\n setSliderValue,\n onClose: onClose,\n onSheetConfirm: onSheetConfirm,\n errors,\n orderType,\n isChanged,\n baseTick: base_tick,\n\n dialogOpen,\n setDialogOpen,\n onDialogConfirm,\n onCloseDialog,\n submitting,\n\n orderConfirm,\n setOrderConfirm,\n };\n};\n\nexport type EditSheetState = ReturnType<typeof useEditSheetScript>;\n\nconst useOrderEntry = (props: {\n order: API.AlgoOrderExt;\n orderType: string;\n position?: API.PositionTPSLExt;\n}) => {\n const { order, orderType, position } = props;\n\n const [formattedOrder, setFormattedOrder] = useState({\n side: order.side,\n order_type: orderType,\n order_price: order.price,\n order_quantity: order.quantity,\n trigger_price: order.trigger_price,\n reduce_only: order.reduce_only,\n symbol: order.symbol,\n });\n\n const { reduce_only } = order;\n\n const positionQty = position?.position_qty;\n\n const _maxQty = useMaxQty(order.symbol, order.side as any, order.reduce_only);\n\n const maxQty = useMemo(() => {\n if (reduce_only) {\n return Math.abs(positionQty ?? 0);\n }\n return order.quantity + Math.abs(_maxQty);\n }, [order.quantity, _maxQty, reduce_only, positionQty]);\n\n const { symbolInfo, markPrice, errors, validate } = useOrderEntity(\n // @ts-ignore\n {\n ...formattedOrder,\n symbol: order.symbol,\n },\n {\n maxQty,\n },\n );\n\n const setValue = (key: any, value: any) => {\n setFormattedOrder((oldValue) => ({\n ...oldValue,\n [key]: value,\n }));\n };\n\n return {\n symbolInfo,\n markPrice,\n errors,\n validate,\n setValue,\n formattedOrder,\n maxQty,\n };\n};\n","import { API, OrderEntity } from \"@orderly.network/types\";\nimport { OrderCellState } from \"../orderCell.script\";\nimport { useEditSheetScript } from \"./editSheet.script\";\nimport { EditSheet } from \"./editSheet.ui\";\n\nexport const EditSheetWidget = (props: {\n state: OrderCellState;\n editAlgoOrder: (id: string, order: OrderEntity) => Promise<any>;\n editOrder: (id: string, order: OrderEntity) => Promise<any>;\n autoCheckInput?: boolean;\n position?: API.PositionTPSLExt;\n}) => {\n const state = useEditSheetScript(props);\n return <EditSheet {...state} />;\n};\n","import { FC } from \"react\";\nimport { useEditBtnScript } from \"./editBtn.script\";\nimport { EditBtn } from \"./editBtn.ui\";\nimport { OrderCellState } from \"../orderCell.script\";\n\nexport const EditBtnWidget = (props: {\n state : OrderCellState;\n}) => {\n const state = useEditBtnScript(props);\n return (<EditBtn {...state} />);\n};\n","import { API } from \"@orderly.network/types\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { TabType } from \"../../orders.widget\";\nimport { useSymbolContext } from \"../../provider/symbolContext\";\n\nexport const useOrderCellScript = (props: {\n item: API.AlgoOrderExt;\n index: number;\n type: TabType;\n sharePnLConfig?: SharePnLConfig;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}) => {\n const symbolInfo = useSymbolContext();\n return {\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type OrderCellState = ReturnType<typeof useOrderCellScript>;\n","import { API } from \"@orderly.network/types\";\nimport { useOrderCellScript } from \"./orderCell.script\";\nimport { OrderCell } from \"./orderCell.ui\";\nimport { TabType } from \"../../orders.widget\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\n\nexport const OrderCellWidget = (props: {\n item: API.AlgoOrderExt;\n index: number;\n className?: string;\n type: TabType;\n sharePnLConfig?: SharePnLConfig;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}) => {\n const { className, ...rest } = props;\n\n const state = useOrderCellScript(rest);\n return <OrderCell {...state} className={className} />;\n};\n","import { forwardRef } from \"react\";\nimport { OrderSide, OrderStatus, API } from \"@orderly.network/types\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { TabType } from \"../orders.widget\";\nimport { OrderListInstance, useOrderListScript } from \"./orderList.script\";\nimport { DesktopOrderList, MobileOrderList } from \"./orderList.ui\";\n\nexport type DesktopOrderListWidgetProps = {\n type: TabType;\n ordersStatus?: OrderStatus;\n /** if has value, will be fetch current symbol orders*/\n symbol?: string;\n onSymbolChange?: (symbol: API.Symbol) => void;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n testIds?: {\n tableBody?: string;\n };\n};\n\nexport const DesktopOrderListWidget = forwardRef<\n OrderListInstance,\n DesktopOrderListWidgetProps\n>((props, ref) => {\n const { testIds, ...rest } = props;\n const state = useOrderListScript({ ...rest, ref });\n return <DesktopOrderList {...state} testIds={testIds} />;\n});\n\nexport const MobileOrderListWidget = (props: {\n type: TabType;\n ordersStatus?: OrderStatus;\n /** if has value, will be fetch current symbol orders*/\n symbol?: string;\n onSymbolChange?: (symbol: API.Symbol) => void;\n sharePnLConfig?: SharePnLConfig;\n classNames?: {\n root?: string;\n cell?: string;\n content?: string;\n };\n showFilter?: boolean;\n filterConfig?: {\n side?: OrderSide | \"all\";\n range?: {\n from?: Date;\n to?: Date;\n };\n };\n}) => {\n const state = useOrderListScript({\n ...props,\n enableLoadMore: true,\n });\n return (\n <MobileOrderList\n {...state}\n classNames={props.classNames}\n showFilter={props.showFilter}\n />\n );\n};\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n ForwardedRef,\n useImperativeHandle,\n} from \"react\";\nimport { differenceInDays, setHours, subDays, format } from \"date-fns\";\nimport {\n useLocalStorage,\n useOrderStream,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport {\n AlgoOrderRootType,\n OrderStatus,\n OrderSide,\n API,\n} from \"@orderly.network/types\";\nimport { modal, usePagination, Text, Table } from \"@orderly.network/ui\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { areDatesEqual } from \"../../utils/util\";\nimport { TabType } from \"../orders.widget\";\nimport { useFormatOrderHistory } from \"./useFormatOrderHistory\";\n\nexport type OrderListInstance = {\n download?: () => void;\n};\n\nexport type useOrderListScriptOptions = {\n type: TabType;\n ordersStatus?: OrderStatus;\n symbol?: string;\n enableLoadMore?: boolean;\n onSymbolChange?: (symbol: API.Symbol) => void;\n sharePnLConfig?: SharePnLConfig;\n filterConfig?: {\n side?: OrderSide | \"all\";\n range?: {\n from?: Date;\n to?: Date;\n };\n };\n pnlNotionalDecimalPrecision?: number;\n ref?: ForwardedRef<OrderListInstance>;\n};\n\nexport const useOrderListScript = (props: useOrderListScriptOptions) => {\n const {\n ordersStatus,\n type,\n enableLoadMore = false,\n onSymbolChange,\n filterConfig,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n } = props;\n const { t } = useTranslation();\n const symbolsInfo = useSymbolsInfo();\n\n const manualPagination = useMemo(() => {\n // pending and ts_sl list use client pagination\n return ordersStatus !== OrderStatus.INCOMPLETE;\n }, [ordersStatus]);\n\n const defaultPageSize = 50;\n const { page, pageSize, setPage, pagination, parsePagination } =\n usePagination({\n pageSize: defaultPageSize,\n });\n\n // when symbol change, reset page\n useEffect(() => {\n setPage(1);\n }, [props.symbol]);\n\n const {\n orderStatus,\n ordersSide,\n dateRange,\n filterItems,\n onFilter,\n filterDays,\n updateFilterDays,\n } = useFilter(type, {\n ordersStatus,\n setPage,\n filterConfig,\n });\n\n const includes = useMemo(() => {\n if (type === TabType.tp_sl) {\n return [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL];\n }\n return undefined;\n }, [type]);\n\n const excludes = useMemo(() => {\n if (type === TabType.pending) {\n return [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL];\n }\n return undefined;\n }, [type]);\n\n const tableInstance = useRef<Table<any>>();\n\n useImperativeHandle(props.ref, () => ({\n download: () => {\n const filename = `orders_${format(new Date(), \"yyyyMMdd_HHmmss\")}`;\n tableInstance.current?.download(filename);\n },\n }));\n\n const [\n data,\n {\n isLoading,\n loadMore,\n cancelOrder,\n updateOrder,\n cancelAlgoOrder,\n updateAlgoOrder,\n cancelAllOrders,\n cancelAllTPSLOrders,\n meta,\n refresh,\n },\n ] = useOrderStream({\n symbol: props.symbol,\n status: orderStatus,\n side: ordersSide,\n page: enableLoadMore || !manualPagination ? undefined : page,\n // pending and ts_sl list get all data\n size: manualPagination ? pageSize : 500,\n sourceTypeAll: type === TabType.orderHistory,\n dateRange,\n includes,\n excludes,\n });\n\n const localPageSizeKey = `orderly_${type}_pageSize`;\n const [typePageSize, setTypePageSize] = useLocalStorage(\n localPageSizeKey,\n defaultPageSize,\n );\n\n useEffect(() => {\n if (typePageSize !== pageSize) {\n setTypePageSize(pageSize);\n }\n }, [pageSize, typePageSize]);\n\n const onCancelAll = useCallback(() => {\n const title =\n props.type === TabType.pending\n ? t(\"orders.pending.cancelAll\")\n : props.type === TabType.tp_sl\n ? t(\"orders.tpsl.cancelAll\")\n : \"\";\n\n const content = TabType.pending\n ? t(\"orders.pending.cancelAll.description\")\n : props.type === TabType.tp_sl\n ? t(\"orders.tpsl.cancelAll.description\")\n : \"\";\n\n modal.confirm({\n title: title,\n content: <Text size=\"sm\">{content}</Text>,\n onCancel: async () => {},\n onOk: async () => {\n try {\n // await cancelAll(null, { source_type: \"ALL\" });\n if (type === TabType.tp_sl) {\n await cancelAllTPSLOrders();\n } else {\n await cancelAllOrders();\n }\n refresh();\n return Promise.resolve(true);\n } catch (error) {\n // @ts-ignore\n if (error?.message !== undefined) {\n // @ts-ignore\n toast.error(error.message);\n }\n return Promise.resolve(false);\n } finally {\n Promise.resolve();\n }\n },\n });\n }, [type, t]);\n\n const formattedData = useFormatOrderHistory(data ?? []);\n\n const dataSource =\n useDataTap(type !== TabType.tp_sl ? formattedData : data, {\n fallbackData: [],\n }) ?? undefined;\n\n const _pagination = useMemo(() => {\n if (manualPagination) {\n return parsePagination(meta);\n }\n return pagination;\n }, [meta, manualPagination, parsePagination, pagination]);\n\n return {\n type,\n dataSource,\n isLoading,\n loadMore,\n cancelOrder,\n updateOrder,\n cancelAlgoOrder,\n updateAlgoOrder,\n pagination: _pagination,\n manualPagination,\n pnlNotionalDecimalPrecision,\n\n // filter\n onFilter,\n filterItems,\n onCancelAll,\n\n onSymbolChange,\n\n sharePnLConfig,\n tableInstance,\n symbolsInfo,\n filterDays,\n updateFilterDays,\n };\n};\n\nconst useFilter = (\n type: TabType,\n option: {\n ordersStatus?: OrderStatus | \"all\";\n setPage: (page: number) => void;\n filterConfig?: {\n side?: OrderSide | \"all\";\n range?: {\n from?: Date;\n to?: Date;\n };\n };\n },\n) => {\n const { t } = useTranslation();\n const [orderStatus, setOrderStatus] = useState<OrderStatus | \"all\">(\n option.ordersStatus ?? \"all\",\n );\n const [ordersSide, setOrdersSide] = useState<OrderSide | \"all\">(\n option.filterConfig?.side ?? \"all\",\n );\n\n /// default is 90d\n const [filterDays, setFilterDays] = useState<1 | 7 | 30 | 90 | null>(90);\n\n const defaultRange =\n option.filterConfig?.range ??\n (type === TabType.all || type === TabType.orderHistory\n ? formatDatePickerRange({\n to: new Date(),\n from: offsetEndOfDay(subDays(new Date(), 89)),\n })\n : {});\n\n const [dateRange, setDateRange] = useState<{\n from?: Date;\n to?: Date;\n }>(defaultRange);\n\n const updateFilterDays = (days: 1 | 7 | 30 | 90) => {\n setFilterDays(days);\n setDateRange({\n from: offsetStartOfDay(subDays(new Date(), days - 1)),\n to: offsetEndOfDay(new Date()),\n });\n option.setPage(1);\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"side\") {\n setOrdersSide(filter.value);\n option.setPage(1);\n }\n\n if (filter.name === \"status\") {\n setOrderStatus(filter.value);\n option.setPage(1);\n }\n\n if (filter.name === \"dateRange\") {\n setDateRange(formatDatePickerRange(filter.value));\n option.setPage(1);\n\n const newDateRange = formatDatePickerRange(filter.value);\n if (newDateRange.from && newDateRange.to) {\n const diffDays =\n Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) + 1;\n const dateRangeMap: { [key: number]: { from: Date; to: Date } } = {\n 1: {\n from: offsetStartOfDay(new Date())!,\n to: offsetEndOfDay(new Date())!,\n },\n 7: {\n from: offsetStartOfDay(subDays(new Date(), 6))!,\n to: offsetEndOfDay(new Date())!,\n },\n 30: {\n from: offsetStartOfDay(subDays(new Date(), 29))!,\n to: offsetEndOfDay(new Date())!,\n },\n 90: {\n from: offsetStartOfDay(subDays(new Date(), 89))!,\n to: offsetEndOfDay(new Date())!,\n },\n };\n\n const dateRange = dateRangeMap[diffDays];\n if (\n dateRange &&\n areDatesEqual(dateRange.from, newDateRange.from) &&\n areDatesEqual(dateRange.to, newDateRange.to)\n ) {\n setFilterDays(diffDays as any);\n } else {\n setFilterDays(null);\n }\n }\n }\n };\n\n const filterItems = useMemo((): any[] => {\n const sideFilter = {\n type: \"select\",\n name: \"side\",\n options: [\n {\n label: t(\"common.side.all\"),\n value: \"all\",\n },\n {\n label: t(\"common.buy\"),\n value: \"BUY\",\n },\n {\n label: t(\"common.sell\"),\n value: \"SELL\",\n },\n ],\n value: ordersSide,\n };\n\n const dateRangeFilter = {\n type: \"range\",\n name: \"dateRange\",\n value: dateRange,\n };\n\n const statusFilter = {\n type: \"select\",\n name: \"status\",\n options: [\n {\n label: t(\"common.status.all\"),\n value: \"all\",\n },\n {\n label: t(\"orders.status.pending\"),\n value: OrderStatus.INCOMPLETE,\n },\n {\n label: t(\"orders.status.filled\"),\n value: OrderStatus.FILLED,\n },\n {\n label: t(\"orders.status.partialFilled\"),\n value: OrderStatus.PARTIAL_FILLED,\n },\n {\n label: t(\"orders.status.canceled\"),\n value: OrderStatus.CANCELLED,\n },\n {\n label: t(\"orders.status.rejected\"),\n value: OrderStatus.REJECTED,\n },\n ],\n value: orderStatus,\n };\n switch (type) {\n case TabType.all:\n return [sideFilter, statusFilter, dateRangeFilter];\n case TabType.pending:\n return [sideFilter];\n case TabType.tp_sl:\n return [sideFilter];\n case TabType.filled:\n return [sideFilter];\n case TabType.cancelled:\n return [sideFilter];\n case TabType.rejected:\n return [sideFilter];\n case TabType.orderHistory:\n return [sideFilter, statusFilter, dateRangeFilter];\n }\n }, [type, ordersSide, orderStatus, dateRange, t]);\n\n return {\n filterItems,\n onFilter,\n ordersSide: ordersSide === \"all\" ? undefined : ordersSide,\n dateRange,\n orderStatus: orderStatus === \"all\" ? undefined : orderStatus,\n filterDays,\n updateFilterDays,\n };\n};\n\nexport type OrdersBuilderState = ReturnType<typeof useOrderListScript>;\nexport type FilterState = ReturnType<typeof useFilter>;\n\nexport const parseDateRangeForFilter = (dateRange: {\n from: Date;\n to?: Date;\n}) => {\n let { from, to } = dateRange;\n\n if (typeof to === \"undefined\") {\n to = new Date();\n }\n\n const diff = differenceInDays(from, to);\n\n // console.log(\"diff\", diff);\n\n if (diff === 0) {\n return [from, setHours(to, 23)];\n }\n\n return [from, to];\n};\n\nfunction offsetStartOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(0, 0, 0, 0);\n return newDate;\n}\n\nfunction offsetEndOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(23, 59, 59, 999);\n return newDate;\n}\n\nexport const formatDatePickerRange = (option: { from?: Date; to?: Date }) => ({\n from: offsetStartOfDay(option.from),\n to: offsetEndOfDay(option.to ?? option.from),\n});\n","import { useMemo } from \"react\";\nimport { API, AlgoOrderRootType, OrderStatus } from \"@orderly.network/types\";\n\nexport const useFormatOrderHistory = (data: API.AlgoOrderExt[]) => {\n const formattedData = useMemo(() => {\n const _data = [];\n\n for (let index = 0; index < data.length; index++) {\n const element = data[index];\n // console.log(\"element\", element);\n if (\n element.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL ||\n element.algo_type === AlgoOrderRootType.TP_SL\n ) {\n if (\n element.algo_status !== OrderStatus.FILLED &&\n element.algo_status !== OrderStatus.PARTIAL_FILLED\n ) {\n for (let j = 0; j < element.child_orders.length; j++) {\n const e = element.child_orders[j];\n if (!e.is_activated || !e.trigger_price) {\n continue;\n }\n (e as any).parent_algo_type = element.algo_type;\n _data.push(e);\n }\n } else {\n // if order is filled then show only the filled order\n for (let j = 0; j < element.child_orders.length; j++) {\n const e = element.child_orders[j];\n if (\n !!e &&\n (e.algo_status === OrderStatus.FILLED ||\n e.algo_status === OrderStatus.PARTIAL_FILLED)\n ) {\n (e as any).parent_algo_type = element.algo_type;\n _data.push(e);\n }\n }\n }\n } else {\n _data.push(element);\n }\n }\n\n return _data;\n\n // data.map((item) => {});\n }, [data]);\n\n return formattedData;\n};\n"]}
|