/** * @Author: ?? * @Date: ?? */ import React, { useEffect, useState } from "react"; import { AdjustingMarginModalProps } from "./interface"; import { Modal, ModalProps } from "../../index"; import "./index.css"; import { Select } from "@atomintl/aui-next"; import { formatFloor, formatMoney, toDefaultNumber } from "@utils/FormatNumber"; import { calcLiquidationPrice, ESide } from "@utils/contractRules"; import { ArrowDown } from "@icons/ArrowDown"; import NumberInput from "@components/Input/NumberInput"; import { Form } from "@atomintl/aui-next"; const { Option } = Select; export enum EMarginDirection { up = "1", down = "2" } interface MockFormValues { name: string; age: number; } /** * ### 引用方法 * ```tsx * import { AdjustingMarginModal } from "@atomintl/exchange-ui"; * ``` */ export const AdjustingMarginModal: React.FC = props => { const { onConfirm, maxIncreaseMargin, posMargin, positionAmt, averagePosPrice, marginRatio, amtRate, takerRate, side, liquidationPriceScale, open } = props; const [type, setType] = useState(EMarginDirection.up); const [liquidationPrice, setLiquidationPrice] = useState(); const [increaseMargin, setIncreaseMargin] = useState(""); const onOkCb = () => { onConfirm?.({ type, increaseMargin }); }; useEffect(() => { if (open) { setType(EMarginDirection.up); setLiquidationPrice(0); setIncreaseMargin(""); } }, [open]); const TinyBox = ({ label, valuePrefix, value }: { label: string; valuePrefix?: string; value: string | number }) => { return (
{label}
{valuePrefix}
{value}
); }; const directionText = type == EMarginDirection.up ? "增加" : "减少"; const onSelectChange = (v: EMarginDirection) => { setType(v); onIncreaseMarginChange(""); }; const onIncreaseMarginChange = (v: string | number) => { const n = type == EMarginDirection.up ? toDefaultNumber(v) : 0 - toDefaultNumber(v); setIncreaseMargin(String(v)); const liquidationPrice = calcLiquidationPrice({ posMargin: toDefaultNumber(posMargin), increaseMargin: n, positionAmt: toDefaultNumber(positionAmt), averagePosPrice: toDefaultNumber(averagePosPrice), marginRatio: toDefaultNumber(marginRatio), amtRate: toDefaultNumber(amtRate), takerRate: toDefaultNumber(takerRate), direction: side as ESide }); const formattedLiquidationPrice = toDefaultNumber(liquidationPrice) >= 0 ? toDefaultNumber(liquidationPrice) : 0; setLiquidationPrice(formattedLiquidationPrice); }; const onMarginChange = (v: string) => onIncreaseMarginChange(v); const onMaxIncreaseMargin = () => onIncreaseMarginChange(type === EMarginDirection.up ? maxIncreaseMargin : posMargin); const { useForm } = Form; const [form] = useForm({ defaultValues: { name: "abc", age: 18 } }); return ( <>
{/* {*/} {/* console.log("onValuesChange", values, fieldValue.age, fieldValue.name);*/} {/* }}*/} {/* onFinish={formValues => alert(JSON.stringify(formValues))}*/} {/*>*/} {/* */} {/* */} {/* */} {/* /!**!/*/} {/* /!* *!/*/} {/* /!**!/*/} {/**/} {/**/}
最大
); }; AdjustingMarginModal.defaultProps = {}; export type { AdjustingMarginModalProps }; export default AdjustingMarginModal;