Commit 9c34b487 authored by Chunchi Che's avatar Chunchi Che

Merge branch 'optimize/service/select_chain_cancel' into 'main'

add cancelable logic

See merge request !65
parents 46c12e4b e3839c99
...@@ -28,6 +28,8 @@ import { ...@@ -28,6 +28,8 @@ import {
setCheckCardModalIsOpenImpl, setCheckCardModalIsOpenImpl,
setCheckCardModalMinMaxImpl, setCheckCardModalMinMaxImpl,
setCheckCardModalOnSubmitImpl, setCheckCardModalOnSubmitImpl,
setCheckCardMOdalCancelAbleImpl,
setCheckCardModalCancelResponseImpl,
resetCheckCardModalImpl, resetCheckCardModalImpl,
checkCardModalCase, checkCardModalCase,
} from "./modalSlice"; } from "./modalSlice";
...@@ -81,7 +83,7 @@ const initialState: DuelState = { ...@@ -81,7 +83,7 @@ const initialState: DuelState = {
modalState: { modalState: {
cardModal: { isOpen: false, interactivies: [] }, cardModal: { isOpen: false, interactivies: [] },
cardListModal: { isOpen: false, list: [] }, cardListModal: { isOpen: false, list: [] },
checkCardModal: { isOpen: false, tags: [] }, checkCardModal: { isOpen: false, cancelAble: false, tags: [] },
}, },
}; };
...@@ -125,6 +127,8 @@ const duelSlice = createSlice({ ...@@ -125,6 +127,8 @@ const duelSlice = createSlice({
setCheckCardModalIsOpen: setCheckCardModalIsOpenImpl, setCheckCardModalIsOpen: setCheckCardModalIsOpenImpl,
setCheckCardModalMinMax: setCheckCardModalMinMaxImpl, setCheckCardModalMinMax: setCheckCardModalMinMaxImpl,
setCheckCardModalOnSubmit: setCheckCardModalOnSubmitImpl, setCheckCardModalOnSubmit: setCheckCardModalOnSubmitImpl,
setCheckCardMOdalCancelAble: setCheckCardMOdalCancelAbleImpl,
setCheckCardModalCancelResponse: setCheckCardModalCancelResponseImpl,
resetCheckCardModal: resetCheckCardModalImpl, resetCheckCardModal: resetCheckCardModalImpl,
}, },
extraReducers(builder) { extraReducers(builder) {
...@@ -162,6 +166,8 @@ export const { ...@@ -162,6 +166,8 @@ export const {
setCheckCardModalIsOpen, setCheckCardModalIsOpen,
setCheckCardModalMinMax, setCheckCardModalMinMax,
setCheckCardModalOnSubmit, setCheckCardModalOnSubmit,
setCheckCardMOdalCancelAble,
setCheckCardModalCancelResponse,
resetCheckCardModal, resetCheckCardModal,
} = duelSlice.actions; } = duelSlice.actions;
export const selectDuelHsStart = (state: RootState) => { export const selectDuelHsStart = (state: RootState) => {
......
...@@ -33,6 +33,8 @@ export interface ModalState { ...@@ -33,6 +33,8 @@ export interface ModalState {
onSubmit?: string; onSubmit?: string;
selectMin?: number; selectMin?: number;
selectMax?: number; selectMax?: number;
cancelAble: boolean;
cancelResponse?: number;
tags: { tags: {
tagName: string; tagName: string;
options: { options: {
...@@ -125,6 +127,22 @@ export const setCheckCardModalOnSubmitImpl: CaseReducer< ...@@ -125,6 +127,22 @@ export const setCheckCardModalOnSubmitImpl: CaseReducer<
state.modalState.checkCardModal.onSubmit = action.payload; state.modalState.checkCardModal.onSubmit = action.payload;
}; };
// 更新卡牌选择弹窗是否可以取消
export const setCheckCardMOdalCancelAbleImpl: CaseReducer<
DuelState,
PayloadAction<boolean>
> = (state, action) => {
state.modalState.checkCardModal.cancelAble = action.payload;
};
// 更新卡牌选择弹窗取消时返回给服务端的`Response`
export const setCheckCardModalCancelResponseImpl: CaseReducer<
DuelState,
PayloadAction<number>
> = (state, action) => {
state.modalState.checkCardModal.cancelResponse = action.payload;
};
// 增加卡牌选择选项 // 增加卡牌选择选项
export const fetchCheckCardMeta = createAsyncThunk( export const fetchCheckCardMeta = createAsyncThunk(
"duel/fetchCheckCardMeta", "duel/fetchCheckCardMeta",
...@@ -204,6 +222,8 @@ export const resetCheckCardModalImpl: CaseReducer<DuelState> = (state) => { ...@@ -204,6 +222,8 @@ export const resetCheckCardModalImpl: CaseReducer<DuelState> = (state) => {
state.modalState.checkCardModal.isOpen = false; state.modalState.checkCardModal.isOpen = false;
state.modalState.checkCardModal.selectMin = undefined; state.modalState.checkCardModal.selectMin = undefined;
state.modalState.checkCardModal.selectMax = undefined; state.modalState.checkCardModal.selectMax = undefined;
state.modalState.checkCardModal.cancelAble = false;
state.modalState.checkCardModal.cancelResponse = undefined;
state.modalState.checkCardModal.tags = []; state.modalState.checkCardModal.tags = [];
}; };
...@@ -233,3 +253,7 @@ export const selectCheckCardModalTags = (state: RootState) => ...@@ -233,3 +253,7 @@ export const selectCheckCardModalTags = (state: RootState) =>
state.duel.modalState.checkCardModal.tags; state.duel.modalState.checkCardModal.tags;
export const selectCheckCardModalOnSubmit = (state: RootState) => export const selectCheckCardModalOnSubmit = (state: RootState) =>
state.duel.modalState.checkCardModal.onSubmit; state.duel.modalState.checkCardModal.onSubmit;
export const selectCheckCardModalCancelAble = (state: RootState) =>
state.duel.modalState.checkCardModal.cancelAble;
export const selectCheckCardModalCacnelResponse = (state: RootState) =>
state.duel.modalState.checkCardModal.cancelResponse;
import { ygopro } from "../../api/ocgcore/idl/ocgcore"; import { ygopro } from "../../api/ocgcore/idl/ocgcore";
import { sendSelectChainResponse } from "../../api/ocgcore/ocgHelper"; import { sendSelectChainResponse } from "../../api/ocgcore/ocgHelper";
import { import {
setCheckCardMOdalCancelAble,
setCheckCardModalCancelResponse,
setCheckCardModalIsOpen, setCheckCardModalIsOpen,
setCheckCardModalMinMax, setCheckCardModalMinMax,
setCheckCardModalOnSubmit, setCheckCardModalOnSubmit,
...@@ -61,9 +63,11 @@ export default (selectChain: MsgSelectChain, dispatch: AppDispatch) => { ...@@ -61,9 +63,11 @@ export default (selectChain: MsgSelectChain, dispatch: AppDispatch) => {
case 2: // 处理多张 case 2: // 处理多张
case 3: { case 3: {
// 处理强制发动的卡 // 处理强制发动的卡
// TODO:非强制发动的场景需要支持取消
dispatch(setCheckCardModalMinMax({ min: 1, max: 1 })); dispatch(setCheckCardModalMinMax({ min: 1, max: 1 }));
dispatch(setCheckCardModalOnSubmit("sendSelectChainResponse")); dispatch(setCheckCardModalOnSubmit("sendSelectChainResponse"));
dispatch(setCheckCardMOdalCancelAble(!forced));
dispatch(setCheckCardModalCancelResponse(-1));
for (const chain of chains) { for (const chain of chains) {
const tagName = CardZoneToChinese(chain.location.location); const tagName = CardZoneToChinese(chain.location.location);
......
...@@ -2,6 +2,8 @@ import React, { useState } from "react"; ...@@ -2,6 +2,8 @@ import React, { useState } from "react";
import { useAppSelector } from "../../hook"; import { useAppSelector } from "../../hook";
import { store } from "../../store"; import { store } from "../../store";
import { import {
selectCheckCardModalCacnelResponse,
selectCheckCardModalCancelAble,
selectCheckCardModalIsOpen, selectCheckCardModalIsOpen,
selectCheckCardModalMinMax, selectCheckCardModalMinMax,
selectCheckCardModalOnSubmit, selectCheckCardModalOnSubmit,
...@@ -24,38 +26,63 @@ const CheckCardModal = () => { ...@@ -24,38 +26,63 @@ const CheckCardModal = () => {
const { min, max } = useAppSelector(selectCheckCardModalMinMax); const { min, max } = useAppSelector(selectCheckCardModalMinMax);
const tabs = useAppSelector(selectCheckCardModalTags); const tabs = useAppSelector(selectCheckCardModalTags);
const onSubmit = useAppSelector(selectCheckCardModalOnSubmit); const onSubmit = useAppSelector(selectCheckCardModalOnSubmit);
const cancelAble = useAppSelector(selectCheckCardModalCancelAble);
const cancelResponse = useAppSelector(selectCheckCardModalCacnelResponse);
const [response, setResponse] = useState<number[]>([]); const [response, setResponse] = useState<number[]>([]);
const defaultValue: number[] = []; const defaultValue: number[] = [];
// TODO: 这里可以考虑更好地封装
const sendResponseHandler = (
handlerName: string | undefined,
response: number[]
) => {
switch (handlerName) {
case "sendSelectChainResponse": {
sendSelectChainResponse(response[0]);
break;
}
case "sendSelectCardResponse": {
sendSelectCardResponse(response);
break;
}
default: {
}
}
};
return ( return (
<Modal <Modal
title={`请选择${min}到${max}张卡片`} title={`请选择${min}到${max}张卡片`}
open={isOpen} open={isOpen}
closable={false} closable={false}
footer={ footer={
<Button <>
disabled={response.length < min || response.length > max} <Button
onClick={() => { disabled={response.length < min || response.length > max}
switch (onSubmit) { onClick={() => {
case "sendSelectChainResponse": { sendResponseHandler(onSubmit, response);
sendSelectChainResponse(response[0]); dispatch(setCheckCardModalIsOpen(false));
dispatch(resetCheckCardModal());
break; }}
} >
case "sendSelectCardResponse": { submit
sendSelectCardResponse(response); </Button>
{cancelAble ? (
break; <Button
} onClick={() => {
default: { if (cancelResponse) {
} sendResponseHandler(onSubmit, [cancelResponse]);
} }
dispatch(setCheckCardModalIsOpen(false)); dispatch(setCheckCardModalIsOpen(false));
dispatch(resetCheckCardModal()); dispatch(resetCheckCardModal());
}} }}
> >
submit cancel
</Button> </Button>
) : (
<></>
)}
</>
} }
width={800} width={800}
> >
......
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