|
|
@@ -1,18 +1,27 @@
|
|
|
import {createAction, createSlice} from "@reduxjs/toolkit";
|
|
|
import {REQ_STATUS} from "@api/config";
|
|
|
import {buildReqReducer, reqPageModules} from "@features/api";
|
|
|
-
|
|
|
-const parseModules=(data,key="")=>{
|
|
|
+const addFavoriteKey=(state,key)=>{
|
|
|
+ let favoriteKeys=state.favoriteKeys;
|
|
|
+ if (!favoriteKeys.includes(key)){
|
|
|
+ favoriteKeys.push(key);
|
|
|
+ }
|
|
|
+ state.favoriteKeys=favoriteKeys;
|
|
|
+}
|
|
|
+const parseModules=(data,key="",state)=>{
|
|
|
if (data!=null){
|
|
|
for (let i = 0; i <data.length ; i++) {
|
|
|
let item=data[i];
|
|
|
if (item!=null){
|
|
|
let tkey=key+"_"+i;
|
|
|
item["_mkey"]=tkey;
|
|
|
+ if (item.data_key==="favorite"){
|
|
|
+ addFavoriteKey(state,tkey);
|
|
|
+ }
|
|
|
let tdata=item.data;
|
|
|
if (tdata!=null){
|
|
|
tkey=tkey+"_data";
|
|
|
- item.data=parseModules(tdata,tkey);
|
|
|
+ item.data=parseModules(tdata,tkey,state);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -41,7 +50,7 @@ const reducerPage=(state,action)=>{
|
|
|
if (json&&json.code===0){
|
|
|
let data=json.data==null?[]:json.data;
|
|
|
let pageID=json.pageID;
|
|
|
- data=parseModules(data,pageID);
|
|
|
+ data=parseModules(data,pageID,state);
|
|
|
state.pageData[pageID]=data;
|
|
|
}
|
|
|
}
|
|
|
@@ -69,13 +78,48 @@ export const Page=createSlice({
|
|
|
let newObj={page:payload.page,totalPage:payload.totalPage,data:newData};
|
|
|
Object.assign(module,newObj);
|
|
|
}
|
|
|
+ }),
|
|
|
+ updatePageGameLike:((state, action) => {
|
|
|
+ let {data,like}=action.payload;
|
|
|
+ let favoriteKeys=state.favoriteKeys;
|
|
|
+ if (favoriteKeys&&favoriteKeys.length>0){
|
|
|
+ for (let i = 0; i < favoriteKeys.length; i++) {
|
|
|
+ let mkey=favoriteKeys[i];
|
|
|
+ let module=getModuleData(state.pageData,mkey);
|
|
|
+ if (module!=null){
|
|
|
+ let oldData=module.data;
|
|
|
+ if (oldData==null)oldData=[];
|
|
|
+ if (oldData.length===0){
|
|
|
+ if (like===1)oldData.unshift(data);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ let index=-1;
|
|
|
+ for (let j = 0; j < oldData.length; j++) {
|
|
|
+ let item=oldData[j];
|
|
|
+ if (item!=null&&item.id===data.id){
|
|
|
+ index=j;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (like===1){
|
|
|
+ if (index===-1)oldData.unshift(data);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if (index>=0)oldData.splice(index,1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ module.data=oldData;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
})
|
|
|
},
|
|
|
extraReducers: (builder) => {
|
|
|
buildReqReducer(builder,reqPageModules,reducerPage,pageStatus);
|
|
|
},
|
|
|
})
|
|
|
-export const {updateGameList} = Page.actions;
|
|
|
+export const {updateGameList,updatePageGameLike} = Page.actions;
|
|
|
export const getFetchStatus=(state)=>{
|
|
|
return state.page.status;
|
|
|
}
|