Commit 93439c46 authored by chechunchi's avatar chechunchi

migrate sortcard modal

parent eba32a50
...@@ -220,7 +220,7 @@ async function _handleGameMsg(pb: ygopro.YgoStocMsg) { ...@@ -220,7 +220,7 @@ async function _handleGameMsg(pb: ygopro.YgoStocMsg) {
break; break;
} }
case "sort_card": { case "sort_card": {
onMsgSortCard(msg.sort_card); await onMsgSortCard(msg.sort_card);
break; break;
} }
......
import { fetchCard, ygopro } from "@/api"; import { fetchCard, ygopro } from "@/api";
import { messageStore } from "@/stores"; import { displaySortCardModal } from "@/ui/Duel/Message";
type MsgSortCard = ygopro.StocGameMessage.MsgSortCard; type MsgSortCard = ygopro.StocGameMessage.MsgSortCard;
export default async (sortCard: MsgSortCard) => { export default async (sortCard: MsgSortCard) => {
await Promise.all( const options = await Promise.all(
sortCard.options.map(async ({ code, response }) => { sortCard.options.map(async ({ code, response }) => {
const meta = await fetchCard(code!); const meta = await fetchCard(code!);
messageStore.sortCardModal.options.push({ return {
meta, meta,
response: response!, response: response!,
}); };
}) })
); );
messageStore.sortCardModal.isOpen = true; await displaySortCardModal(options);
}; };
...@@ -7,10 +7,6 @@ export const messageStore = proxy<ModalState>({ ...@@ -7,10 +7,6 @@ export const messageStore = proxy<ModalState>({
isOpen: false, isOpen: false,
options: [], options: [],
}, },
sortCardModal: {
isOpen: false,
options: [],
},
announceModal: { announceModal: {
isOpen: false, isOpen: false,
min: 1, min: 1,
......
import type { CardMeta, ygopro } from "@/api";
export interface ModalState { export interface ModalState {
// 指示器选择弹窗 // 指示器选择弹窗
checkCounterModal: { checkCounterModal: {
...@@ -11,14 +9,6 @@ export interface ModalState { ...@@ -11,14 +9,6 @@ export interface ModalState {
max: number; max: number;
}[]; }[];
}; };
// 卡牌排序弹窗
sortCardModal: {
isOpen: boolean;
options: {
meta: CardMeta;
response: number;
}[];
};
// 宣言弹窗 // 宣言弹窗
announceModal: { announceModal: {
isOpen: boolean; isOpen: boolean;
......
// 卡牌排序弹窗
import { import {
closestCenter, closestCenter,
DndContext, DndContext,
...@@ -15,23 +16,35 @@ import { ...@@ -15,23 +16,35 @@ import {
verticalListSortingStrategy, verticalListSortingStrategy,
} from "@dnd-kit/sortable"; } from "@dnd-kit/sortable";
import { CSS } from "@dnd-kit/utilities"; import { CSS } from "@dnd-kit/utilities";
import { Button, Card, Modal } from "antd"; import { Button, Card } from "antd";
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { useSnapshot } from "valtio"; import { proxy, useSnapshot } from "valtio";
import { sendSortCardResponse } from "@/api"; import { sendSortCardResponse } from "@/api";
import { CardMeta } from "@/api/cards"; import { CardMeta } from "@/api/cards";
import { useConfig } from "@/config"; import { useConfig } from "@/config";
import { messageStore } from "@/stores";
import { NeosModal } from "./NeosModal";
const NeosConfig = useConfig(); const NeosConfig = useConfig();
const { sortCardModal } = messageStore; interface SortOption {
meta: CardMeta;
response: number;
}
interface SortCardModalProps {
isOpen: boolean;
options: SortOption[];
}
const defaultProps = {
isOpen: false,
options: [],
};
const localStore = proxy<SortCardModalProps>(defaultProps);
export const SortCardModal = () => { export const SortCardModal = () => {
const snapSortCardModal = useSnapshot(sortCardModal); const { isOpen, options } = useSnapshot(localStore);
const isOpen = snapSortCardModal.isOpen;
const options = snapSortCardModal.options;
const [items, setItems] = useState(options); const [items, setItems] = useState(options);
const sensors = useSensors( const sensors = useSensors(
useSensor(PointerSensor), useSensor(PointerSensor),
...@@ -42,8 +55,7 @@ export const SortCardModal = () => { ...@@ -42,8 +55,7 @@ export const SortCardModal = () => {
const onFinish = () => { const onFinish = () => {
sendSortCardResponse(items.map((item) => item.response)); sendSortCardResponse(items.map((item) => item.response));
sortCardModal.isOpen = false; rs();
sortCardModal.options = [];
}; };
const onDragEnd = (event: DragEndEvent) => { const onDragEnd = (event: DragEndEvent) => {
const { active, over } = event; const { active, over } = event;
...@@ -63,7 +75,7 @@ export const SortCardModal = () => { ...@@ -63,7 +75,7 @@ export const SortCardModal = () => {
}, [options]); }, [options]);
return ( return (
<Modal <NeosModal
title="请为下列卡牌排序" title="请为下列卡牌排序"
open={isOpen} open={isOpen}
closable={false} closable={false}
...@@ -87,7 +99,7 @@ export const SortCardModal = () => { ...@@ -87,7 +99,7 @@ export const SortCardModal = () => {
))} ))}
</SortableContext> </SortableContext>
</DndContext> </DndContext>
</Modal> </NeosModal>
); );
}; };
...@@ -114,3 +126,13 @@ const SortableItem = (props: { id: number; meta: CardMeta }) => { ...@@ -114,3 +126,13 @@ const SortableItem = (props: { id: number; meta: CardMeta }) => {
</div> </div>
); );
}; };
let rs: (arg?: any) => void = () => {};
export const displaySortCardModal = async (options: SortOption[]) => {
localStore.options = options;
localStore.isOpen = true;
await new Promise<void>((resolve) => (rs = resolve));
localStore.isOpen = false;
localStore.options = [];
};
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