redpackSlice.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import {createSlice} from "@reduxjs/toolkit";
  2. import {REQ_STATUS} from "@api/config";
  3. import {buildReqReducer, reqRedpackCheck, reqRedpackConfig, reqRedpackRecive} from "@features/api";
  4. import {getHttpMsg} from "@utils/helpers";
  5. import {toast} from "react-toastify";
  6. const objInfo={}
  7. const clearCDTimer=()=>{
  8. if (objInfo.cdTimer!=null){
  9. clearInterval(objInfo.cdTimer);
  10. objInfo.cdTimer=null;
  11. }
  12. }
  13. const checkRedpackLeftTime=(data)=>{
  14. clearCDTimer();
  15. let next_in_seconds=Number(data.next_in_seconds);
  16. let deadline=data.deadline;
  17. if (next_in_seconds>0){
  18. objInfo.cdTimer=setInterval(()=>{
  19. let now=Date.now();
  20. let during=deadline-now;
  21. during=Math.floor(during/1000);
  22. if (during<=0){
  23. global.dispatch(reqRedpackCheck());
  24. clearCDTimer();
  25. }
  26. else{
  27. global.dispatch(updateCD(during));
  28. }
  29. },1000);
  30. }
  31. }
  32. const reducerRedpackCheck=(state,action,arg)=>{
  33. let payload=action.payload;
  34. // payload={"data":{"status":1,"max":24680},"result":"","msg":"success","code":200};
  35. if (payload&&payload.code===200){
  36. let data=payload.data;
  37. if (data){
  38. let next_in_seconds=data.next_in_seconds?Number(data.next_in_seconds):0;
  39. let deadline=Date.now()+(next_in_seconds*1000);
  40. data.deadline=deadline;
  41. state.redPackData=data;
  42. checkRedpackLeftTime(data);
  43. }
  44. }
  45. }
  46. const redpackCheckStatus=(state,status,arg)=>{
  47. state.status.RedpackCheck=status;
  48. }
  49. const reducerRedpackRecive=(state,action,arg)=>{
  50. let payload=action.payload;
  51. // let msg=getHttpMsg(payload);
  52. if (payload&&payload.code===200){
  53. let data=payload.data;
  54. if (data){
  55. let amount=data.amount;
  56. // state.redPackData.amount=amount;
  57. // state.redPackData.status=2;
  58. state.redPackData=Object.assign({},state.redPackData,{amount:amount,status:2})
  59. }
  60. // if (msg!=null&&msg!==""){
  61. // toast.success(msg);
  62. // }
  63. }else
  64. {
  65. let obj=payload.msg;
  66. let msg="";
  67. if (obj){
  68. if (obj.message!=null){
  69. msg=obj.message;
  70. }
  71. }
  72. if (msg!=null&&msg!==""){
  73. toast.error(msg);
  74. }
  75. }
  76. }
  77. const redpackReciveStatus=(state,status,arg)=>{
  78. state.status.RedpackRecive=status;
  79. }
  80. const reducerRedpackConfig=(state,action,arg)=>{
  81. let payload=action.payload;
  82. if (payload&&payload.code===200){
  83. state.config=payload.data;
  84. }
  85. }
  86. const redpackConfigStatus=(state,status,arg)=>{
  87. state.status.RedpackConfig=status;
  88. }
  89. export const RedpackSlice = createSlice({
  90. name: "redpack",
  91. initialState: {
  92. status:{
  93. RedpackCheck:REQ_STATUS.NONE,
  94. RedpackRecive:REQ_STATUS.NONE,
  95. RedpackConfig:REQ_STATUS.NONE,
  96. },
  97. redPackData:null,
  98. config:[]
  99. },
  100. reducers:{
  101. updateCD:((state, action) => {
  102. let payload=action.payload;
  103. if (payload!=null){
  104. if (state.redPackData!=null){
  105. state.redPackData.next_in_seconds=payload;
  106. }
  107. }
  108. }),
  109. updateAlRecivedStatus:((state, action) => {
  110. state.redPackData.status=-1;
  111. })
  112. },
  113. extraReducers: (builder) => {
  114. buildReqReducer(builder,reqRedpackCheck,reducerRedpackCheck,redpackCheckStatus);
  115. buildReqReducer(builder,reqRedpackRecive,reducerRedpackRecive,redpackReciveStatus);
  116. buildReqReducer(builder,reqRedpackConfig,reducerRedpackConfig,redpackConfigStatus);
  117. }
  118. })
  119. export const {updateCD,updateAlRecivedStatus}=RedpackSlice.actions;
  120. export const getRedPackInfo=(state)=>{
  121. return state.redpack.redPackData;
  122. }
  123. export const getRedPackConfig=(state)=>{
  124. return state.redpack.config;
  125. }
  126. export const getReciveStatus=(state)=>{
  127. return state.redpack.status.RedpackRecive;
  128. }
  129. export const getRedConfigStatus=(state)=>{
  130. return state.redpack.status.RedpackConfig;
  131. }
  132. export default RedpackSlice.reducer;