@orderly.network/ui-orders 2.0.1-alpha.6 → 2.0.1-preview.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/orders.script.ts","../src/components/orders.ui.tsx","../src/components/orderList/orderList.ui.tsx","../src/utils/util.ts","../src/components/orderList/symbolProvider.tsx","../src/components/orderList/orderListContext.tsx","../src/components/orderList/tpslOrderRowContext.tsx","../src/components/orderList/desktop/useColumn.tsx","../src/components/orderList/desktop/quantity.tsx","../src/components/orderList/desktop/editOrder/confirmContent.tsx","../src/components/orderList/desktop/editOrder/innerInput.tsx","../src/components/orderList/desktop/price.tsx","../src/components/orderList/desktop/triggerPrice.tsx","../src/components/orderList/desktop/cancelBtn.tsx","../src/components/orderList/desktop/renew.tsx","../src/components/orderList/desktop/tpslTriggerPrice.tsx","../src/components/orderList/desktop/bracketOrderPrice.tsx","../src/components/orderList/desktop/tpslEdit.tsx","../src/components/orderList/desktop/tpslPrice.tsx","../src/components/orderList/mobile/orderCell.ui.tsx","../src/components/orderList/mobile/items.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/cancelBtn/cancelBtn.ui.tsx","../src/components/orderList/mobile/cancelBtn/cancelBtn.script.tsx","../src/components/orderList/mobile/cancelBtn/cancelBtn.widget.tsx","../src/components/orderList/mobile/bracketOrderPrice/bracketOrderPrice.ui.tsx","../src/components/orderList/mobile/bracketOrderPrice/bracketOrderPrice.script.tsx","../src/components/orderList/mobile/bracketOrderPrice/bracketOrderPrice.widget.tsx","../src/components/orderList/mobile/orderCell.script.tsx","../src/components/orderList/mobile/orderCell.widget.tsx","../src/components/orderList/orderList.script.tsx","../src/components/orderList/useFormatOrderHistory.ts","../src/components/orderList/orderList.widget.tsx","../src/components/orders.widget.tsx"],"names":["useOrdersScript","props","current","pnlNotionalDecimalPrecision","TabPanel","Tabs","OrderStatus","Flex","ListView","Button","Grid","Picker","DataFilter","cn","AuthGuardTableView","utils","OrderSide","AlgoOrderRootType","AlgoOrderType","OrderType","upperCaseFirstLetter","str","parseBadgesFor","record","list","types","e","type","tpOrder","order","slOrder","grayCell","findBracketTPSLOrder","innerOrder","item","calcBracketRoiAndPnL","defaultCallback","quantity","tpPnL","slPnL","tpRoi","slRoi","createContext","useContext","useSymbolsInfo","jsx","SymbolContext","useSymbolContext","SymbolProvider","symbolInfo","modal","useCallback","checkNotional","Fragment","OrderListContext","useOrderListContext","OrderListProvider","cancelOrder","editOrder","cancelAlgoOrder","editAlgoOrder","onCancelOrder","onEditOrder","position","isHidden","orderEntry","checkMinNotional","symbol","price","qty","min_notional","useEffect","useMemo","useState","unstable_serialize","useAccount","useMutation","useSWRConfig","TPSLOrderRowContext","useTPSLOrderRowContext","TPSLOrderRowProvider","quote_dp","setPosition","doDeleteOrder","doUpdateOrder","config","state","positionKey","onUpdateOrder","params","getRelatedPosition","p","sl_trigger_price","tp_trigger_price","calcTPSLPnL","avgOpenPrice","Text","commifyOptional","Decimal","Badge","useRef","Popover","toast","Slider","PopoverTrigger","PopoverRoot","PopoverContent","CloseIcon","ThrottledButton","commify","jsxs","ConfirmContent","base","value","cancelPopover","isSubmitting","onConfirm","label","CheckIcon","Input","inputFormatter","Tooltip","InnerInput","inputRef","dp","setValue","setEditing","error","handleKeyDown","onClick","onClose","onFocus","onBlur","hintInfo","input","length","open","useMaxQty","OrderQuantity","otherOrderQuantity","reduce_only","originSetQuantity","editing","setQuantity","setOpen","setError","onUpdateTPSLOrder","base_dp","base_tick","maxQty","positionQty","closePopover","setIsSubmitting","clickHandler","notionalText","event","order_price","rest","future","result","err","componentRef","quantitySliderRef","handleClickOutside","trigger","NormalState","EditState","executed","confirmOpen","side","sliderValue","setSliderValue","formatQuantity","_qty","values","Buttons","index","useSymbolPriceRange","Price","setPrice","isAlgoOrder","isStopMarket","rangeInfo","order_id","data","TriggerPrice","isBracketOrder","quote_max","quote_min","CancelButton","isLoading","setIsLoading","res","useConfig","Renew","doCreateOrder","reset","isMutating","brokerId","onSubmit","OrderTriggerPrice","TPSLTriggerPrice","direction","pnl","msgs","TriggerPriceItem","child","children","content","entryPrice","orderSide","orderType","BracketOrderPrice","roi","PositionTPSLPopover","TP_SLEditButton","TPSLOrderPrice","useOrderColumn","_type","onSymbolChange","instrument","fillAndQuantity","avgOpen","tpslTriggerPrice","realizedPnL","estTotal","fee","status","reduceOnly","hidden","cancelBtn","triggerPrice","bracketOrderPrice","orderTime","pendingTabCancelBtn","tpslPrice","tpslNotional","tpslAction","avgPrice","option","r1","r2","showGray","a","b","aQuantity","bQuantity","compareNumbers","aTotal","bTotal","_value","_","Divider","Statistic","SymbolToken","isBuy","OrderTypeView","OrderTime","OrderState","Qty","isEntirePosition","Filled","EstTotal","MarkPrice","LimitPrice","TPTrigger","MobileTooltip","SLTrigger","TPPrice","SLPrice","TPSLQuantity","AvgPrice","OrderPrice","RealizedPnL","classNames","EditBtn","SimpleDialog","Checkbox","ConfirmDialogContent","EditSheet","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","PositionTPSLSheet","useEditBtnScript","onShowEditSheet","EditBtnWidget","CancelBtn","useCancelBtnScript","CancelBtnWidget","useBracketOrderPriceScript","BracketOrderPriceWidget","OrderCell","Header","Body","Btns","itemsWithType","useOrderCellScript","OrderCellWidget","className","DesktopOrderList","columns","CancelAll","MobileOrderList","useOrderStream","useDataTap","usePagination","differenceInDays","setHours","subDays","useFormatOrderHistory","_data","element","j","useOrderListScript","ordersStatus","enableLoadMore","filterConfig","manualPagination","defaultPageSize","page","pageSize","setPage","setPageSize","parseMeta","orderStatus","ordersSide","dateRange","filterItems","onFilter","useFilter","includes","excludes","loadMore","updateOrder","updateAlgoOrder","cancelAllOrders","cancelAllTPSLOrders","meta","refresh","localPageSizeKey","typePageSize","setTypePageSize","onCancelAll","title","formattedData","dataSource","pagination","_meta","setOrderStatus","setOrdersSide","defaultRange","formatDatePickerRange","offsetEndOfDay","setDateRange","filter","sideFilter","dateRangeFilter","statusFilter","offsetStartOfDay","date","newDate","DesktopOrderListWidget","MobileOrderListWidget","Orders","TabType","OrdersWidget"],"mappings":"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","sourcesContent":["import { useState } from \"react\";\nimport {\n AlgoOrderRootType,\n OrderStatus,\n OrderSide,\n} from \"@orderly.network/types\";\nimport { useOrderStream } from \"@orderly.network/hooks\";\nimport { TabType } from \"./orders.widget\";\n\nexport const useOrdersScript = (props: {\n current?: TabType;\n pnlNotionalDecimalPrecision?: number;\n}) => {\n const { current, pnlNotionalDecimalPrecision } = props;\n return {\n current,\n pnlNotionalDecimalPrecision,\n };\n};\n\nexport type OrdersBuilderState = ReturnType<typeof useOrdersScript>;\n","import { TabPanel, Tabs } from \"@orderly.network/ui\";\nimport { OrderStatus, API } from \"@orderly.network/types\";\nimport { OrdersBuilderState } from \"./orders.script\";\nimport { TabType } from \"./orders.widget\";\nimport { DesktopOrderListWidget } from \"./orderList\";\n\nexport const Orders = (props: OrdersBuilderState) => {\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=\"All\">\n <DesktopOrderListWidget\n type={TabType.all}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n />\n </TabPanel>\n <TabPanel value={TabType.pending} title=\"Pending\">\n <DesktopOrderListWidget\n type={TabType.pending}\n ordersStatus={OrderStatus.INCOMPLETE}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n />\n </TabPanel>\n <TabPanel value={TabType.tp_sl} title=\"TP/SL\">\n <DesktopOrderListWidget\n type={TabType.tp_sl}\n ordersStatus={OrderStatus.INCOMPLETE}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n />\n </TabPanel>\n <TabPanel value={TabType.filled} title=\"Filled\">\n <DesktopOrderListWidget\n type={TabType.filled}\n ordersStatus={OrderStatus.FILLED}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n />\n </TabPanel>\n <TabPanel value={TabType.cancelled} title=\"Cancelled\">\n <DesktopOrderListWidget\n type={TabType.cancelled}\n ordersStatus={OrderStatus.CANCELLED}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n />\n </TabPanel>\n <TabPanel value={TabType.rejected} title=\"Rejected\">\n <DesktopOrderListWidget\n type={TabType.rejected}\n ordersStatus={OrderStatus.REJECTED}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n />\n </TabPanel>\n {/* <TabPanel value={TabType.orderHistory} title=\"Order history\">\n <DesktopOrderListWidget\n type={TabType.orderHistory}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n />\n </TabPanel> */}\n </Tabs>\n );\n};\n// ----------------- Orders ui component end -----------------\n","import { FC } from \"react\";\nimport {\n Flex,\n Pagination,\n Filter,\n ListView,\n Button,\n Grid,\n Picker,\n DataFilter,\n cn,\n} from \"@orderly.network/ui\";\nimport { OrdersBuilderState } from \"./orderList.script\";\nimport { AuthGuardTableView } from \"@orderly.network/ui-connector\";\nimport { grayCell } from \"../../utils/util\";\nimport { SymbolProvider } from \"./symbolProvider\";\nimport { OrderListProvider } from \"./orderListContext\";\nimport { TabType } from \"../orders.widget\";\nimport { TPSLOrderRowProvider } from \"./tpslOrderRowContext\";\nimport { useOrderColumn } from \"./desktop/useColumn\";\nimport { OrderCellWidget } from \"./mobile\";\n\nexport const DesktopOrderList: FC<OrdersBuilderState> = (props) => {\n const columns = useOrderColumn({\n _type: props.type,\n onSymbolChange: props.onSymbolChange,\n pnlNotionalDecimalPrecision: props.pnlNotionalDecimalPrecision,\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 {/* <Divider className=\"oui-w-full\" /> */}\n {props.filterItems.length > 0 && (\n <DataFilter\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n // className=\"oui-px-3\"\n trailing={\n [TabType.pending, TabType.tp_sl].includes(props.type) && (\n <CancelAll {...props} />\n )\n }\n />\n )}\n <AuthGuardTableView\n columns={columns}\n loading={props.isLoading}\n dataSource={props.dataSource}\n bordered\n ignoreLoadingCheck={true}\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 />\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 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-grid-rows-[auto,1fr] oui-w-full\"\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-bg-base-9 oui-rounded-b-xl\">\n {props.filterItems.map((item) => {\n // not support range type\n if (item.type !== \"select\") return <></>;\n return (\n <Picker\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 ? \"All sides\"\n : item.name === \"status\"\n ? \"All status\"\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 />\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 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 >\n Cancel all\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\";\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\nexport function parseBadgesFor(record: any): undefined | string[] {\n if (typeof record.type !== \"undefined\") {\n const list = new Array<string>();\n\n if (!!record.parent_algo_type) {\n if (record.algo_type === AlgoOrderType.STOP_LOSS) {\n const types =\n record.type === OrderType.CLOSE_POSITION\n ? [\"Position\", \"SL\"]\n : [\"SL\"];\n list.push(...types);\n }\n\n if (record.algo_type === AlgoOrderType.TAKE_PROFIT) {\n const types =\n record.type === OrderType.CLOSE_POSITION\n ? [\"Position\", \"TP\"]\n : [\"TP\"];\n list.push(...types);\n }\n\n return list;\n }\n\n const types = (\n typeof record.type === \"string\"\n ? [record.type.replace(\"_ORDER\", \"\").toLowerCase() as string]\n : [record.type as string]\n ).map((e) => upperCaseFirstLetter(e));\n\n const type =\n typeof record.type === \"string\"\n ? record.type.replace(\"_ORDER\", \"\").toLowerCase()\n : upperCaseFirstLetter(record.type);\n\n if (record.algo_order_id === undefined || (record.algo_order_id && record.algo_type === 'BRACKET')) return [upperCaseFirstLetter(type)];\n return [`Stop ${type}`]\n }\n\n if (typeof record.algo_type !== \"undefined\") {\n const list = new Array<string>();\n\n if (record.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n list.push(\"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(tpOrder && slOrder ? \"TP/SL\" : tpOrder ? \"TP\" : \"SL\");\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 \n\n const quantity = 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","import React, {\n FC,\n PropsWithChildren,\n createContext,\n useMemo,\n useContext,\n} from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\n\ninterface SymbolContextState {\n base_dp: number;\n quote_dp: number;\n base_tick: number;\n quote_tick: number;\n base: string;\n quote: string;\n symbol: string;\n origin: API.SymbolExt;\n quote_min: number;\n quote_max: number;\n}\n\nexport const SymbolContext = createContext({} as SymbolContextState);\n\nexport const useSymbolContext = () => {\n return useContext(SymbolContext);\n};\n\ninterface FormatterProviderProps {\n symbol: string;\n}\n\nexport const SymbolProvider: FC<PropsWithChildren<FormatterProviderProps>> = (\n props\n) => {\n const symbolInfo = useSymbolsInfo()[props.symbol];\n\n return (\n <SymbolContext.Provider\n value={{\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n base_tick: symbolInfo(\"base_tick\"),\n quote_tick: symbolInfo(\"quote_tick\"),\n base: symbolInfo(\"base\"),\n quote: symbolInfo(\"quote\"),\n symbol: props.symbol,\n origin: symbolInfo(),\n quote_max: symbolInfo(\"quote_max\"),\n quote_min: symbolInfo(\"quote_min\")\n }}\n >\n {props.children}\n </SymbolContext.Provider>\n );\n};\n","import { modal } from \"@orderly.network/ui\";\nimport { API, OrderEntity } from \"@orderly.network/types\";\nimport { FC, PropsWithChildren, createContext, useCallback, useContext } from \"react\";\n\nimport { checkNotional, useSymbolsInfo } from \"@orderly.network/hooks\";\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 symbolInfo = useSymbolsInfo();\n const onCancelOrder = useCallback(\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\n const onEditOrder = useCallback(\n async (order: API.Order | API.AlgoOrder, position?: API.Position) => {\n // @ts-ignore\n let 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 const orderEntry = await modal.sheet({\n title: \"Edit Order\",\n classNames: {\n content: \"oui-edit-order-sheet-content\",\n },\n content: (\n // <OrderEditFormSheet\n // order={order}\n // position={position}\n // editOrder={(value: OrderEntity) => {\n // /// check order has order_tag, if exits add order_tag to request body\n // if (\n // typeof order.order_tag !== undefined &&\n // order.reduce_only !== true\n // ) {\n // value = { ...value, order_tag: order.order_tag };\n // }\n // if (order.algo_order_id !== undefined) {\n // return editAlgoOrder(order.algo_order_id.toString(), {\n // ...value,\n // });\n // }\n // return editOrder((order as any).order_id.toString(), {\n // ...value,\n // ...(isHidden ? { visible_quantity: 0 } : {}),\n // });\n // }}\n // />\n <>Content</>\n ),\n });\n },\n []\n );\n\n const checkMinNotional = useCallback(\n (symbol: string, price?: string | number, qty?: string | number) => {\n const { min_notional } = symbolInfo[symbol]();\n return checkNotional(price, qty, min_notional);\n },\n [symbolInfo]\n );\n\n return (\n <OrderListContext.Provider\n value={{\n onCancelOrder,\n onEditOrder,\n editOrder,\n editAlgoOrder,\n checkMinNotional,\n }}\n >\n {props.children}\n </OrderListContext.Provider>\n );\n};\n","import {\n createContext,\n FC,\n PropsWithChildren,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport {\n unstable_serialize,\n useAccount,\n useMutation,\n useSWRConfig,\n utils,\n} from \"@orderly.network/hooks\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport { useSymbolContext } from \"./symbolProvider\";\n\nexport type TPSLOrderRowContextState = {\n order: API.AlgoOrderExt;\n tp_trigger_price?: number;\n sl_trigger_price?: number;\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(\n {} as TPSLOrderRowContextState\n);\n\nexport const useTPSLOrderRowContext = () => {\n return useContext(TPSLOrderRowContext);\n};\n\nexport const TPSLOrderRowProvider: FC<\n PropsWithChildren<{\n order: API.AlgoOrderExt;\n }>\n> = (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 = 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 = async (order: API.AlgoOrderExt, params: any) => {\n console.log(\"onUpdateOrder\", order, position);\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 const getRelatedPosition = (\n symbol: string\n ): API.PositionTPSLExt | undefined => {\n const positions = config.cache.get(positionKey);\n\n return positions?.data.rows.find(\n (p: API.PositionTPSLExt) => p.symbol === symbol\n );\n };\n\n // const { sl_trigger_price, tp_trigger_price } = useMemo(() => {\n // if (\n // !(\"algo_type\" in props.order) ||\n // !Array.isArray(props.order.child_orders)\n // ) {\n // return {};\n // }\n // return utils.findTPSLFromOrder(props.order);\n // }, [props.order]);\n\n const { sl_trigger_price, tp_trigger_price, tpPnL, slPnL } = calcTPSLPnL({\n order: props.order,\n position,\n quote_dp,\n });\n\n useEffect(() => {\n if (\"algo_type\" in props.order || ((props.order as any)?.reduce_only ?? false)) {\n const position = getRelatedPosition(props.order.symbol);\n if (position) {\n setPosition(position);\n }\n }\n }, [props.order.symbol]);\n\n return (\n <TPSLOrderRowContext.Provider\n value={{\n order: props.order,\n sl_trigger_price,\n tp_trigger_price,\n tpPnL,\n slPnL,\n onCancelOrder,\n onUpdateOrder,\n getRelatedPosition,\n position,\n }}\n >\n {props.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 { sl_trigger_price, tp_trigger_price } =\n !(\"algo_type\" in order) || !Array.isArray(order.child_orders)\n ? {}\n : utils.findTPSLFromOrder(order);\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 slPnL,\n tpPnL,\n };\n}\n","import {\n AlgoOrderRootType,\n AlgoOrderType,\n API,\n OrderSide,\n OrderStatus,\n OrderType,\n} from \"@orderly.network/types\";\nimport {\n capitalizeFirstLetter,\n cn,\n TableColumn,\n Flex,\n Text,\n} from \"@orderly.network/ui\";\nimport { commifyOptional, Decimal } from \"@orderly.network/utils\";\nimport {\n grayCell,\n parseBadgesFor,\n upperCaseFirstLetter,\n} from \"../../../utils/util\";\nimport { TabType } from \"../../orders.widget\";\nimport { Badge } from \"@orderly.network/ui\";\nimport { OrderQuantity } from \"./quantity\";\nimport { Price } from \"./price\";\nimport { TriggerPrice } from \"./triggerPrice\";\nimport { CancelButton } from \"./cancelBtn\";\nimport { Renew } from \"./renew\";\nimport { OrderTriggerPrice, TPSLTriggerPrice } from \"./tpslTriggerPrice\";\nimport { BracketOrderPrice } from \"./bracketOrderPrice\";\nimport { TP_SLEditButton } from \"./tpslEdit\";\nimport { TPSLOrderPrice } from \"./tpslPrice\";\nimport { useMemo } from \"react\";\nimport { useSymbolContext } from \"../symbolProvider\";\n\nexport const useOrderColumn = (props: {\n _type: TabType;\n onSymbolChange?: (symbol: API.Symbol) => void;\n pnlNotionalDecimalPrecision?: number;\n}) => {\n const { _type, onSymbolChange, pnlNotionalDecimalPrecision } = props;\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: \"Order price\",\n disableEdit: true,\n enableSort: false,\n }),\n avgOpen({ width: 130, enableSort: false }),\n tpslTriggerPrice({ width: 130 }),\n realizedPnL({\n width: 124,\n pnlNotionalDecimalPrecision: pnlNotionalDecimalPrecision,\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 ];\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 }),\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: \"Order price\",\n disableEdit: true,\n }),\n avgPrice({ width: 124 }),\n triggerPrice({ width: 124, disableEdit: true }),\n realizedPnL({\n width: 124,\n pnlNotionalDecimalPrecision: pnlNotionalDecimalPrecision,\n }),\n estTotal({ width: 124 }),\n fee({ width: 124 }),\n status({ width: 124 }),\n reduceOnly({ width: 124 }),\n hidden({ width: 124 }),\n orderTime({ width: 124 }),\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: 124 }),\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 }),\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]);\n\n return columns as TableColumn[];\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}): TableColumn<API.Order> {\n return {\n title: \"Instrument\",\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 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 >\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}): TableColumn<API.Order> {\n return {\n title: \"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 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}): TableColumn<API.Order> {\n return {\n title: \"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}): TableColumn<API.AlgoOrderExt> {\n return {\n title: \"Filled / 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 render: (value: string, record: any) => {\n if (\n record.type === OrderType.CLOSE_POSITION &&\n record.status !== OrderStatus.FILLED\n ) {\n return \"Entire position\";\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}): TableColumn<API.AlgoOrderExt> {\n return {\n title: \"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 render: (value: string, record: any) => {\n if (record.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n return \"Entire position\";\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}): TableColumn<API.Order> {\n return {\n title: option?.title ?? \"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 // if (type == \"asc\") {\n // return compareNumbers(a.price ?? 0, b.price ?? 0);\n // }\n // return compareNumbers(b.price ?? 0, a.price ?? 0);\n }\n : undefined,\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}): TableColumn<API.Order> {\n return {\n title: option?.title ?? \"Price\",\n dataIndex: \"price\",\n className: option?.className,\n width: option?.width,\n onSort: option?.enableSort,\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}): TableColumn<API.Order> {\n return {\n title: \"Avg. price\",\n dataIndex: \"average_executed_price\",\n className: option?.className,\n width: option?.width,\n onSort: option?.enableSort,\n render: (value: string, record: any) => {\n // console.log(\"average_executed_price\", record.average_executed_price);\n\n return <Text>{commifyOptional(value)}</Text>;\n },\n };\n}\n\nfunction triggerPrice(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n disableEdit?: boolean;\n}): TableColumn<API.Order> {\n return {\n title: \"Trigger\",\n className: option?.className,\n dataIndex: \"trigger_price\",\n width: option?.width,\n onSort: option?.enableSort,\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}): TableColumn<API.Order> {\n return {\n title: option?.title ?? \"Trigger\",\n className: option?.className,\n dataIndex: \"tpsl_trigger_price\",\n width: option?.width,\n onSort: option?.enableSort,\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: \"TP/SL\",\n className: option?.className,\n dataIndex: \"bracketOrderPrice\",\n width: option?.width,\n onSort: option?.enableSort,\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}): TableColumn<API.Order> {\n return {\n title: \"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 render: (value: string, record: any) => {\n if (option?.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 <Text.numeral rm={Decimal.ROUND_DOWN}>{value()}</Text.numeral>;\n }\n\n if (\n record.type === OrderType.CLOSE_POSITION &&\n record.status !== OrderStatus.FILLED\n ) {\n return \"Entire position\";\n }\n\n return (\n <Text.numeral rm={Decimal.ROUND_DOWN} dp={2}>\n {record.total_executed_quantity === 0 ||\n Number.isNaN(record.average_executed_price) ||\n record.average_executed_price === null\n ? \"--\"\n : `${\n record.total_executed_quantity * record.average_executed_price\n }`}\n </Text.numeral>\n );\n },\n };\n}\n\nfunction realizedPnL(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n pnlNotionalDecimalPrecision?: number;\n}): TableColumn<API.Order> {\n return {\n title: \"Real. PnL\",\n dataIndex: \"realized_pnl\",\n width: option?.width,\n className: option?.className,\n render: (_value: number | undefined) => {\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 return (\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 );\n },\n };\n}\n\nfunction reduceOnly(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): TableColumn<API.Order> {\n return {\n title: \"Reduce only\",\n dataIndex: \"reduce_only\",\n width: option?.width,\n className: option?.className,\n render: (value: boolean) => {\n return <Text>{value ? \"Yes\" : \"No\"}</Text>;\n },\n };\n}\n\nfunction hidden(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): TableColumn<API.Order> {\n return {\n title: \"Hidden\",\n dataIndex: \"visible\",\n width: option?.width,\n className: option?.className,\n render: (value: number, record) => {\n return <Text>{record.visible_quantity !== 0 ? \"No\" : \"Yes\"}</Text>;\n },\n };\n}\n\nfunction orderTime(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n formatString?: string;\n}): TableColumn<API.Order> {\n return {\n title: \"Order time\",\n dataIndex: \"created_time\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\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}): TableColumn<API.Order> {\n return {\n title: \"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}): TableColumn<API.Order> {\n return {\n title: \"Notional\",\n dataIndex: \"notional\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\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}): TableColumn<API.Order> {\n return {\n title: \"Notional\",\n dataIndex: \"executed\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\n render: (value: any, record: any) => {\n if (record.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n return \"Entire position\";\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}): TableColumn<API.Order> {\n return {\n title: \"Status\",\n dataIndex: \"status\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\n render: (value: string, record: any) => {\n const status = value || record.algo_status;\n\n if (status === \"NEW\") {\n return upperCaseFirstLetter(\"pending\");\n }\n return upperCaseFirstLetter(status);\n },\n };\n}\n\nfunction avgOpen(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): TableColumn<API.Order> {\n return {\n title: \"Avg. open\",\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 // if (type == \"asc\") {\n // return compareNumbers(\n // a.average_executed_price ?? 0,\n // b.average_executed_price ?? 0\n // );\n // }\n // return compareNumbers(\n // b.average_executed_price ?? 0,\n // a.average_executed_price ?? 0\n // );\n }\n : undefined,\n className: option?.className,\n render: (value: string, record) => (\n <Text.numeral className=\"oui-break-normal oui-whitespace-nowrap oui-font-semibold\">\n {record.average_executed_price}\n </Text.numeral>\n ),\n };\n}\n\nfunction cancelBtn(option?: {\n width?: number;\n className?: string;\n}): TableColumn<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}): TableColumn<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}): TableColumn<API.Order> {\n return {\n title: \"\",\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","import {\n FC,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\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 { ConfirmContent, EditType } from \"./editOrder/confirmContent\";\nimport { InnerInput } from \"./editOrder/innerInput\";\nimport { useOrderListContext } from \"../orderListContext\";\nimport { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\nimport { useSymbolContext } from \"../symbolProvider\";\nimport { grayCell } from \"../../../utils/util\";\nimport { useMaxQty, useOrderEntry, utils } from \"@orderly.network/hooks\";\nimport { commifyOptional, Decimal } from \"@orderly.network/utils\";\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\n const [quantity, originSetQuantity] = useState<string>(\n order.quantity.toString()\n );\n\n const [editing, setEditing] = useState(false);\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 `Quantity should be less than position quantity : ${positionQty}`\n );\n } else {\n const quantity = Number(qty);\n if (maxQty && quantity > maxQty) {\n setError(\n `Quantity should be less than ${commifyOptional(maxQty, {\n fix: base_dp,\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 list = [\n {\n label: \"0%\",\n value: 0,\n },\n {\n label: \"25%\",\n value: 0.25,\n },\n {\n label: \"50%\",\n value: 0.5,\n },\n {\n label: \"75%\",\n value: 0.75,\n },\n {\n label: \"Max\",\n value: 1,\n },\n ];\n\n return (\n <Flex gap={2} width={\"100%\"}>\n {list.map((item, index) => {\n return (\n <Button\n key={index}\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n onClick={(e) => {\n e.stopPropagation();\n 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 { Button, CloseIcon, ThrottledButton } from \"@orderly.network/ui\";\nimport { commify } from \"@orderly.network/utils\";\nimport { FC, useMemo } from \"react\";\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\n const label = useMemo(() => {\n switch (type) {\n case EditType.quantity:\n return `You agree changing the quantity of ${base}-PERP order to${\" \"}`;\n case EditType.price:\n return `You agree changing the price of ${base}-PERP order to${\" \"}`;\n case EditType.triggerPrice:\n return `You agree changing the trigger price of ${base}-PERP order to${\" \"}`;\n }\n }, [type]);\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 {label}\n <span className=\"oui-text-warning-darken\">{commify(value)}</span>.\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 Cancel\n </Button>\n <ThrottledButton size={\"md\"} loading={isSubmitting} onClick={onConfirm}>\n 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={18} />\n </button>\n </div>\n );\n};\n","import {\n CheckIcon,\n CloseIcon,\n cn,\n Input,\n inputFormatter,\n Tooltip,\n} 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 { API } from \"@orderly.network/types\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport {\n FC,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useSymbolPriceRange } from \"@orderly.network/hooks\";\nimport { cn, Flex, Popover, toast, Text } from \"@orderly.network/ui\";\n\nimport { ConfirmContent, EditType } from \"./editOrder/confirmContent\";\nimport { InnerInput } from \"./editOrder/innerInput\";\nimport { useOrderListContext } from \"../orderListContext\";\nimport { useSymbolContext } from \"../symbolProvider\";\nimport { grayCell } from \"../../../utils/util\";\n\nexport const Price = (props: {\n order: API.OrderExt;\n disableEdit?: boolean;\n}) => {\n const { order } = props;\n\n const [price, setPrice] = useState<string>(\n 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 // console.log(\"price node\", order);\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 `Price can not be greater than ${rangeInfo.max} USDC.`;\n }\n if (Number(price) < rangeInfo.min) {\n return `Price can not be less than ${rangeInfo.min} USDC.`;\n }\n return \"\";\n }, [isStopMarket, editing, rangeInfo, price]);\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>Market</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 { API } from \"@orderly.network/types\";\nimport { FC, useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn, Flex, Popover, toast, Text } from \"@orderly.network/ui\";\n\nimport { ConfirmContent, EditType } from \"./editOrder/confirmContent\";\nimport { InnerInput } from \"./editOrder/innerInput\";\nimport { useOrderListContext } from \"../orderListContext\";\nimport { useSymbolContext } from \"../symbolProvider\";\nimport { grayCell } from \"../../../utils/util\";\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 { API } from \"@orderly.network/types\";\nimport { Button, ThrottledButton, toast } from \"@orderly.network/ui\";\nimport { FC, useContext, useState } from \"react\";\nimport { useOrderListContext } from \"../orderListContext\";\n\nexport const CancelButton: FC<{\n order: API.Order;\n}> = (props) => {\n const { order } = props;\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 Cancel\n </ThrottledButton>\n );\n};\n","import { FC, useCallback, useContext, useMemo, useState } from \"react\";\n\nimport { useConfig, useMutation } from \"@orderly.network/hooks\";\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 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\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 Renew\n </Button>\n );\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\";\n\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\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 TP&nbsp;-&nbsp;\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 SL&nbsp;-&nbsp;\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]);\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 <Tooltip content={pnl} className=\"oui-bg-base-5\" tooltipProps={{\n arrow: {\n className: \"oui-fill-base-5\"\n }\n }}>{content}</Tooltip>;\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 pnl = utils.priceToPnl(\n {\n qty,\n price,\n entryPrice,\n orderSide,\n orderType,\n },\n {\n symbol: symbolInfo,\n }\n );\n\n const type = orderType === AlgoOrderType.TAKE_PROFIT ? \"TP\" : \"SL\";\n\n // console.log(\"trigger price item\", \"dp\", symbolInfo.quote_dp);\n \n\n return (\n <div className=\"oui-flex oui-items-center\">\n <span className=\"oui-text-base-contrast-54 oui-mr-1\">{`${type} PnL:`}</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 { useMarkPricesStream, utils } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { useMemo } from \"react\";\nimport { Flex, Tooltip, Text, cn } from \"@orderly.network/ui\";\nimport { useSymbolContext } from \"../symbolProvider\";\nimport { calcBracketRoiAndPnL } from \"../../../utils/util\";\n\nexport const BracketOrderPrice = (props: { order: API.AlgoOrderExt }) => {\n const { order } = props;\n const { quote_dp, base_dp } = useSymbolContext();\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={<Text intensity={80}>TP PnL: &nbsp;</Text>}\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={<Text intensity={80}>SL PnL: &nbsp;</Text>}\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 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}`}&nbsp;-&nbsp;\n </span>\n }\n >\n {value}\n </Text.numeral>\n ) : (\n <></>\n );\n};\n","import { API } from \"@orderly.network/types\";\nimport { PositionTPSLPopover } from \"@orderly.network/ui-tpsl\";\nimport { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\nimport { useSymbolContext } from \"../symbolProvider\";\n\nexport const TP_SLEditButton = (props: { order: API.Order }) => {\n const { position, order } = useTPSLOrderRowContext();\n const { quote_dp, base_dp } = useSymbolContext();\n return (\n <PositionTPSLPopover\n quoteDP={quote_dp}\n baseDP={base_dp}\n position={position!}\n order={order}\n label=\"Edit\"\n isEditing\n />\n );\n};\n","import { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\n\n\nexport const TPSLOrderPrice = () => {\n const { sl_trigger_price, tp_trigger_price } = useTPSLOrderRowContext();\n return (\n <div>\n {!!tp_trigger_price ? (\n <div className={\"oui-text-base-contrast-80 oui-td-bg-transparent\"}>\n <span className={\"oui-text-base-contrast-54\"}>\n TP&nbsp;-&nbsp;\n </span>\n <span>Market</span>\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 SL&nbsp;-&nbsp;\n </span>\n <span>Market</span>\n </div>\n ) : null}\n </div>\n );\n};\n","import React, { FC } from \"react\";\nimport { Divider, Flex, Grid, Text } from \"@orderly.network/ui\";\nimport { OrderCellState } from \"./orderCell.script\";\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} from \"./items\";\nimport { EditBtnWidget } from \"./editBtn\";\nimport { CancelBtnWidget } from \"./cancelBtn\";\nimport { BracketOrderPriceWidget } from \"./bracketOrderPrice\";\nimport { TabType } from \"../../orders.widget\";\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 </>\n );\n }\n}\n","import { Badge, cn, Flex, Statistic, Text, Tooltip } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderCellState } from \"./orderCell.script\";\nimport {\n FC,\n PropsWithChildren,\n ReactNode,\n useCallback,\n useMemo,\n useState,\n} from \"react\";\nimport { parseBadgesFor, upperCaseFirstLetter } from \"../../../utils/util\";\nimport {\n AlgoOrderRootType,\n API,\n OrderStatus,\n OrderType,\n} from \"@orderly.network/types\";\nimport { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\nimport { OrderSide } from \"@orderly.network/types\";\n\nexport const SymbolToken: FC<OrderCellState> = (props) => {\n const { item } = props;\n const isBuy = item.side === OrderSide.BUY;\n return (\n <Text.formatted\n intensity={80}\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"sm\"\n // @ts-ignore\n prefix={\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? \"Buy\" : \"Sell\"}\n </Badge>\n }\n onClick={() => {\n props.onSymbolChange?.({ symbol: 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 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 return (\n <Flex direction={\"row\"} gap={1}>\n {parseBadgesFor(props.item)?.map((e, index) => (\n <Badge\n key={index}\n color={\n e.toLocaleLowerCase() === \"position\" ? \"primaryLight\" : \"neutral\"\n }\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\n // @ts-ignore\n const status = item.status || item.algo_status;\n\n const label = () => {\n if (status === \"NEW\") {\n return upperCaseFirstLetter(\"pending\");\n }\n return upperCaseFirstLetter(status);\n };\n\n return (\n <Text.formatted intensity={36} size=\"2xs\">\n {label()}\n </Text.formatted>\n );\n};\n\nexport const Qty: FC<OrderCellState> = (props) => {\n const { item } = props;\n\n const isEntirePosition =\n item.type === OrderType.CLOSE_POSITION &&\n // @ts-ignore\n item?.status !== OrderStatus.FILLED;\n\n return (\n <Statistic\n label={\"Qty.\"}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.base_dp}\n padding={false}\n coloring\n placeholder=\"Entire position\"\n intensity={80}\n >\n {isEntirePosition ? \"--\" : item.quantity}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Filled: FC<OrderCellState> = (props) => {\n const { item } = props;\n\n return (\n <Statistic\n label={<Text>Filled</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.quote_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\n return (\n <Statistic\n align=\"end\"\n label={<Text>Notional{<Text intensity={20}>(USDC)</Text>}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\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 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={<Text>Notional{<Text intensity={20}>(USDC)</Text>}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\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\n return (\n <Statistic\n label={\"Trigger price\"}\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\n return (\n <Statistic\n label={\"Mark price\"}\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 isAlgoOrder = item?.algo_order_id !== undefined;\n const isStopMarket = item?.type === \"MARKET\" && isAlgoOrder;\n return (\n <Statistic\n label={\"Limit price\"}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n {isStopMarket ? (\n <Text>Market</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\n return (\n <Statistic\n label={\"TP trigger\"}\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}>TP PnL:&nbsp;&nbsp;</Text>}\n suffix={<Text intensity={20}>&nbsp;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\n return (\n <Statistic\n label={\"SL trigger\"}\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={<Text intensity={54}>SL PnL:&nbsp;&nbsp;</Text>}\n suffix={<Text intensity={20}>&nbsp;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 { tp_trigger_price } = useTPSLOrderRowContext();\n\n return (\n <Statistic\n label={\"TP price\"}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text intensity={80}>Market</Text>\n </Statistic>\n );\n};\nexport const SLPrice: FC<OrderCellState> = (props) => {\n return (\n <Statistic\n label={\"SL price\"}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text intensity={80}>Market</Text>\n </Statistic>\n );\n};\n\nexport const TPSLQuantity: FC<OrderCellState> = (props) => {\n const { item } = props;\n\n const quantity = useMemo(() => {\n if (item.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n return <span className=\"oui-text-base-contrast-80\">Entire position</span>;\n }\n\n return (\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n padding={false}\n >\n {item.quantity}\n </Text.numeral>\n );\n }, [item]);\n\n return (\n <Statistic\n label={\"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 return (\n <Statistic\n label={<Text>Avg price{<Text intensity={20}>(USDC)</Text>}</Text>}\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 return (\n <Statistic\n label={<Text>Order price{<Text intensity={20}>(USDC)</Text>}</Text>}\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=\"Market\"\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 return (\n <Statistic\n label={<Text>Real. PnL{<Text intensity={20}>(USDC)</Text>}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\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 </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 tooltipProps={{\n arrow: {\n className: classNames?.arrow,\n },\n }}\n >\n <div onClick={() => setOpen((e) => !e)}>{props.children}</div>\n </Tooltip>\n );\n};\n","import { FC } from \"react\";\nimport { Button } from \"@orderly.network/ui\";\nimport { EditBtnState } from \"./editBtn.script\";\n\nexport const EditBtn: FC<EditBtnState> = (props) => {\n const { item } = props;\n const isBuy = item.quantity > 0;\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 Edit\n </Button>\n </>\n );\n};\n","import { modal } from \"@orderly.network/ui\";\nimport { OrderCellState } from \"../orderCell.script\";\nimport { EditSheetWidget } from \"../editSheet\";\nimport { useCallback } from \"react\";\nimport { useOrderListContext } from \"../../orderListContext\";\nimport { TabType } from \"../../../orders.widget\";\nimport { PositionTPSLSheet } from \"@orderly.network/ui-tpsl\";\nimport { useTPSLOrderRowContext } from \"../../tpslOrderRowContext\";\nimport { useSymbolContext } from \"../../symbolProvider\";\n\nexport const useEditBtnScript = (props: { state: OrderCellState }) => {\n const { state } = props;\n const { editAlgoOrder, editOrder } = useOrderListContext();\n const { order, position } = useTPSLOrderRowContext();\n const onShowEditSheet = useCallback(() => {\n if (props.state.type === TabType.tp_sl) {\n modal\n .sheet({\n title: \"TP/SL\",\n content: (\n <PositionTPSLSheet\n isEditing\n order={props.state.item}\n position={position!}\n symbolInfo={props.state.origin}\n />\n ),\n })\n .catch((error) => {\n console.log(error);\n });\n } else {\n modal\n .sheet({\n title: \"Edit order\",\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, useEffect } from \"react\";\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 { EditSheetState } from \"./editSheet.script\";\nimport { ConfirmDialogContent } from \"./editDialogContent\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { parseBadgesFor } from \"../../../../utils/util\";\nimport { utils } from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport const EditSheet: FC<EditSheetState> = (props) => {\n const { item } = props;\n const isBuy = item.side === OrderSide.BUY;\n\n // useEffect(() => {\n // if (props.errors?.order_price?.message) {\n // toast.error(props.errors?.order_price?.message);\n // } else if (props.errors?.order_quantity?.message) {\n // toast.error(props.errors?.order_quantity?.message);\n // } else if (props.errors?.total?.message) {\n // toast.error(props.errors?.total?.message);\n // } else if (props.errors?.trigger_price?.message) {\n // toast.error(props.errors?.trigger_price?.message);\n // }\n // }, [props.errors]);\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\"\n ? \"primaryLight\"\n : \"neutral\"\n }\n size=\"xs\"\n >\n {e}\n </Badge>\n ))}\n {isBuy && (\n <Badge color=\"success\" size=\"xs\">\n Buy\n </Badge>\n )}\n {!isBuy && (\n <Badge color=\"danger\" size=\"xs\">\n Sell\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider intensity={8} className=\"oui-w-full\" />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text>Last price</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 Trigger price\n </Text>\n }\n suffix={\n <Text intensity={54} className=\"oui-px-3\">\n {props.quote}\n </Text>\n }\n color={\n props.errors?.trigger_price?.message ? \"danger\" : undefined\n }\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={props.errors?.trigger_price?.message}\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-98 oui-w-full\",\n root: cn(\n \"oui-outline-line-12\",\n props.errors?.trigger_price?.message && \"oui-outline-danger\"\n ),\n }}\n />\n )}\n <Input.tooltip\n prefix={\n <Text intensity={54} className=\"oui-px-3\">\n Price\n </Text>\n }\n suffix={\n <Text intensity={54} className=\"oui-px-3\">\n {props.quote}\n </Text>\n }\n color={props.errors?.order_price?.message ? \"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={props.isStopMarket ? \"Market\" : props.price}\n onValueChange={(e) => props.setPrice(e)}\n tooltip={props.errors?.order_price?.message}\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-98\",\n root: cn(\n \"oui-outline-line-12\",\n props.errors?.order_price?.message && \"oui-outline-danger\"\n ),\n }}\n />\n <Input.tooltip\n prefix={\n <Text intensity={54} className=\"oui-px-3\">\n {\"Quantity\"}\n </Text>\n }\n suffix={\n <Text intensity={54} className=\"oui-px-3\">\n {props.base}\n </Text>\n }\n color={props.errors?.order_quantity?.message ? \"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={props.errors?.order_quantity?.message}\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-98\",\n root: cn(\n \"oui-outline-line-12\",\n props.errors?.order_quantity?.message && \"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=\"primaryLight\"\n />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text.numeral\n color=\"primaryLight\"\n size=\"2xs\"\n dp={2}\n padding={false}\n rule=\"percentages\"\n >{`${percentages ?? 0}`}</Text.numeral>\n <Flex gap={1}>\n <Text size=\"2xs\" color=\"primaryLight\">\n 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 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 Confirm\n </ThrottledButton>\n </Flex>\n </Flex>\n\n <SimpleDialog\n open={props.dialogOpen}\n onOpenChange={props.setDialogOpen}\n title=\"Edit order\"\n size=\"xs\"\n actions={{\n primary: {\n label: \"Confirm\",\n onClick: props.onDialogConfirm,\n loading: props.submitting,\n fullWidth: true,\n },\n secondary: {\n label: \"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 {\n Badge,\n Button,\n Checkbox,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n Slider,\n Text,\n} from \"@orderly.network/ui\";\nimport { EditSheetState } from \"./editSheet.script\";\nimport { FC } from \"react\";\nimport { commify, Decimal } from \"@orderly.network/utils\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { parseBadgesFor } from \"../../../../utils/util\";\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 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\"\n ? \"primaryLight\"\n : \"neutral\"\n }\n size=\"xs\"\n >\n {e}\n </Badge>\n ))}\n {isBuy && (\n <Badge color=\"success\" size=\"xs\">\n Buy\n </Badge>\n )}\n {!isBuy && (\n <Badge color=\"danger\" size=\"xs\">\n Sell\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider />\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>Trigger 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 >\n {triggerPrice ?? \"--\"}\n </Text.numeral>\n </Flex>\n )}\n\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>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 ? \"Market\" : \"--\"}\n >\n {props.isStopMarket ? \"Market\" : price ?? \"--\"}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>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 Disable order confirmation\n </label>\n </Flex>\n </div>\n );\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { OrderCellState } from \"../orderCell.script\";\nimport {\n useDebouncedCallback,\n useLocalStorage,\n useMaxQty,\n useOrderEntity,\n // useOrderEntry,\n useOrderEntry_deprecated,\n useThrottledCallback,\n utils,\n} from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { modal, toast, useModal } from \"@orderly.network/ui\";\nimport { API, OrderEntity } from \"@orderly.network/types\";\nimport { useOrderListContext } from \"../../orderListContext\";\nimport { OrderTypeView } from \"../items\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { useTPSLOrderRowContext } from \"../../tpslOrderRowContext\";\nimport { useSymbolContext } from \"../../symbolProvider\";\n\n// export 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// }) => {\n// const { state, editAlgoOrder, editOrder, autoCheckInput = true } = props;\n// const { item: order } = state;\n// const { hide } = useModal();\n// const [dialogOpen, setDialogOpen] = useState(false);\n// const [submitting, setSubmitting] = 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\n// const [price, setPrice] = useState(order.price ?? \"Market\");\n// const [triggerPrice, setTriggerPrice] = useState(`${order.trigger_price}`);\n// const [quantity, setQuantity] = useState(`${order.quantity}`);\n\n// const [sliderValue, setSliderValue] = useState<undefined | number>(undefined);\n\n// /**\n// * {\n// * order_price: {type: 'min/max', message: ''},\n// * order_quantity: {type: 'min/max', message: ''},\n// * total: {type: 'min/max', message: ''},\n// * trigger_price: {type: 'required/min/max' , message: ''},\n// * }\n// */\n// const [errors, setErrors] = useState<{\n// order_price?: { message: string };\n// order_quantity?: { message: string };\n// total?: { message: string };\n// trigger_price?: { message: string };\n// }>({});\n\n// const { markPrice, maxQty, helper, metaState } = useOrderEntry_deprecated(\n// // @ts-ignore\n// order.symbol,\n// order.side\n// );\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 tempOrderEntity = useRef<OrderEntity>();\n\n// const onClose = () => {\n// hide();\n// };\n// const onCloseDialog = () => {\n// setDialogOpen(false);\n// };\n\n// const validatorInput = async (): Promise<{\n// values: OrderEntity;\n// errors?: any;\n// }> => {\n// let values: OrderEntity = {\n// order_quantity: quantity,\n// trigger_price: `${triggerPrice}`,\n// symbol: order.symbol,\n// // @ts-ignore\n// order_type: orderType,\n// // @ts-ignore\n// side: order.side,\n// reduce_only: Boolean(order.reduce_only),\n// };\n// if (!isMarketOrder) {\n// values = {\n// ...values,\n// order_price: `${price}`,\n// }\n// }\n\n// console.log(\"validator\", values, order);\n\n// const errors = await helper.validator(values);\n// if (errors.total?.message !== undefined) {\n// toast.error(errors.total?.message);\n// }\n// // console.log(\"errors is\", values, errors);\n\n// setErrors(errors);\n// return {\n// errors,\n// values,\n// };\n// };\n\n// useEffect(() => {\n// if (autoCheckInput) {\n// validatorInput();\n// }\n// }, [price, triggerPrice, quantity, autoCheckInput]);\n\n// const onSheetConfirm = async () => {\n// setDialogOpen(false);\n// const { values: _data, errors } = await validatorInput();\n// let values = _data;\n\n// if (Object.keys(errors).length > 0) {\n// return;\n// }\n\n// if (typeof order.order_tag !== undefined && order.reduce_only !== true) {\n// values = { ...values, order_tag: order.order_tag };\n// }\n\n// tempOrderEntity.current = values;\n// if (orderConfirm) {\n// setDialogOpen(true);\n// } else {\n// onSubmit(values);\n// }\n// };\n\n// const onDialogConfirm = () => {\n// if (tempOrderEntity.current) {\n// onSubmit(tempOrderEntity.current);\n// }\n// };\n\n// const onSubmit = useCallback(\n// async (values: OrderEntity) => {\n// let future;\n// let 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// 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// useEffect(() => {\n// if (typeof sliderValue === \"undefined\" && maxQty) {\n// const value = new Decimal(order.quantity).div(maxQty).toNumber();\n// setSliderValue(value);\n// }\n// }, [maxQty, setSliderValue]);\n\n// const percentages = useMemo(() => {\n// return Math.min(Number(quantity) / maxQty, 1);\n// }, [quantity]);\n\n// return {\n// ...state,\n// curMarkPrice: markPrice,\n// isAlgoOrder,\n// isStopMarket,\n// price,\n// setPrice,\n// priceEdit: !isStopMarket,\n// triggerPrice,\n// setTriggerPrice,\n// quantity,\n// setQuantity,\n// maxQty,\n// sliderValue,\n// setSliderValue,\n// percentages,\n// onClose,\n// onSheetConfirm,\n// errors,\n\n// dialogOpen,\n// setDialogOpen,\n// onDialogConfirm,\n// onCloseDialog,\n// submitting,\n\n// orderConfirm,\n// setOrderConfirm,\n// };\n// };\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 { state, editAlgoOrder, editOrder, autoCheckInput = true, position } = 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 [sliderValue, setSliderValue] = useState(0);\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 setValue = (key: any, value: any) => {\n // setFormattedOrder((oldValue) => ({\n // ...oldValue,\n // [key]: value,\n // }));\n // };\n\n // console.log(\n // \"formattedOrder\",\n // formattedOrder,\n // errors,\n // maxQty,\n // base_dp,\n // base_tick,\n // order,\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 let 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 {\n // formattedOrder,\n // setValue,\n // setValues,\n // symbolInfo,\n // markPrice,\n\n // metaState: { errors },\n // helper,\n // } = useOrderEntry(order.symbol, {\n // initialOrder: {\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 // },\n // });\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 { FC } from \"react\";\nimport { Button, Flex, SimpleDialog, Text } from \"@orderly.network/ui\";\nimport { CancelBtnState } from \"./cancelBtn.script\";\n\nexport const CancelBtn: FC<CancelBtnState> = (props) => {\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 Cancel\n </Button>\n {props.open && (\n <SimpleDialog\n size=\"xs\"\n open={props.open}\n onOpenChange={props.setOpen}\n title=\"Cancel order\"\n actions={{\n primary: {\n label: \"Confirm\",\n loading: props.isLoading,\n fullWidth: true,\n size: \"md\",\n onClick: (e) => {\n props.onCancel(e);\n },\n },\n secondary: {\n label: \"Cancel\",\n fullWidth: true,\n size: \"md\",\n onClick: () => {\n props.onClose();\n },\n },\n }}\n >\n <Text size=\"2xs\" intensity={54}>\n Are you sure you want to cancel your pending order.\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 { cn, Flex, SimpleDialog, Text } from \"@orderly.network/ui\";\nimport { BracketOrderPriceState } from \"./bracketOrderPrice.script\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { MobileTooltip } from \"../items\";\n\nexport const BracketOrderPrice: FC<BracketOrderPriceState> = (props) => {\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={<Text intensity={80}>TP PnL: &nbsp;</Text>}\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={<Text intensity={80}>SL PnL: &nbsp;</Text>}\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} `}:&nbsp;&nbsp;\n </span>\n }\n >\n {value}\n </Text.numeral>\n ) : (\n <></>\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 { API } from \"@orderly.network/types\";\nimport { useSymbolContext } from \"../symbolProvider\";\nimport { TabType } from \"../../orders.widget\";\n\nexport const useOrderCellScript = (props: {\n item: API.AlgoOrderExt;\n index: number;\n type: TabType;\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\";\n\nexport const OrderCellWidget = (props: {\n item: API.AlgoOrderExt;\n index: number;\n className?: string;\n type: TabType;\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 { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n AlgoOrderRootType,\n OrderStatus,\n OrderSide,\n API,\n} from \"@orderly.network/types\";\nimport { useLocalStorage, useOrderStream } from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { TabType } from \"../orders.widget\";\nimport {\n DataFilterItems,\n modal,\n usePagination,\n Text,\n PaginationMeta,\n useScreen,\n} from \"@orderly.network/ui\";\nimport {\n addDays,\n addSeconds,\n differenceInDays,\n setHours,\n subDays,\n} from \"date-fns\";\nimport { useFormatOrderHistory } from \"./useFormatOrderHistory\";\n\nexport const useOrderListScript = (props: {\n type: TabType;\n ordersStatus?: OrderStatus;\n symbol?: string;\n enableLoadMore?: boolean;\n onSymbolChange?: (symbol: API.Symbol) => void;\n filterConfig?: {\n side?: OrderSide | \"all\";\n range?: {\n from?: Date;\n to?: Date;\n };\n };\n pnlNotionalDecimalPrecision?: number;\n}) => {\n const {\n ordersStatus,\n type,\n enableLoadMore = false,\n onSymbolChange,\n filterConfig,\n pnlNotionalDecimalPrecision,\n } = props;\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, setPageSize, parseMeta } = usePagination({\n pageSize: defaultPageSize,\n });\n const { orderStatus, ordersSide, dateRange, filterItems, onFilter } =\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 [\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 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 ? \"Cancel all pending orders\"\n : props.type === TabType.tp_sl\n ? \"Cancel all TP/SL orders\"\n : \"\";\n const content = TabType.pending\n ? \"Are you sure you want to cancel all of your pending orders?\"\n : props.type === TabType.tp_sl\n ? \"Are you sure you want to cancel all of your TP/SL orders?\"\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]);\n\n const formattedData = useFormatOrderHistory(data ?? []);\n\n const dataSource =\n useDataTap(type !== TabType.tp_sl ? formattedData : data) ?? undefined;\n\n const pagination = useMemo(() => {\n const _meta = manualPagination\n ? meta\n : {\n total: dataSource?.length,\n current_page: page,\n records_per_page: pageSize,\n };\n return {\n ...parseMeta(_meta),\n onPageChange: setPage,\n onPageSizeChange: setPageSize,\n } as PaginationMeta;\n }, [\n meta,\n setPage,\n setPageSize,\n manualPagination,\n page,\n pageSize,\n dataSource,\n ]);\n\n return {\n type,\n dataSource,\n isLoading,\n loadMore,\n cancelOrder,\n updateOrder,\n cancelAlgoOrder,\n updateAlgoOrder,\n page,\n pageSize,\n setPage,\n setPageSize,\n meta: parseMeta(meta),\n pagination,\n manualPagination,\n pnlNotionalDecimalPrecision,\n\n // filter\n onFilter,\n filterItems,\n onCancelAll,\n\n onSymbolChange,\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 [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 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(), 7)),\n })\n : {});\n\n const [dateRange, setDateRange] = useState<{\n from?: Date;\n to?: Date;\n }>(defaultRange);\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 };\n\n const filterItems = useMemo((): any[] => {\n const sideFilter = {\n type: \"select\",\n name: \"side\",\n options: [\n {\n label: \"All sides\",\n value: \"all\",\n },\n {\n label: \"Buy\",\n value: \"BUY\",\n },\n {\n label: \"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: \"All status\",\n value: \"all\",\n },\n {\n label: \"Pending\",\n value: OrderStatus.INCOMPLETE,\n },\n {\n label: \"Filled\",\n value: OrderStatus.FILLED,\n },\n {\n label: \"Partial filled\",\n value: OrderStatus.PARTIAL_FILLED,\n },\n {\n label: \"Canceled\",\n value: OrderStatus.CANCELLED,\n },\n {\n label: \"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]);\n\n return {\n filterItems,\n onFilter,\n ordersSide: ordersSide === \"all\" ? undefined : ordersSide,\n dateRange,\n orderStatus: orderStatus === \"all\" ? undefined : orderStatus,\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),\n});\n","import {\n API,\n AccountStatusEnum,\n AlgoOrderRootType,\n OrderStatus,\n} from \"@orderly.network/types\";\nimport { useMemo } from \"react\";\n\nexport const useFormatOrderHistory = (data: API.AlgoOrderExt[]) => {\n const formattedData = useMemo(() => {\n // if (state.status < AccountStatusEnum.EnableTrading || !data) {\n // return [];\n // }\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","import { OrderSide, OrderStatus } from \"@orderly.network/types\";\nimport { useOrderListScript } from \"./orderList.script\";\nimport { DesktopOrderList, MobileOrderList } from \"./orderList.ui\";\nimport { TabType } from \"../orders.widget\";\nimport { API } from \"@orderly.network/types\";\n\nexport const DesktopOrderListWidget = (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 pnlNotionalDecimalPrecision?: number;\n}) => { \n const state = useOrderListScript(props);\n return <DesktopOrderList {...state} />;\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 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 { FC } from \"react\";\nimport { useOrdersScript } from \"./orders.script\";\nimport { Orders } from \"./orders.ui\";\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 const OrdersWidget: FC<{\n current?: TabType;\n pnlNotionalDecimalPrecision?: number;\n}> = (props) => {\n const state = useOrdersScript(props);\n\n return <Orders {...state} />;\n};\n"]}
1
+ {"version":3,"sources":["../src/components/orders.script.ts","../src/components/orders.ui.tsx","../src/components/orderList/orderList.ui.tsx","../src/utils/util.ts","../src/components/orderList/symbolProvider.tsx","../src/components/orderList/orderListContext.tsx","../src/components/orderList/tpslOrderRowContext.tsx","../src/components/orderList/desktop/useColumn.tsx","../src/components/orderList/desktop/quantity.tsx","../src/components/orderList/desktop/editOrder/confirmContent.tsx","../src/components/orderList/desktop/editOrder/innerInput.tsx","../src/components/orderList/desktop/price.tsx","../src/components/orderList/desktop/triggerPrice.tsx","../src/components/orderList/desktop/cancelBtn.tsx","../src/components/orderList/desktop/renew.tsx","../src/components/orderList/desktop/tpslTriggerPrice.tsx","../src/components/orderList/desktop/bracketOrderPrice.tsx","../src/components/orderList/desktop/tpslEdit.tsx","../src/components/orderList/desktop/tpslPrice.tsx","../src/components/orderList/mobile/orderCell.ui.tsx","../src/components/orderList/mobile/items.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/cancelBtn/cancelBtn.ui.tsx","../src/components/orderList/mobile/cancelBtn/cancelBtn.script.tsx","../src/components/orderList/mobile/cancelBtn/cancelBtn.widget.tsx","../src/components/orderList/mobile/bracketOrderPrice/bracketOrderPrice.ui.tsx","../src/components/orderList/mobile/bracketOrderPrice/bracketOrderPrice.script.tsx","../src/components/orderList/mobile/bracketOrderPrice/bracketOrderPrice.widget.tsx","../src/components/orderList/mobile/orderCell.script.tsx","../src/components/orderList/mobile/orderCell.widget.tsx","../src/components/orderList/orderList.script.tsx","../src/components/orderList/useFormatOrderHistory.ts","../src/components/orderList/orderList.widget.tsx","../src/components/orders.widget.tsx"],"names":["useOrdersScript","props","current","pnlNotionalDecimalPrecision","TabPanel","Tabs","OrderStatus","Flex","ListView","Button","Grid","Picker","DataFilter","cn","AuthGuardDataTable","utils","OrderSide","AlgoOrderRootType","AlgoOrderType","OrderType","upperCaseFirstLetter","str","parseBadgesFor","record","list","types","e","type","tpOrder","order","slOrder","grayCell","findBracketTPSLOrder","innerOrder","item","calcBracketRoiAndPnL","defaultCallback","quantity","tpPnL","slPnL","tpRoi","slRoi","createContext","useContext","useSymbolsInfo","jsx","SymbolContext","useSymbolContext","SymbolProvider","symbolInfo","modal","useCallback","checkNotional","Fragment","OrderListContext","useOrderListContext","OrderListProvider","cancelOrder","editOrder","cancelAlgoOrder","editAlgoOrder","onCancelOrder","onEditOrder","position","isHidden","orderEntry","checkMinNotional","symbol","price","qty","min_notional","useEffect","useMemo","useState","unstable_serialize","useAccount","useMutation","useSWRConfig","TPSLOrderRowContext","useTPSLOrderRowContext","TPSLOrderRowProvider","quote_dp","setPosition","doDeleteOrder","doUpdateOrder","config","state","positionKey","onUpdateOrder","params","getRelatedPosition","p","sl_trigger_price","tp_trigger_price","calcTPSLPnL","avgOpenPrice","Text","commifyOptional","Decimal","Badge","useRef","Popover","toast","Slider","PopoverTrigger","PopoverRoot","PopoverContent","CloseIcon","ThrottledButton","commify","jsxs","ConfirmContent","base","value","cancelPopover","isSubmitting","onConfirm","label","CheckIcon","Input","inputFormatter","Tooltip","InnerInput","inputRef","dp","setValue","setEditing","error","handleKeyDown","onClick","onClose","onFocus","onBlur","hintInfo","input","length","open","useMaxQty","OrderQuantity","otherOrderQuantity","reduce_only","originSetQuantity","editing","setQuantity","setOpen","setError","onUpdateTPSLOrder","base_dp","base_tick","maxQty","positionQty","closePopover","setIsSubmitting","clickHandler","notionalText","event","order_price","rest","future","result","err","componentRef","quantitySliderRef","handleClickOutside","trigger","NormalState","EditState","executed","confirmOpen","side","sliderValue","setSliderValue","formatQuantity","_qty","values","Buttons","index","useSymbolPriceRange","Price","setPrice","isAlgoOrder","isStopMarket","rangeInfo","order_id","data","TriggerPrice","isBracketOrder","quote_max","quote_min","CancelButton","isLoading","setIsLoading","res","useConfig","Renew","doCreateOrder","reset","isMutating","brokerId","onSubmit","OrderTriggerPrice","TPSLTriggerPrice","direction","pnl","msgs","TriggerPriceItem","child","children","content","entryPrice","orderSide","orderType","BracketOrderPrice","roi","PositionTPSLPopover","TP_SLEditButton","TPSLOrderPrice","useOrderColumn","_type","onSymbolChange","instrument","fillAndQuantity","avgOpen","tpslTriggerPrice","realizedPnL","estTotal","fee","status","reduceOnly","hidden","cancelBtn","triggerPrice","bracketOrderPrice","orderTime","pendingTabCancelBtn","tpslPrice","tpslNotional","tpslAction","avgPrice","option","r1","r2","showGray","a","b","aQuantity","bQuantity","compareNumbers","aTotal","bTotal","_value","_","Divider","Statistic","SymbolToken","isBuy","OrderTypeView","OrderTime","OrderState","Qty","isEntirePosition","Filled","EstTotal","MarkPrice","LimitPrice","TPTrigger","MobileTooltip","SLTrigger","TPPrice","SLPrice","TPSLQuantity","AvgPrice","OrderPrice","RealizedPnL","classNames","EditBtn","SimpleDialog","Checkbox","ConfirmDialogContent","EditSheet","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","PositionTPSLSheet","useEditBtnScript","onShowEditSheet","EditBtnWidget","CancelBtn","useCancelBtnScript","CancelBtnWidget","useBracketOrderPriceScript","BracketOrderPriceWidget","OrderCell","Header","Body","Btns","itemsWithType","useOrderCellScript","OrderCellWidget","className","DesktopOrderList","columns","CancelAll","MobileOrderList","useOrderStream","useDataTap","usePagination","differenceInDays","setHours","subDays","useFormatOrderHistory","_data","element","j","useOrderListScript","ordersStatus","enableLoadMore","filterConfig","manualPagination","defaultPageSize","page","pageSize","setPage","pagination","parsePagination","orderStatus","ordersSide","dateRange","filterItems","onFilter","useFilter","includes","excludes","loadMore","updateOrder","updateAlgoOrder","cancelAllOrders","cancelAllTPSLOrders","meta","refresh","localPageSizeKey","typePageSize","setTypePageSize","onCancelAll","title","formattedData","dataSource","_pagination","setOrderStatus","setOrdersSide","defaultRange","formatDatePickerRange","offsetEndOfDay","setDateRange","filter","sideFilter","dateRangeFilter","statusFilter","offsetStartOfDay","date","newDate","DesktopOrderListWidget","testIds","MobileOrderListWidget","Orders","TabType","OrdersWidget"],"mappings":"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","sourcesContent":["import { useState } from \"react\";\nimport {\n AlgoOrderRootType,\n OrderStatus,\n OrderSide,\n} from \"@orderly.network/types\";\nimport { useOrderStream } from \"@orderly.network/hooks\";\nimport { TabType } from \"./orders.widget\";\n\nexport const useOrdersScript = (props: {\n current?: TabType;\n pnlNotionalDecimalPrecision?: number;\n}) => {\n const { current, pnlNotionalDecimalPrecision } = props;\n return {\n current,\n pnlNotionalDecimalPrecision,\n };\n};\n\nexport type OrdersBuilderState = ReturnType<typeof useOrdersScript>;\n","import { TabPanel, Tabs } from \"@orderly.network/ui\";\nimport { OrderStatus, API } from \"@orderly.network/types\";\nimport { OrdersBuilderState } from \"./orders.script\";\nimport { TabType } from \"./orders.widget\";\nimport { DesktopOrderListWidget } from \"./orderList\";\n\nexport const Orders = (props: OrdersBuilderState) => {\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=\"All\">\n <DesktopOrderListWidget\n type={TabType.all}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n />\n </TabPanel>\n <TabPanel value={TabType.pending} title=\"Pending\">\n <DesktopOrderListWidget\n type={TabType.pending}\n ordersStatus={OrderStatus.INCOMPLETE}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n />\n </TabPanel>\n <TabPanel value={TabType.tp_sl} title=\"TP/SL\">\n <DesktopOrderListWidget\n type={TabType.tp_sl}\n ordersStatus={OrderStatus.INCOMPLETE}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n />\n </TabPanel>\n <TabPanel value={TabType.filled} title=\"Filled\">\n <DesktopOrderListWidget\n type={TabType.filled}\n ordersStatus={OrderStatus.FILLED}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n />\n </TabPanel>\n <TabPanel value={TabType.cancelled} title=\"Cancelled\">\n <DesktopOrderListWidget\n type={TabType.cancelled}\n ordersStatus={OrderStatus.CANCELLED}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n />\n </TabPanel>\n <TabPanel value={TabType.rejected} title=\"Rejected\">\n <DesktopOrderListWidget\n type={TabType.rejected}\n ordersStatus={OrderStatus.REJECTED}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n />\n </TabPanel>\n {/* <TabPanel value={TabType.orderHistory} title=\"Order history\">\n <DesktopOrderListWidget\n type={TabType.orderHistory}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n />\n </TabPanel> */}\n </Tabs>\n );\n};\n// ----------------- Orders ui component end -----------------\n","import { FC } from \"react\";\nimport {\n Flex,\n ListView,\n Button,\n Grid,\n Picker,\n DataFilter,\n cn,\n} from \"@orderly.network/ui\";\nimport { OrdersBuilderState } from \"./orderList.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { grayCell } from \"../../utils/util\";\nimport { SymbolProvider } from \"./symbolProvider\";\nimport { OrderListProvider } from \"./orderListContext\";\nimport { TabType } from \"../orders.widget\";\nimport { TPSLOrderRowProvider } from \"./tpslOrderRowContext\";\nimport { useOrderColumn } from \"./desktop/useColumn\";\nimport { OrderCellWidget } from \"./mobile\";\n\nexport const DesktopOrderList: FC<OrdersBuilderState & {\n testIds?: {\n tableBody?: string;\n }\n}> = (props) => {\n const columns = useOrderColumn({\n _type: props.type,\n onSymbolChange: props.onSymbolChange,\n pnlNotionalDecimalPrecision: props.pnlNotionalDecimalPrecision,\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 {/* <Divider className=\"oui-w-full\" /> */}\n {props.filterItems.length > 0 && (\n <DataFilter\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n // className=\"oui-px-3\"\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 />\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 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-grid-rows-[auto,1fr] oui-w-full\"\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-bg-base-9 oui-rounded-b-xl\">\n {props.filterItems.map((item) => {\n // not support range type\n if (item.type !== \"select\") return <></>;\n return (\n <Picker\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 ? \"All sides\"\n : item.name === \"status\"\n ? \"All status\"\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 />\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 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 Cancel all\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\";\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\nexport function parseBadgesFor(record: any): undefined | string[] {\n if (typeof record.type !== \"undefined\") {\n const list = new Array<string>();\n\n if (!!record.parent_algo_type) {\n if (record.algo_type === AlgoOrderType.STOP_LOSS) {\n const types =\n record.type === OrderType.CLOSE_POSITION\n ? [\"Position\", \"SL\"]\n : [\"SL\"];\n list.push(...types);\n }\n\n if (record.algo_type === AlgoOrderType.TAKE_PROFIT) {\n const types =\n record.type === OrderType.CLOSE_POSITION\n ? [\"Position\", \"TP\"]\n : [\"TP\"];\n list.push(...types);\n }\n\n return list;\n }\n\n const types = (\n typeof record.type === \"string\"\n ? [record.type.replace(\"_ORDER\", \"\").toLowerCase() as string]\n : [record.type as string]\n ).map((e) => upperCaseFirstLetter(e));\n\n const type =\n typeof record.type === \"string\"\n ? record.type.replace(\"_ORDER\", \"\").toLowerCase()\n : upperCaseFirstLetter(record.type);\n\n if (record.algo_order_id === undefined || (record.algo_order_id && record.algo_type === 'BRACKET')) return [upperCaseFirstLetter(type)];\n return [`Stop ${type}`]\n }\n\n if (typeof record.algo_type !== \"undefined\") {\n const list = new Array<string>();\n\n if (record.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n list.push(\"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(tpOrder && slOrder ? \"TP/SL\" : tpOrder ? \"TP\" : \"SL\");\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 \n\n const quantity = 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","import React, {\n FC,\n PropsWithChildren,\n createContext,\n useMemo,\n useContext,\n} from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\n\ninterface SymbolContextState {\n base_dp: number;\n quote_dp: number;\n base_tick: number;\n quote_tick: number;\n base: string;\n quote: string;\n symbol: string;\n origin: API.SymbolExt;\n quote_min: number;\n quote_max: number;\n}\n\nexport const SymbolContext = createContext({} as SymbolContextState);\n\nexport const useSymbolContext = () => {\n return useContext(SymbolContext);\n};\n\ninterface FormatterProviderProps {\n symbol: string;\n}\n\nexport const SymbolProvider: FC<PropsWithChildren<FormatterProviderProps>> = (\n props\n) => {\n const symbolInfo = useSymbolsInfo()[props.symbol];\n\n return (\n <SymbolContext.Provider\n value={{\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n base_tick: symbolInfo(\"base_tick\"),\n quote_tick: symbolInfo(\"quote_tick\"),\n base: symbolInfo(\"base\"),\n quote: symbolInfo(\"quote\"),\n symbol: props.symbol,\n origin: symbolInfo(),\n quote_max: symbolInfo(\"quote_max\"),\n quote_min: symbolInfo(\"quote_min\")\n }}\n >\n {props.children}\n </SymbolContext.Provider>\n );\n};\n","import { modal } from \"@orderly.network/ui\";\nimport { API, OrderEntity } from \"@orderly.network/types\";\nimport { FC, PropsWithChildren, createContext, useCallback, useContext } from \"react\";\n\nimport { checkNotional, useSymbolsInfo } from \"@orderly.network/hooks\";\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 symbolInfo = useSymbolsInfo();\n const onCancelOrder = useCallback(\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\n const onEditOrder = useCallback(\n async (order: API.Order | API.AlgoOrder, position?: API.Position) => {\n // @ts-ignore\n let 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 const orderEntry = await modal.sheet({\n title: \"Edit Order\",\n classNames: {\n content: \"oui-edit-order-sheet-content\",\n },\n content: (\n // <OrderEditFormSheet\n // order={order}\n // position={position}\n // editOrder={(value: OrderEntity) => {\n // /// check order has order_tag, if exits add order_tag to request body\n // if (\n // typeof order.order_tag !== undefined &&\n // order.reduce_only !== true\n // ) {\n // value = { ...value, order_tag: order.order_tag };\n // }\n // if (order.algo_order_id !== undefined) {\n // return editAlgoOrder(order.algo_order_id.toString(), {\n // ...value,\n // });\n // }\n // return editOrder((order as any).order_id.toString(), {\n // ...value,\n // ...(isHidden ? { visible_quantity: 0 } : {}),\n // });\n // }}\n // />\n <>Content</>\n ),\n });\n },\n []\n );\n\n const checkMinNotional = useCallback(\n (symbol: string, price?: string | number, qty?: string | number) => {\n const { min_notional } = symbolInfo[symbol]();\n return checkNotional(price, qty, min_notional);\n },\n [symbolInfo]\n );\n\n return (\n <OrderListContext.Provider\n value={{\n onCancelOrder,\n onEditOrder,\n editOrder,\n editAlgoOrder,\n checkMinNotional,\n }}\n >\n {props.children}\n </OrderListContext.Provider>\n );\n};\n","import {\n createContext,\n FC,\n PropsWithChildren,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport {\n unstable_serialize,\n useAccount,\n useMutation,\n useSWRConfig,\n utils,\n} from \"@orderly.network/hooks\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport { useSymbolContext } from \"./symbolProvider\";\n\nexport type TPSLOrderRowContextState = {\n order: API.AlgoOrderExt;\n tp_trigger_price?: number;\n sl_trigger_price?: number;\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(\n {} as TPSLOrderRowContextState\n);\n\nexport const useTPSLOrderRowContext = () => {\n return useContext(TPSLOrderRowContext);\n};\n\nexport const TPSLOrderRowProvider: FC<\n PropsWithChildren<{\n order: API.AlgoOrderExt;\n }>\n> = (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 = 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 = async (order: API.AlgoOrderExt, params: any) => {\n console.log(\"onUpdateOrder\", order, position);\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 const getRelatedPosition = (\n symbol: string\n ): API.PositionTPSLExt | undefined => {\n const positions = config.cache.get(positionKey);\n\n return positions?.data.rows.find(\n (p: API.PositionTPSLExt) => p.symbol === symbol\n );\n };\n\n // const { sl_trigger_price, tp_trigger_price } = useMemo(() => {\n // if (\n // !(\"algo_type\" in props.order) ||\n // !Array.isArray(props.order.child_orders)\n // ) {\n // return {};\n // }\n // return utils.findTPSLFromOrder(props.order);\n // }, [props.order]);\n\n const { sl_trigger_price, tp_trigger_price, tpPnL, slPnL } = calcTPSLPnL({\n order: props.order,\n position,\n quote_dp,\n });\n\n useEffect(() => {\n if (\"algo_type\" in props.order || ((props.order as any)?.reduce_only ?? false)) {\n const position = getRelatedPosition(props.order.symbol);\n if (position) {\n setPosition(position);\n }\n }\n }, [props.order.symbol]);\n\n return (\n <TPSLOrderRowContext.Provider\n value={{\n order: props.order,\n sl_trigger_price,\n tp_trigger_price,\n tpPnL,\n slPnL,\n onCancelOrder,\n onUpdateOrder,\n getRelatedPosition,\n position,\n }}\n >\n {props.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 { sl_trigger_price, tp_trigger_price } =\n !(\"algo_type\" in order) || !Array.isArray(order.child_orders)\n ? {}\n : utils.findTPSLFromOrder(order);\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 slPnL,\n tpPnL,\n };\n}\n","import {\n AlgoOrderRootType,\n AlgoOrderType,\n API,\n OrderSide,\n OrderStatus,\n OrderType,\n} from \"@orderly.network/types\";\nimport {\n capitalizeFirstLetter,\n cn,\n Column,\n Flex,\n Text,\n} from \"@orderly.network/ui\";\nimport { commifyOptional, Decimal } from \"@orderly.network/utils\";\nimport {\n grayCell,\n parseBadgesFor,\n upperCaseFirstLetter,\n} from \"../../../utils/util\";\nimport { TabType } from \"../../orders.widget\";\nimport { Badge } from \"@orderly.network/ui\";\nimport { OrderQuantity } from \"./quantity\";\nimport { Price } from \"./price\";\nimport { TriggerPrice } from \"./triggerPrice\";\nimport { CancelButton } from \"./cancelBtn\";\nimport { Renew } from \"./renew\";\nimport { OrderTriggerPrice, TPSLTriggerPrice } from \"./tpslTriggerPrice\";\nimport { BracketOrderPrice } from \"./bracketOrderPrice\";\nimport { TP_SLEditButton } from \"./tpslEdit\";\nimport { TPSLOrderPrice } from \"./tpslPrice\";\nimport { useMemo } from \"react\";\nimport { useSymbolContext } from \"../symbolProvider\";\n\nexport const useOrderColumn = (props: {\n _type: TabType;\n onSymbolChange?: (symbol: API.Symbol) => void;\n pnlNotionalDecimalPrecision?: number;\n}) => {\n const { _type, onSymbolChange, pnlNotionalDecimalPrecision } = props;\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: \"Order price\",\n disableEdit: true,\n enableSort: false,\n }),\n avgOpen({ width: 130, enableSort: false }),\n tpslTriggerPrice({ width: 130 }),\n realizedPnL({\n width: 124,\n pnlNotionalDecimalPrecision: pnlNotionalDecimalPrecision,\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 ];\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 }),\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: \"Order price\",\n disableEdit: true,\n }),\n avgPrice({ width: 124 }),\n triggerPrice({ width: 124, disableEdit: true }),\n realizedPnL({\n width: 124,\n pnlNotionalDecimalPrecision: pnlNotionalDecimalPrecision,\n }),\n estTotal({ width: 124 }),\n fee({ width: 124 }),\n status({ width: 124 }),\n reduceOnly({ width: 124 }),\n hidden({ width: 124 }),\n orderTime({ width: 124 }),\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: 124 }),\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 }),\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]);\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: \"Instrument\",\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 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 >\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: \"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 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: \"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: \"Filled / 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 render: (value: string, record: any) => {\n if (\n record.type === OrderType.CLOSE_POSITION &&\n record.status !== OrderStatus.FILLED\n ) {\n return \"Entire position\";\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: \"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 render: (value: string, record: any) => {\n if (record.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n return \"Entire position\";\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 ?? \"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 // if (type == \"asc\") {\n // return compareNumbers(a.price ?? 0, b.price ?? 0);\n // }\n // return compareNumbers(b.price ?? 0, a.price ?? 0);\n }\n : undefined,\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 ?? \"Price\",\n dataIndex: \"price\",\n className: option?.className,\n width: option?.width,\n onSort: option?.enableSort,\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: \"Avg. price\",\n dataIndex: \"average_executed_price\",\n className: option?.className,\n width: option?.width,\n onSort: option?.enableSort,\n render: (value: string, record: any) => {\n // console.log(\"average_executed_price\", record.average_executed_price);\n\n return <Text>{commifyOptional(value)}</Text>;\n },\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: \"Trigger\",\n className: option?.className,\n dataIndex: \"trigger_price\",\n width: option?.width,\n onSort: option?.enableSort,\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}): Column<API.Order> {\n return {\n title: option?.title ?? \"Trigger\",\n className: option?.className,\n dataIndex: \"tpsl_trigger_price\",\n width: option?.width,\n onSort: option?.enableSort,\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: \"TP/SL\",\n className: option?.className,\n dataIndex: \"bracketOrderPrice\",\n width: option?.width,\n onSort: option?.enableSort,\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: \"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 render: (value: string, record: any) => {\n if (option?.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 <Text.numeral rm={Decimal.ROUND_DOWN}>{value()}</Text.numeral>;\n }\n\n if (\n record.type === OrderType.CLOSE_POSITION &&\n record.status !== OrderStatus.FILLED\n ) {\n return \"Entire position\";\n }\n\n return (\n <Text.numeral rm={Decimal.ROUND_DOWN} dp={2}>\n {record.total_executed_quantity === 0 ||\n Number.isNaN(record.average_executed_price) ||\n record.average_executed_price === null\n ? \"--\"\n : `${\n record.total_executed_quantity * record.average_executed_price\n }`}\n </Text.numeral>\n );\n },\n };\n}\n\nfunction realizedPnL(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n pnlNotionalDecimalPrecision?: number;\n}): Column<API.Order> {\n return {\n title: \"Real. PnL\",\n dataIndex: \"realized_pnl\",\n width: option?.width,\n className: option?.className,\n render: (_value: number | undefined) => {\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 return (\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 );\n },\n };\n}\n\nfunction reduceOnly(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: \"Reduce only\",\n dataIndex: \"reduce_only\",\n width: option?.width,\n className: option?.className,\n render: (value: boolean) => {\n return <Text>{value ? \"Yes\" : \"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: \"Hidden\",\n dataIndex: \"visible\",\n width: option?.width,\n className: option?.className,\n render: (value: number, record) => {\n return <Text>{record.visible_quantity !== 0 ? \"No\" : \"Yes\"}</Text>;\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: \"Order time\",\n dataIndex: \"created_time\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\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: \"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: \"Notional\",\n dataIndex: \"notional\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\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: \"Notional\",\n dataIndex: \"executed\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\n render: (value: any, record: any) => {\n if (record.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n return \"Entire position\";\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 return {\n title: \"Status\",\n dataIndex: \"status\",\n width: option?.width,\n onSort: option?.enableSort,\n className: option?.className,\n render: (value: string, record: any) => {\n const status = value || record.algo_status;\n\n if (status === \"NEW\") {\n return upperCaseFirstLetter(\"pending\");\n }\n return upperCaseFirstLetter(status);\n },\n };\n}\n\nfunction avgOpen(option?: {\n enableSort?: boolean;\n width?: number;\n className?: string;\n}): Column<API.Order> {\n return {\n title: \"Avg. open\",\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 // if (type == \"asc\") {\n // return compareNumbers(\n // a.average_executed_price ?? 0,\n // b.average_executed_price ?? 0\n // );\n // }\n // return compareNumbers(\n // b.average_executed_price ?? 0,\n // a.average_executed_price ?? 0\n // );\n }\n : undefined,\n className: option?.className,\n render: (value: string, record) => (\n <Text.numeral className=\"oui-break-normal oui-whitespace-nowrap oui-font-semibold\">\n {record.average_executed_price}\n </Text.numeral>\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 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","import {\n FC,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\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 { ConfirmContent, EditType } from \"./editOrder/confirmContent\";\nimport { InnerInput } from \"./editOrder/innerInput\";\nimport { useOrderListContext } from \"../orderListContext\";\nimport { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\nimport { useSymbolContext } from \"../symbolProvider\";\nimport { grayCell } from \"../../../utils/util\";\nimport { useMaxQty, useOrderEntry, utils } from \"@orderly.network/hooks\";\nimport { commifyOptional, Decimal } from \"@orderly.network/utils\";\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\n const [quantity, originSetQuantity] = useState<string>(\n order.quantity.toString()\n );\n\n const [editing, setEditing] = useState(false);\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 `Quantity should be less than position quantity : ${positionQty}`\n );\n } else {\n const quantity = Number(qty);\n if (maxQty && quantity > maxQty) {\n setError(\n `Quantity should be less than ${commifyOptional(maxQty, {\n fix: base_dp,\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 list = [\n {\n label: \"0%\",\n value: 0,\n },\n {\n label: \"25%\",\n value: 0.25,\n },\n {\n label: \"50%\",\n value: 0.5,\n },\n {\n label: \"75%\",\n value: 0.75,\n },\n {\n label: \"Max\",\n value: 1,\n },\n ];\n\n return (\n <Flex gap={2} width={\"100%\"}>\n {list.map((item, index) => {\n return (\n <Button\n key={index}\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n onClick={(e) => {\n e.stopPropagation();\n 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 { Button, CloseIcon, ThrottledButton } from \"@orderly.network/ui\";\nimport { commify } from \"@orderly.network/utils\";\nimport { FC, useMemo } from \"react\";\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\n const label = useMemo(() => {\n switch (type) {\n case EditType.quantity:\n return `You agree changing the quantity of ${base}-PERP order to${\" \"}`;\n case EditType.price:\n return `You agree changing the price of ${base}-PERP order to${\" \"}`;\n case EditType.triggerPrice:\n return `You agree changing the trigger price of ${base}-PERP order to${\" \"}`;\n }\n }, [type]);\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 {label}\n <span className=\"oui-text-warning-darken\">{commify(value)}</span>.\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 Cancel\n </Button>\n <ThrottledButton size={\"md\"} loading={isSubmitting} onClick={onConfirm}>\n 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={18} />\n </button>\n </div>\n );\n};\n","import {\n CheckIcon,\n CloseIcon,\n cn,\n Input,\n inputFormatter,\n Tooltip,\n} 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 { API } from \"@orderly.network/types\";\nimport { commifyOptional } from \"@orderly.network/utils\";\nimport {\n FC,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useSymbolPriceRange } from \"@orderly.network/hooks\";\nimport { cn, Flex, Popover, toast, Text } from \"@orderly.network/ui\";\n\nimport { ConfirmContent, EditType } from \"./editOrder/confirmContent\";\nimport { InnerInput } from \"./editOrder/innerInput\";\nimport { useOrderListContext } from \"../orderListContext\";\nimport { useSymbolContext } from \"../symbolProvider\";\nimport { grayCell } from \"../../../utils/util\";\n\nexport const Price = (props: {\n order: API.OrderExt;\n disableEdit?: boolean;\n}) => {\n const { order } = props;\n\n const [price, setPrice] = useState<string>(\n 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 // console.log(\"price node\", order);\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 `Price can not be greater than ${rangeInfo.max} USDC.`;\n }\n if (Number(price) < rangeInfo.min) {\n return `Price can not be less than ${rangeInfo.min} USDC.`;\n }\n return \"\";\n }, [isStopMarket, editing, rangeInfo, price]);\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>Market</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 { API } from \"@orderly.network/types\";\nimport { FC, useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn, Flex, Popover, toast, Text } from \"@orderly.network/ui\";\n\nimport { ConfirmContent, EditType } from \"./editOrder/confirmContent\";\nimport { InnerInput } from \"./editOrder/innerInput\";\nimport { useOrderListContext } from \"../orderListContext\";\nimport { useSymbolContext } from \"../symbolProvider\";\nimport { grayCell } from \"../../../utils/util\";\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 { API } from \"@orderly.network/types\";\nimport { Button, ThrottledButton, toast } from \"@orderly.network/ui\";\nimport { FC, useContext, useState } from \"react\";\nimport { useOrderListContext } from \"../orderListContext\";\n\nexport const CancelButton: FC<{\n order: API.Order;\n}> = (props) => {\n const { order } = props;\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 Cancel\n </ThrottledButton>\n );\n};\n","import { FC, useCallback, useContext, useMemo, useState } from \"react\";\n\nimport { useConfig, useMutation } from \"@orderly.network/hooks\";\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 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\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 Renew\n </Button>\n );\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\";\n\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\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 TP&nbsp;-&nbsp;\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 SL&nbsp;-&nbsp;\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]);\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 <Tooltip content={pnl} className=\"oui-bg-base-5\" tooltipProps={{\n arrow: {\n className: \"oui-fill-base-5\"\n }\n }}>{content}</Tooltip>;\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 pnl = utils.priceToPnl(\n {\n qty,\n price,\n entryPrice,\n orderSide,\n orderType,\n },\n {\n symbol: symbolInfo,\n }\n );\n\n const type = orderType === AlgoOrderType.TAKE_PROFIT ? \"TP\" : \"SL\";\n\n // console.log(\"trigger price item\", \"dp\", symbolInfo.quote_dp);\n \n\n return (\n <div className=\"oui-flex oui-items-center\">\n <span className=\"oui-text-base-contrast-54 oui-mr-1\">{`${type} PnL:`}</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 { useMarkPricesStream, utils } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { useMemo } from \"react\";\nimport { Flex, Tooltip, Text, cn } from \"@orderly.network/ui\";\nimport { useSymbolContext } from \"../symbolProvider\";\nimport { calcBracketRoiAndPnL } from \"../../../utils/util\";\n\nexport const BracketOrderPrice = (props: { order: API.AlgoOrderExt }) => {\n const { order } = props;\n const { quote_dp, base_dp } = useSymbolContext();\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={<Text intensity={80}>TP PnL: &nbsp;</Text>}\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={<Text intensity={80}>SL PnL: &nbsp;</Text>}\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 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}`}&nbsp;-&nbsp;\n </span>\n }\n >\n {value}\n </Text.numeral>\n ) : (\n <></>\n );\n};\n","import { API } from \"@orderly.network/types\";\nimport { PositionTPSLPopover } from \"@orderly.network/ui-tpsl\";\nimport { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\nimport { useSymbolContext } from \"../symbolProvider\";\n\nexport const TP_SLEditButton = (props: { order: API.Order }) => {\n const { position, order } = useTPSLOrderRowContext();\n const { quote_dp, base_dp } = useSymbolContext();\n return (\n <PositionTPSLPopover\n quoteDP={quote_dp}\n baseDP={base_dp}\n position={position!}\n order={order}\n label=\"Edit\"\n isEditing\n />\n );\n};\n","import { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\n\n\nexport const TPSLOrderPrice = () => {\n const { sl_trigger_price, tp_trigger_price } = useTPSLOrderRowContext();\n return (\n <div>\n {!!tp_trigger_price ? (\n <div className={\"oui-text-base-contrast-80 oui-td-bg-transparent\"}>\n <span className={\"oui-text-base-contrast-54\"}>\n TP&nbsp;-&nbsp;\n </span>\n <span>Market</span>\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 SL&nbsp;-&nbsp;\n </span>\n <span>Market</span>\n </div>\n ) : null}\n </div>\n );\n};\n","import React, { FC } from \"react\";\nimport { Divider, Flex, Grid, Text } from \"@orderly.network/ui\";\nimport { OrderCellState } from \"./orderCell.script\";\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} from \"./items\";\nimport { EditBtnWidget } from \"./editBtn\";\nimport { CancelBtnWidget } from \"./cancelBtn\";\nimport { BracketOrderPriceWidget } from \"./bracketOrderPrice\";\nimport { TabType } from \"../../orders.widget\";\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 </>\n );\n }\n}\n","import { Badge, cn, Flex, Statistic, Text, Tooltip } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderCellState } from \"./orderCell.script\";\nimport {\n FC,\n PropsWithChildren,\n ReactNode,\n useCallback,\n useMemo,\n useState,\n} from \"react\";\nimport { parseBadgesFor, upperCaseFirstLetter } from \"../../../utils/util\";\nimport {\n AlgoOrderRootType,\n API,\n OrderStatus,\n OrderType,\n} from \"@orderly.network/types\";\nimport { useTPSLOrderRowContext } from \"../tpslOrderRowContext\";\nimport { OrderSide } from \"@orderly.network/types\";\n\nexport const SymbolToken: FC<OrderCellState> = (props) => {\n const { item } = props;\n const isBuy = item.side === OrderSide.BUY;\n return (\n <Text.formatted\n intensity={80}\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"sm\"\n // @ts-ignore\n prefix={\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? \"Buy\" : \"Sell\"}\n </Badge>\n }\n onClick={() => {\n props.onSymbolChange?.({ symbol: 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 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 return (\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 </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\n // @ts-ignore\n const status = item.status || item.algo_status;\n\n const label = () => {\n if (status === \"NEW\") {\n return upperCaseFirstLetter(\"pending\");\n }\n return upperCaseFirstLetter(status);\n };\n\n return (\n <Text.formatted intensity={36} size=\"2xs\">\n {label()}\n </Text.formatted>\n );\n};\n\nexport const Qty: FC<OrderCellState> = (props) => {\n const { item } = props;\n\n const isEntirePosition =\n item.type === OrderType.CLOSE_POSITION &&\n // @ts-ignore\n item?.status !== OrderStatus.FILLED;\n\n return (\n <Statistic\n label={\"Qty.\"}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.base_dp}\n padding={false}\n coloring\n placeholder=\"Entire position\"\n intensity={80}\n >\n {isEntirePosition ? \"--\" : item.quantity}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Filled: FC<OrderCellState> = (props) => {\n const { item } = props;\n\n return (\n <Statistic\n label={<Text>Filled</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\n dp={props.quote_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\n return (\n <Statistic\n align=\"end\"\n label={<Text>Notional{<Text intensity={20}>(USDC)</Text>}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\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 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={<Text>Notional{<Text intensity={20}>(USDC)</Text>}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral\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\n return (\n <Statistic\n label={\"Trigger price\"}\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\n return (\n <Statistic\n label={\"Mark price\"}\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 isAlgoOrder = item?.algo_order_id !== undefined;\n const isStopMarket = item?.type === \"MARKET\" && isAlgoOrder;\n return (\n <Statistic\n label={\"Limit price\"}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n {isStopMarket ? (\n <Text>Market</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\n return (\n <Statistic\n label={\"TP trigger\"}\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}>TP PnL:&nbsp;&nbsp;</Text>}\n suffix={<Text intensity={20}>&nbsp;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\n return (\n <Statistic\n label={\"SL trigger\"}\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={<Text intensity={54}>SL PnL:&nbsp;&nbsp;</Text>}\n suffix={<Text intensity={20}>&nbsp;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 { tp_trigger_price } = useTPSLOrderRowContext();\n\n return (\n <Statistic\n label={\"TP price\"}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text intensity={80}>Market</Text>\n </Statistic>\n );\n};\nexport const SLPrice: FC<OrderCellState> = (props) => {\n return (\n <Statistic\n label={\"SL price\"}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text intensity={80}>Market</Text>\n </Statistic>\n );\n};\n\nexport const TPSLQuantity: FC<OrderCellState> = (props) => {\n const { item } = props;\n\n const quantity = useMemo(() => {\n if (item.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL) {\n return <span className=\"oui-text-base-contrast-80\">Entire position</span>;\n }\n\n return (\n <Text.numeral\n dp={props.quote_dp}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n padding={false}\n >\n {item.quantity}\n </Text.numeral>\n );\n }, [item]);\n\n return (\n <Statistic\n label={\"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 return (\n <Statistic\n label={<Text>Avg price{<Text intensity={20}>(USDC)</Text>}</Text>}\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 return (\n <Statistic\n label={<Text>Order price{<Text intensity={20}>(USDC)</Text>}</Text>}\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=\"Market\"\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 return (\n <Statistic\n label={<Text>Real. PnL{<Text intensity={20}>(USDC)</Text>}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\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 </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 tooltipProps={{\n arrow: {\n className: classNames?.arrow,\n },\n }}\n >\n <div onClick={() => setOpen((e) => !e)}>{props.children}</div>\n </Tooltip>\n );\n};\n","import { FC } from \"react\";\nimport { Button } from \"@orderly.network/ui\";\nimport { EditBtnState } from \"./editBtn.script\";\n\nexport const EditBtn: FC<EditBtnState> = (props) => {\n const { item } = props;\n const isBuy = item.quantity > 0;\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 Edit\n </Button>\n </>\n );\n};\n","import { modal } from \"@orderly.network/ui\";\nimport { OrderCellState } from \"../orderCell.script\";\nimport { EditSheetWidget } from \"../editSheet\";\nimport { useCallback } from \"react\";\nimport { useOrderListContext } from \"../../orderListContext\";\nimport { TabType } from \"../../../orders.widget\";\nimport { PositionTPSLSheet } from \"@orderly.network/ui-tpsl\";\nimport { useTPSLOrderRowContext } from \"../../tpslOrderRowContext\";\nimport { useSymbolContext } from \"../../symbolProvider\";\n\nexport const useEditBtnScript = (props: { state: OrderCellState }) => {\n const { state } = props;\n const { editAlgoOrder, editOrder } = useOrderListContext();\n const { order, position } = useTPSLOrderRowContext();\n const onShowEditSheet = useCallback(() => {\n if (props.state.type === TabType.tp_sl) {\n modal\n .sheet({\n title: \"TP/SL\",\n content: (\n <PositionTPSLSheet\n isEditing\n order={props.state.item}\n position={position!}\n symbolInfo={props.state.origin}\n />\n ),\n })\n .catch((error) => {\n console.log(error);\n });\n } else {\n modal\n .sheet({\n title: \"Edit order\",\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, useEffect } from \"react\";\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 { EditSheetState } from \"./editSheet.script\";\nimport { ConfirmDialogContent } from \"./editDialogContent\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { parseBadgesFor } from \"../../../../utils/util\";\nimport { utils } from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport const EditSheet: FC<EditSheetState> = (props) => {\n const { item } = props;\n const isBuy = item.side === OrderSide.BUY;\n\n // useEffect(() => {\n // if (props.errors?.order_price?.message) {\n // toast.error(props.errors?.order_price?.message);\n // } else if (props.errors?.order_quantity?.message) {\n // toast.error(props.errors?.order_quantity?.message);\n // } else if (props.errors?.total?.message) {\n // toast.error(props.errors?.total?.message);\n // } else if (props.errors?.trigger_price?.message) {\n // toast.error(props.errors?.trigger_price?.message);\n // }\n // }, [props.errors]);\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\"\n ? \"primary\"\n : \"neutral\"\n }\n size=\"xs\"\n >\n {e}\n </Badge>\n ))}\n {isBuy && (\n <Badge color=\"success\" size=\"xs\">\n Buy\n </Badge>\n )}\n {!isBuy && (\n <Badge color=\"danger\" size=\"xs\">\n Sell\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider intensity={8} className=\"oui-w-full\" />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text>Last price</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 Trigger price\n </Text>\n }\n suffix={\n <Text intensity={54} className=\"oui-px-3\">\n {props.quote}\n </Text>\n }\n color={\n props.errors?.trigger_price?.message ? \"danger\" : undefined\n }\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={props.errors?.trigger_price?.message}\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-98 oui-w-full\",\n root: cn(\n \"oui-outline-line-12\",\n props.errors?.trigger_price?.message && \"oui-outline-danger\"\n ),\n }}\n />\n )}\n <Input.tooltip\n prefix={\n <Text intensity={54} className=\"oui-px-3\">\n Price\n </Text>\n }\n suffix={\n <Text intensity={54} className=\"oui-px-3\">\n {props.quote}\n </Text>\n }\n color={props.errors?.order_price?.message ? \"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={props.isStopMarket ? \"Market\" : props.price}\n onValueChange={(e) => props.setPrice(e)}\n tooltip={props.errors?.order_price?.message}\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-98\",\n root: cn(\n \"oui-outline-line-12\",\n props.errors?.order_price?.message && \"oui-outline-danger\"\n ),\n }}\n />\n <Input.tooltip\n prefix={\n <Text intensity={54} className=\"oui-px-3\">\n {\"Quantity\"}\n </Text>\n }\n suffix={\n <Text intensity={54} className=\"oui-px-3\">\n {props.base}\n </Text>\n }\n color={props.errors?.order_quantity?.message ? \"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={props.errors?.order_quantity?.message}\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-98\",\n root: cn(\n \"oui-outline-line-12\",\n props.errors?.order_quantity?.message && \"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 gap={1}>\n <Text size=\"2xs\" color=\"primary\">\n 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 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 Confirm\n </ThrottledButton>\n </Flex>\n </Flex>\n\n <SimpleDialog\n open={props.dialogOpen}\n onOpenChange={props.setDialogOpen}\n title=\"Edit order\"\n size=\"xs\"\n actions={{\n primary: {\n label: \"Confirm\",\n onClick: props.onDialogConfirm,\n loading: props.submitting,\n fullWidth: true,\n },\n secondary: {\n label: \"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 {\n Badge,\n Button,\n Checkbox,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n Slider,\n Text,\n} from \"@orderly.network/ui\";\nimport { EditSheetState } from \"./editSheet.script\";\nimport { FC } from \"react\";\nimport { commify, Decimal } from \"@orderly.network/utils\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { parseBadgesFor } from \"../../../../utils/util\";\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 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\"\n ? \"primary\"\n : \"neutral\"\n }\n size=\"xs\"\n >\n {e}\n </Badge>\n ))}\n {isBuy && (\n <Badge color=\"success\" size=\"xs\">\n Buy\n </Badge>\n )}\n {!isBuy && (\n <Badge color=\"danger\" size=\"xs\">\n Sell\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider />\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>Trigger 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 >\n {triggerPrice ?? \"--\"}\n </Text.numeral>\n </Flex>\n )}\n\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>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 ? \"Market\" : \"--\"}\n >\n {props.isStopMarket ? \"Market\" : price ?? \"--\"}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>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 Disable order confirmation\n </label>\n </Flex>\n </div>\n );\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { OrderCellState } from \"../orderCell.script\";\nimport {\n useDebouncedCallback,\n useLocalStorage,\n useMaxQty,\n useOrderEntity,\n // useOrderEntry,\n useOrderEntry_deprecated,\n useThrottledCallback,\n utils,\n} from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { modal, toast, useModal } from \"@orderly.network/ui\";\nimport { API, OrderEntity } from \"@orderly.network/types\";\nimport { useOrderListContext } from \"../../orderListContext\";\nimport { OrderTypeView } from \"../items\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { useTPSLOrderRowContext } from \"../../tpslOrderRowContext\";\nimport { useSymbolContext } from \"../../symbolProvider\";\n\n// export 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// }) => {\n// const { state, editAlgoOrder, editOrder, autoCheckInput = true } = props;\n// const { item: order } = state;\n// const { hide } = useModal();\n// const [dialogOpen, setDialogOpen] = useState(false);\n// const [submitting, setSubmitting] = 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\n// const [price, setPrice] = useState(order.price ?? \"Market\");\n// const [triggerPrice, setTriggerPrice] = useState(`${order.trigger_price}`);\n// const [quantity, setQuantity] = useState(`${order.quantity}`);\n\n// const [sliderValue, setSliderValue] = useState<undefined | number>(undefined);\n\n// /**\n// * {\n// * order_price: {type: 'min/max', message: ''},\n// * order_quantity: {type: 'min/max', message: ''},\n// * total: {type: 'min/max', message: ''},\n// * trigger_price: {type: 'required/min/max' , message: ''},\n// * }\n// */\n// const [errors, setErrors] = useState<{\n// order_price?: { message: string };\n// order_quantity?: { message: string };\n// total?: { message: string };\n// trigger_price?: { message: string };\n// }>({});\n\n// const { markPrice, maxQty, helper, metaState } = useOrderEntry_deprecated(\n// // @ts-ignore\n// order.symbol,\n// order.side\n// );\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 tempOrderEntity = useRef<OrderEntity>();\n\n// const onClose = () => {\n// hide();\n// };\n// const onCloseDialog = () => {\n// setDialogOpen(false);\n// };\n\n// const validatorInput = async (): Promise<{\n// values: OrderEntity;\n// errors?: any;\n// }> => {\n// let values: OrderEntity = {\n// order_quantity: quantity,\n// trigger_price: `${triggerPrice}`,\n// symbol: order.symbol,\n// // @ts-ignore\n// order_type: orderType,\n// // @ts-ignore\n// side: order.side,\n// reduce_only: Boolean(order.reduce_only),\n// };\n// if (!isMarketOrder) {\n// values = {\n// ...values,\n// order_price: `${price}`,\n// }\n// }\n\n// console.log(\"validator\", values, order);\n\n// const errors = await helper.validator(values);\n// if (errors.total?.message !== undefined) {\n// toast.error(errors.total?.message);\n// }\n// // console.log(\"errors is\", values, errors);\n\n// setErrors(errors);\n// return {\n// errors,\n// values,\n// };\n// };\n\n// useEffect(() => {\n// if (autoCheckInput) {\n// validatorInput();\n// }\n// }, [price, triggerPrice, quantity, autoCheckInput]);\n\n// const onSheetConfirm = async () => {\n// setDialogOpen(false);\n// const { values: _data, errors } = await validatorInput();\n// let values = _data;\n\n// if (Object.keys(errors).length > 0) {\n// return;\n// }\n\n// if (typeof order.order_tag !== undefined && order.reduce_only !== true) {\n// values = { ...values, order_tag: order.order_tag };\n// }\n\n// tempOrderEntity.current = values;\n// if (orderConfirm) {\n// setDialogOpen(true);\n// } else {\n// onSubmit(values);\n// }\n// };\n\n// const onDialogConfirm = () => {\n// if (tempOrderEntity.current) {\n// onSubmit(tempOrderEntity.current);\n// }\n// };\n\n// const onSubmit = useCallback(\n// async (values: OrderEntity) => {\n// let future;\n// let 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// 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// useEffect(() => {\n// if (typeof sliderValue === \"undefined\" && maxQty) {\n// const value = new Decimal(order.quantity).div(maxQty).toNumber();\n// setSliderValue(value);\n// }\n// }, [maxQty, setSliderValue]);\n\n// const percentages = useMemo(() => {\n// return Math.min(Number(quantity) / maxQty, 1);\n// }, [quantity]);\n\n// return {\n// ...state,\n// curMarkPrice: markPrice,\n// isAlgoOrder,\n// isStopMarket,\n// price,\n// setPrice,\n// priceEdit: !isStopMarket,\n// triggerPrice,\n// setTriggerPrice,\n// quantity,\n// setQuantity,\n// maxQty,\n// sliderValue,\n// setSliderValue,\n// percentages,\n// onClose,\n// onSheetConfirm,\n// errors,\n\n// dialogOpen,\n// setDialogOpen,\n// onDialogConfirm,\n// onCloseDialog,\n// submitting,\n\n// orderConfirm,\n// setOrderConfirm,\n// };\n// };\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 { state, editAlgoOrder, editOrder, autoCheckInput = true, position } = 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 [sliderValue, setSliderValue] = useState(0);\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 setValue = (key: any, value: any) => {\n // setFormattedOrder((oldValue) => ({\n // ...oldValue,\n // [key]: value,\n // }));\n // };\n\n // console.log(\n // \"formattedOrder\",\n // formattedOrder,\n // errors,\n // maxQty,\n // base_dp,\n // base_tick,\n // order,\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 let 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 {\n // formattedOrder,\n // setValue,\n // setValues,\n // symbolInfo,\n // markPrice,\n\n // metaState: { errors },\n // helper,\n // } = useOrderEntry(order.symbol, {\n // initialOrder: {\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 // },\n // });\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 { FC } from \"react\";\nimport { Button, Flex, SimpleDialog, Text } from \"@orderly.network/ui\";\nimport { CancelBtnState } from \"./cancelBtn.script\";\n\nexport const CancelBtn: FC<CancelBtnState> = (props) => {\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 Cancel\n </Button>\n {props.open && (\n <SimpleDialog\n size=\"xs\"\n open={props.open}\n onOpenChange={props.setOpen}\n title=\"Cancel order\"\n actions={{\n primary: {\n label: \"Confirm\",\n loading: props.isLoading,\n fullWidth: true,\n size: \"md\",\n onClick: (e) => {\n props.onCancel(e);\n },\n },\n secondary: {\n label: \"Cancel\",\n fullWidth: true,\n size: \"md\",\n onClick: () => {\n props.onClose();\n },\n },\n }}\n >\n <Text size=\"2xs\" intensity={54}>\n Are you sure you want to cancel your pending order.\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 { cn, Flex, SimpleDialog, Text } from \"@orderly.network/ui\";\nimport { BracketOrderPriceState } from \"./bracketOrderPrice.script\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { MobileTooltip } from \"../items\";\n\nexport const BracketOrderPrice: FC<BracketOrderPriceState> = (props) => {\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={<Text intensity={80}>TP PnL: &nbsp;</Text>}\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={<Text intensity={80}>SL PnL: &nbsp;</Text>}\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} `}:&nbsp;&nbsp;\n </span>\n }\n >\n {value}\n </Text.numeral>\n ) : (\n <></>\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 { API } from \"@orderly.network/types\";\nimport { useSymbolContext } from \"../symbolProvider\";\nimport { TabType } from \"../../orders.widget\";\n\nexport const useOrderCellScript = (props: {\n item: API.AlgoOrderExt;\n index: number;\n type: TabType;\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\";\n\nexport const OrderCellWidget = (props: {\n item: API.AlgoOrderExt;\n index: number;\n className?: string;\n type: TabType;\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 { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n AlgoOrderRootType,\n OrderStatus,\n OrderSide,\n API,\n} from \"@orderly.network/types\";\nimport { useLocalStorage, useOrderStream } from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { TabType } from \"../orders.widget\";\nimport { modal, usePagination, Text } from \"@orderly.network/ui\";\nimport { differenceInDays, setHours, subDays } from \"date-fns\";\nimport { useFormatOrderHistory } from \"./useFormatOrderHistory\";\n\nexport const useOrderListScript = (props: {\n type: TabType;\n ordersStatus?: OrderStatus;\n symbol?: string;\n enableLoadMore?: boolean;\n onSymbolChange?: (symbol: API.Symbol) => void;\n filterConfig?: {\n side?: OrderSide | \"all\";\n range?: {\n from?: Date;\n to?: Date;\n };\n };\n pnlNotionalDecimalPrecision?: number;\n}) => {\n const {\n ordersStatus,\n type,\n enableLoadMore = false,\n onSymbolChange,\n filterConfig,\n pnlNotionalDecimalPrecision,\n } = props;\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 { orderStatus, ordersSide, dateRange, filterItems, onFilter } =\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 [\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 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 ? \"Cancel all pending orders\"\n : props.type === TabType.tp_sl\n ? \"Cancel all TP/SL orders\"\n : \"\";\n const content = TabType.pending\n ? \"Are you sure you want to cancel all of your pending orders?\"\n : props.type === TabType.tp_sl\n ? \"Are you sure you want to cancel all of your TP/SL orders?\"\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]);\n\n const formattedData = useFormatOrderHistory(data ?? []);\n\n const dataSource =\n useDataTap(type !== TabType.tp_sl ? formattedData : data) ?? 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};\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 [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 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(), 7)),\n })\n : {});\n\n const [dateRange, setDateRange] = useState<{\n from?: Date;\n to?: Date;\n }>(defaultRange);\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 };\n\n const filterItems = useMemo((): any[] => {\n const sideFilter = {\n type: \"select\",\n name: \"side\",\n options: [\n {\n label: \"All sides\",\n value: \"all\",\n },\n {\n label: \"Buy\",\n value: \"BUY\",\n },\n {\n label: \"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: \"All status\",\n value: \"all\",\n },\n {\n label: \"Pending\",\n value: OrderStatus.INCOMPLETE,\n },\n {\n label: \"Filled\",\n value: OrderStatus.FILLED,\n },\n {\n label: \"Partial filled\",\n value: OrderStatus.PARTIAL_FILLED,\n },\n {\n label: \"Canceled\",\n value: OrderStatus.CANCELLED,\n },\n {\n label: \"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]);\n\n return {\n filterItems,\n onFilter,\n ordersSide: ordersSide === \"all\" ? undefined : ordersSide,\n dateRange,\n orderStatus: orderStatus === \"all\" ? undefined : orderStatus,\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),\n});\n","import {\n API,\n AccountStatusEnum,\n AlgoOrderRootType,\n OrderStatus,\n} from \"@orderly.network/types\";\nimport { useMemo } from \"react\";\n\nexport const useFormatOrderHistory = (data: API.AlgoOrderExt[]) => {\n const formattedData = useMemo(() => {\n // if (state.status < AccountStatusEnum.EnableTrading || !data) {\n // return [];\n // }\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","import { OrderSide, OrderStatus } from \"@orderly.network/types\";\nimport { useOrderListScript } from \"./orderList.script\";\nimport { DesktopOrderList, MobileOrderList } from \"./orderList.ui\";\nimport { TabType } from \"../orders.widget\";\nimport { API } from \"@orderly.network/types\";\n\nexport const DesktopOrderListWidget = (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 pnlNotionalDecimalPrecision?: number;\n testIds?: {\n tableBody?: string;\n }\n}) => { \n const { testIds, ...rest} = props;\n const state = useOrderListScript(rest);\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 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 { FC } from \"react\";\nimport { useOrdersScript } from \"./orders.script\";\nimport { Orders } from \"./orders.ui\";\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 const OrdersWidget: FC<{\n current?: TabType;\n pnlNotionalDecimalPrecision?: number;\n}> = (props) => {\n const state = useOrdersScript(props);\n\n return <Orders {...state} />;\n};\n"]}