import React, { useEffect, useImperativeHandle, useRef, useState } from "react"; import { PositionDeliveryModalProps } from "./interface"; import Modal, { ModalProps } from "../Modal"; import { Select } from "@atomintl/aui-next"; import { NumberInput } from "@components/Input"; import { BottomTips, Hairline } from "@components/PositionDeliveryModal/Widgets"; import { Headers } from "./Widgets/Headers"; import { ArrowDown } from "@icons/ArrowDown"; import { DirEnum } from "@utils/contractRules"; import StartAdornment from "@components/PositionDeliveryModal/Widgets/StartAdornment"; import { endAdornmentSelector, numberInput, selector } from "./config/deliveryStyles"; import { priceTypes, units } from "@components/PositionDeliveryModal/config"; import { curry } from "ramda"; import "./index.css"; import ProfitTips, { TipsPropsRefProps } from "@components/PositionDeliveryModal/Widgets/ProfitTips"; import SaranWrap from "@components/PositionDeliveryModal/Widgets/SaranWrap"; import { toDefaultNumber } from "@utils/FormatNumber"; export type SelectorValueProps = { label: string; value: string } | undefined; const { Option } = Select; /** * ### 引用方法 * ```tsx * import { PositionDeliveryModal } from "@atomintl/exchange-ui"; * ``` */ export const PositionDeliveryModal: React.FC = props => { const { onConfirm, symbol, side, level, avgEntryPrice, tickSizeScale, newestPrice, positionAmt, ctVal, ctValScale, costSizeScale, posMargin, initPxs, setInitPxs } = props; const [profitV, setProfitV] = useState(""); const [profitUnit, setProfitUnit] = useState<{ label: string; value: string }>(units[0]); const [profitType, setProfitType] = useState<{ label: string; value: string }>(priceTypes[0]); const [lossV, setLossV] = useState(""); const [lossUnit, setLossUnit] = useState<{ label: string; value: string }>(units[0]); const [lossType, setLossType] = useState<{ label: string; value: string }>(priceTypes[0]); const profitTipsRef = useRef(); const lossTipsRef = useRef(); const finder2Trigger = (arr: Array, func: Function, kv: string) => { const o: SelectorValueProps = arr.find(x => x.value == kv); o && func(o); }; const curriedFinder2Trigger = curry(finder2Trigger); const onOkCb = () => { onConfirm?.({ profitV, profitUnit, profitType, profitStrikePrice: profitTipsRef.current?.getStrikePrice(), lossV, lossUnit, lossType, lossStrikePrice: lossTipsRef.current?.getStrikePrice() }); }; useEffect(() => setProfitV(""), [profitUnit]); useEffect(() => setLossV(""), [lossUnit]); useEffect(() => { if (!!props?.open) { setProfitV(""); setProfitUnit(units[0]); setProfitType(priceTypes[0]); setLossV(""); setLossUnit(units[0]); setLossType(priceTypes[0]); } }, [props?.open]); useImperativeHandle(props?.onRef, () => ({})); return ( <>
{!!initPxs?.tpTriggerPx ? ( ) : ( <> } endAdornment={ } /> )}
{!!initPxs?.slTriggerPx ? ( ) : ( <> { // if (lossUnit.value === '2' && toDefaultNumber(v) > 0){ // v = new Decimal(toDefaultNumber(v)).mul(-1).toString(); // } setLossV(v); }} variant="outlined" className={`py-[3px] pl-[12px] rounded-[4px] flex items-center justify-between w-[364px]`} style={numberInput.style} classes={numberInput.classes} startAdornment={} endAdornment={ } /> )}
); }; PositionDeliveryModal.defaultProps = {}; export type { PositionDeliveryModalProps, priceTypes, units, TipsPropsRefProps }; export default PositionDeliveryModal;