Commit 194581ef authored by chechunchi's avatar chechunchi

migrate position modal

parent 176b19a0
...@@ -140,7 +140,7 @@ async function _handleGameMsg(pb: ygopro.YgoStocMsg) { ...@@ -140,7 +140,7 @@ async function _handleGameMsg(pb: ygopro.YgoStocMsg) {
break; break;
} }
case "select_position": { case "select_position": {
onMsgSelectPosition(msg.select_position); await onMsgSelectPosition(msg.select_position);
break; break;
} }
......
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { messageStore } from "@/stores"; import { displayPositionModal } from "@/ui/Duel/Message";
type MsgSelectPosition = ygopro.StocGameMessage.MsgSelectPosition; type MsgSelectPosition = ygopro.StocGameMessage.MsgSelectPosition;
export default (selectPosition: MsgSelectPosition) => { export default async (selectPosition: MsgSelectPosition) => {
const _player = selectPosition.player; const _player = selectPosition.player;
const positions = selectPosition.positions; const positions = selectPosition.positions.map(
messageStore.positionModal.positions = positions.map(
(position) => position.position (position) => position.position
); );
messageStore.positionModal.isOpen = true; await displayPositionModal(positions);
}; };
...@@ -3,7 +3,6 @@ import { proxy } from "valtio"; ...@@ -3,7 +3,6 @@ import { proxy } from "valtio";
import type { ModalState } from "./types"; import type { ModalState } from "./types";
export const messageStore = proxy<ModalState>({ export const messageStore = proxy<ModalState>({
positionModal: { isOpen: false, positions: [] },
checkCounterModal: { checkCounterModal: {
isOpen: false, isOpen: false,
options: [], options: [],
......
import type { CardMeta, ygopro } from "@/api"; import type { CardMeta, ygopro } from "@/api";
export interface ModalState { export interface ModalState {
// 表示形式选择弹窗
positionModal: {
isOpen: boolean;
positions: ygopro.CardPosition[];
};
// 指示器选择弹窗 // 指示器选择弹窗
checkCounterModal: { checkCounterModal: {
isOpen: boolean; isOpen: boolean;
......
// 表示形式选择弹窗
import { CheckCard } from "@ant-design/pro-components"; import { CheckCard } from "@ant-design/pro-components";
import { Button } from "antd"; import { Button } from "antd";
import React, { useState } from "react"; import React, { useState } from "react";
import { useSnapshot } from "valtio"; import { proxy, useSnapshot } from "valtio";
import { sendSelectPositionResponse, ygopro } from "@/api"; import { sendSelectPositionResponse, ygopro } from "@/api";
import { messageStore } from "@/stores";
import { DragModal } from "./DragModal"; import { NeosModal } from "./NeosModal";
const { positionModal } = messageStore; interface PositionModalProps {
isOpen: boolean;
positions: ygopro.CardPosition[];
}
const defaultProps = { isOpen: false, positions: [] };
export const PositionModal = () => { const localStore = proxy<PositionModalProps>(defaultProps);
const snapPositionModal = useSnapshot(positionModal);
const isOpen = snapPositionModal.isOpen;
const positions = snapPositionModal.positions;
export const PositionModal = () => {
const { isOpen, positions } = useSnapshot(localStore);
const [selected, setSelected] = useState<ygopro.CardPosition | undefined>( const [selected, setSelected] = useState<ygopro.CardPosition | undefined>(
undefined undefined
); );
return ( return (
<DragModal <NeosModal
title="请选择表示形式" title="请选择表示形式"
open={isOpen} open={isOpen}
closable={false} closable={false}
...@@ -30,8 +33,7 @@ export const PositionModal = () => { ...@@ -30,8 +33,7 @@ export const PositionModal = () => {
onClick={() => { onClick={() => {
if (selected !== undefined) { if (selected !== undefined) {
sendSelectPositionResponse(selected); sendSelectPositionResponse(selected);
positionModal.isOpen = false; rs();
positionModal.positions = [];
} }
}} }}
> >
...@@ -55,12 +57,13 @@ export const PositionModal = () => { ...@@ -55,12 +57,13 @@ export const PositionModal = () => {
/> />
))} ))}
</CheckCard.Group> </CheckCard.Group>
</DragModal> </NeosModal>
); );
}; };
function cardPositionToChinese(position: ygopro.CardPosition): string { function cardPositionToChinese(position: ygopro.CardPosition): string {
switch (position) { switch (position) {
// TODO: i18n
case ygopro.CardPosition.FACEUP_ATTACK: { case ygopro.CardPosition.FACEUP_ATTACK: {
return "正面攻击形式"; return "正面攻击形式";
} }
...@@ -78,3 +81,15 @@ function cardPositionToChinese(position: ygopro.CardPosition): string { ...@@ -78,3 +81,15 @@ function cardPositionToChinese(position: ygopro.CardPosition): string {
} }
} }
} }
let rs: (arg?: any) => void = () => {};
export const displayPositionModal = async (
positions: ygopro.CardPosition[]
) => {
localStore.positions = positions;
localStore.isOpen = true;
await new Promise<void>((resolve) => (rs = resolve));
localStore.isOpen = false;
localStore.positions = [];
};
import "./index.scss"; import "./index.scss";
import {
ArrowRightOutlined,
CheckOutlined,
CloseCircleFilled,
MessageFilled,
StepForwardFilled,
} from "@ant-design/icons";
import { import {
Button, Button,
Tooltip, Divider,
Dropdown, Dropdown,
type MenuProps, type MenuProps,
theme,
Divider,
Space,
type DropdownProps, type DropdownProps,
Popconfirm,
Space,
theme,
Tooltip,
} from "antd"; } from "antd";
import { useState, cloneElement } from "react"; import { useState, cloneElement } from "react";
import { useSnapshot } from "valtio"; import { useSnapshot } from "valtio";
import {
StepForwardFilled,
MessageFilled,
CloseCircleFilled,
ArrowRightOutlined,
CheckOutlined,
} from "@ant-design/icons";
import { import {
sendSelectBattleCmdResponse, sendSelectBattleCmdResponse,
sendSelectIdleCmdResponse, sendSelectIdleCmdResponse,
ygopro,
sendSurrender, sendSurrender,
ygopro,
} from "@/api"; } from "@/api";
import { cardStore, matStore } from "@/stores"; import { cardStore, matStore } from "@/stores";
import PhaseType = ygopro.StocGameMessage.MsgNewPhase.PhaseType; import PhaseType = ygopro.StocGameMessage.MsgNewPhase.PhaseType;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment