Guest

Untitled 1504

Apr 22nd, 2026
9
0
Never
Not a member of GistPad yet? Sign Up, it unlocks many cool features!
None 41.60 KB | None | 0 0
  1. import { isEmpty, startCase } from "lodash";
  2. import React, { useContext, useEffect, useState } from "react";
  3. import AuthProvider from "../context/AuthContext";
  4. import BetSlipContext from "../context/BetSlipContext";
  5. import { apiGet } from "../Utils/apiFetch";
  6. import apiPath from "../Utils/apiPath";
  7. import { FancyListing, SportsBookListing } from "./BetsListing";
  8. import OpenBetsDetails from "./OpenBetsDetails";
  9. import helper from "../Utils/helpers";
  10. import axios from "axios";
  11. import ParlyFIltered from "./ParlyFIltered";
  12. import obj from "../Utils/helpers";
  13. function Openbets() {
  14. let { setOpenBetsToogle, openBetsToogle, openBetSelection, setLoader, user } =
  15. useContext(AuthProvider);
  16. let {
  17. messaageBox,
  18. refreshCurrentBet,
  19. setRefreshCurrentBets,
  20. isBetPlaced,
  21. setIsBetPlaced,
  22. setMessageBox,
  23. umMachedBetPlace,
  24. setUnMatchedBetPlace,
  25. } = useContext(BetSlipContext);
  26. const [parlayData, setParlayData] = useState([]);
  27. const [currentBets, setCurrentBets] = useState([]);
  28. const [filtered, setFiltered] = useState({});
  29. const [data, setData] = useState({});
  30. const [type, setType] = useState("");
  31. const [betinfo, setBetInfo] = useState(false);
  32. const [sortbyTime, setSortbyTime] = useState(false);
  33. const getCurrentBets = async () => {
  34. if (!isEmpty(user)) {
  35. // Cache-bust so we always get fresh data (avoid 304 Not Modified / stale list)
  36. const nocache = { _: Date.now() };
  37. const promiseOne = apiGet(apiPath.mobileCurrentBets, nocache);
  38. const promiseTwo = apiGet(apiPath.currentParlay, nocache);
  39. Promise.all([promiseOne, promiseTwo]).then((res) => {
  40. setCurrentBets(res[0]?.data?.results);
  41. setParlayData(res[1]?.data?.results);
  42. });
  43. // if (status === 200) {
  44. // if (response_users.success) {
  45. // setCurrentBets(response_users.results);
  46. // setRefreshCurrentBets(false);
  47. // }
  48. // }
  49. }
  50. };
  51. const getParlayData = async () => {
  52. if (!isEmpty(user)) {
  53. const { status, data: response_users } = await apiGet(
  54. apiPath.currentParlay,
  55. { _: Date.now() }
  56. );
  57. if (status === 200) {
  58. if (response_users.success) {
  59. setParlayData(response_users.results);
  60. setRefreshCurrentBets(false);
  61. }
  62. }
  63. }
  64. };
  65. // console.log(currentBets, "currentBets");
  66. const sortTime = (check) => {
  67. setSortbyTime(check);
  68. };
  69. const handle = (item, type) => {
  70. setData(item);
  71. setType(type);
  72. let obj = currentBets?.find((res) => res?.eventName == item?.eventName);
  73. setFiltered(
  74. type == "BetFair"
  75. ? obj.betList
  76. : type == "Bookmaker"
  77. ? obj.bookmakerList
  78. : type == "Fancy"
  79. ? obj.sessionBetList
  80. : type == "SportsBook"
  81. ? obj.sportBookBetList
  82. : type == "Toss"
  83. ? obj?.tossBetList?.map((res) => {
  84. return { ...res, isMatched: true };
  85. })
  86. : type == "Tie"
  87. ? obj?.tieBetList
  88. : type == "Parly"
  89. ? item?.bets
  90. : ""
  91. );
  92. };
  93. useEffect(() => {
  94. if (refreshCurrentBet) {
  95. setRefreshCurrentBets(false);
  96. handle();
  97. getCurrentBets();
  98. // getParlayData();
  99. }
  100. }, [refreshCurrentBet]);
  101. const clearBets = async (id) => {
  102. setLoader(true);
  103. const { status, data: response_users } = await apiGet(
  104. `${apiPath.clearBets}matchBetId=${id}`
  105. );
  106. if (status === 200) {
  107. if (response_users.success) {
  108. setLoader(false);
  109. setRefreshCurrentBets(true);
  110. setIsBetPlaced("clearBet");
  111. setMessageBox(true);
  112. // setOpenBetsToogle(true);
  113. setData({});
  114. setType("");
  115. setFiltered({});
  116. getCurrentBets();
  117. }
  118. setLoader(false);
  119. } else {
  120. setLoader(false);
  121. }
  122. };
  123. useEffect(() => {
  124. if (umMachedBetPlace) {
  125. setData({});
  126. setType("");
  127. setFiltered({});
  128. setUnMatchedBetPlace(false);
  129. }
  130. }, [umMachedBetPlace]);
  131.  
  132. return (
  133. <>
  134. <div
  135. id="openBetsLeftSide"
  136. className="overlay left-side"
  137. style={{
  138. display: openBetsToogle ? "block" : "none",
  139. }}
  140. >
  141. <div
  142. id="openBetSlide"
  143. className="side-wrap"
  144. style={{ display: "flex" }}
  145. >
  146. <div id="sideHead" className="side-head">
  147. <h3 className="a-open_bets">
  148. <img
  149. src={
  150. // import.meta.env.VITE_IMAGE_URL +
  151. "/assets/images/home/transparent.gif"
  152. }
  153. alt={""}
  154. />
  155. Open Bets
  156. </h3>
  157. <a
  158. id="close"
  159. onClick={() => setOpenBetsToogle(false)}
  160. className="close"
  161. href="#"
  162. ></a>
  163. </div>
  164.  
  165. <div id="sideContent" className="side-content">
  166. {/* <div
  167. id="openBetMsgBox"
  168. className="message-wrap success"
  169. style={{ display: "block" }}
  170. >
  171. <div className="message">
  172. <h4 id="header">Bet Matched</h4>
  173. <p id="info">
  174. <span id="sideType" className="back">
  175. Back
  176. </span>
  177. <strong id="selectionName">England</strong>{" "}
  178. <strong id="stake">$1,000</strong> at odds{" "}
  179. <strong id="odds">1.29</strong>
  180. </p>
  181. </div>
  182. <a id="close" className="close" href="#">
  183. Close
  184. </a>
  185. </div> */}
  186. {isEmpty(data) && (
  187. <ul
  188. id="eventMenuList"
  189. style={{ display: "block" }}
  190. className="menu-list"
  191. >
  192. {currentBets?.length > 0 &&
  193. currentBets?.map((res) => {
  194. return (
  195. <>
  196. {res?.betList?.length > 0 && (
  197. <li
  198. id="eventMenuTemplate"
  199. className="inplay-off"
  200. style={{ display: "block" }}
  201. >
  202. <a
  203. onClick={() => handle(res, "BetFair")}
  204. href="javascript:void(0)"
  205. >
  206. {res?.eventName} - BetFair
  207. </a>
  208. </li>
  209. )}
  210. {res?.bookmakerList?.length > 0 && (
  211. <li
  212. id="eventMenuTemplate"
  213. className="inplay-off"
  214. style={{ display: "block" }}
  215. >
  216. <a
  217. onClick={() => handle(res, "Bookmaker")}
  218. href="javascript:void(0)"
  219. >
  220. {res?.eventName}- Bookmaker
  221. </a>
  222. </li>
  223. )}
  224. {res?.sessionBetList?.length > 0 && (
  225. <li
  226. id="eventMenuTemplate"
  227. className="inplay-off"
  228. style={{ display: "block" }}
  229. >
  230. <a
  231. onClick={() => handle(res, "Fancy")}
  232. href="javascript:void(0)"
  233. >
  234. {res?.eventName} - Fancy
  235. </a>
  236. </li>
  237. )}
  238. {res?.sportBookBetList?.length > 0 && (
  239. <li
  240. id="eventMenuTemplate"
  241. className="inplay-off"
  242. style={{ display: "block" }}
  243. >
  244. <a
  245. onClick={() => handle(res, "SportsBook")}
  246. href="javascript:void(0)"
  247. >
  248. {res?.eventName} - SportsBook
  249. </a>
  250. </li>
  251. )}
  252. {res?.tieBetList?.length > 0 && (
  253. <li
  254. id="eventMenuTemplate"
  255. className="inplay-off"
  256. style={{ display: "block" }}
  257. >
  258. <a
  259. onClick={() => handle(res, "Tie")}
  260. href="javascript:void(0)"
  261. >
  262. {res?.eventName} - Tie
  263. </a>
  264. </li>
  265. )}
  266. {res?.tossBetList?.length > 0 && (
  267. <li
  268. id="eventMenuTemplate"
  269. className="inplay-off"
  270. style={{ display: "block" }}
  271. >
  272. <a
  273. onClick={() => handle(res, "Toss")}
  274. href="javascript:void(0)"
  275. >
  276. {res?.eventName} - Toss
  277. </a>
  278. </li>
  279. )}
  280. </>
  281. );
  282. })}
  283. {parlayData?.length > 0 &&
  284. parlayData?.map((res) => {
  285. return (
  286. <li
  287. id="eventMenuTemplate"
  288. className="inplay-off"
  289. style={{ display: "block" }}
  290. >
  291. <a
  292. onClick={() => handle(res, "Parly")}
  293. href="javascript:void(0)"
  294. >
  295. Bet Placed -{" "}
  296. {res?.bets?.length == 0
  297. ? ""
  298. : res?.bets?.length == 1
  299. ? "SINGLE"
  300. : res?.bets?.length == 2
  301. ? "DOUBLE"
  302. : res?.bets?.length == 3
  303. ? "TREBLE"
  304. : "ACCMULATOR"}{" "}
  305. - Parly
  306. </a>
  307. </li>
  308. );
  309. })}
  310. </ul>
  311. )}
  312. {!isEmpty(data) && (
  313. <>
  314. <div
  315. id="pathWrap"
  316. className="path-wrap"
  317. style={{ display: "flex" }}
  318. >
  319. <a
  320. id="goBack"
  321. className="go_back"
  322. onClick={() => {
  323. setData("");
  324. setSortbyTime(false);
  325. setType("");
  326. setBetInfo(false);
  327. }}
  328. href="javascript:void(0)"
  329. ></a>
  330. <ul>
  331. <li id="eventName">
  332. {type == "Parly" ? (
  333. <p>
  334. {" "}
  335. Bet Placed -{" "}
  336. {type == "Parly"
  337. ? data?.bets?.length == 0
  338. ? ""
  339. : data?.bets?.length == 1
  340. ? "SINGLE"
  341. : data?.bets?.length == 2
  342. ? "DOUBLE"
  343. : data?.bets?.length == 3
  344. ? "TREBLE"
  345. : "ACCMULATOR"
  346. : data?.eventName}{" "}
  347. - {type}
  348. </p>
  349. ) : (
  350. <p>
  351. {" "}
  352. {data?.eventName} - {type}
  353. </p>
  354. )}
  355. </li>
  356. </ul>
  357. </div>
  358. {type == "Parly" && (
  359. <div
  360. id="pathWrap"
  361. className="path-wrap new-path"
  362. style={{ display: "flex" }}
  363. >
  364. <span> Bet Id : {data?.matchBetId}</span>
  365. <span> Stake : {Number(data?.amount)?.toFixed(2)}</span>
  366. <span> Odds : {Number(data?.bhav)?.toFixed(2)}</span>
  367. <span>
  368. {" "}
  369. Win/Loss :{" "}
  370. {data?.isDeclared ? (
  371. <>
  372. {data?.result == "loss" ? (
  373. <strong
  374. className="d-block"
  375. style={{ color: "red" }}
  376. >
  377. {startCase(data?.result)}
  378. </strong>
  379. ) : (
  380. <strong
  381. className="d-block"
  382. style={{ color: "green" }}
  383. >
  384. {startCase(data?.result)}
  385. </strong>
  386. )}
  387. </>
  388. ) : (
  389. "..."
  390. )}
  391. </span>
  392. </div>
  393. )}
  394. </>
  395. )}
  396.  
  397. {!isEmpty(data) && (
  398. <>
  399. {type == "Fancy" ? (
  400. <FancyListing
  401. filtered={filtered}
  402. sortbyTime={sortbyTime}
  403. sortTime={sortTime}
  404. betinfo={betinfo}
  405. setBetInfo={setBetInfo}
  406. type={"Matched"}
  407. helper={helper}
  408. />
  409. ) : type == "SportsBook" ? (
  410. <SportsBookListing
  411. filtered={filtered}
  412. sortbyTime={sortbyTime}
  413. sortTime={sortTime}
  414. betinfo={betinfo}
  415. setBetInfo={setBetInfo}
  416. type={"Matched"}
  417. helper={helper}
  418. />
  419. ) : type == "Parly" ? (
  420. <ParlyFIltered
  421. filtered={filtered}
  422. sortbyTime={sortbyTime}
  423. sortTime={sortTime}
  424. betType={type}
  425. betinfo={betinfo}
  426. setBetInfo={setBetInfo}
  427. type={"Matched"}
  428. />
  429. ) : (
  430. <OpenBetsDetails
  431. filtered={filtered}
  432. sortbyTime={sortbyTime}
  433. sortTime={sortTime}
  434. betType={type}
  435. betinfo={betinfo}
  436. setBetInfo={setBetInfo}
  437. type={"Matched"}
  438. />
  439. )}
  440.  
  441. {filtered?.some((res) => !res?.isMatched) &&
  442. type == "BetFair" && (
  443. <OpenBetsDetails
  444. filtered={filtered}
  445. sortbyTime={sortbyTime}
  446. betinfo={betinfo}
  447. betType={type}
  448. setBetInfo={setBetInfo}
  449. sortTime={sortTime}
  450. type={"UnMatched"}
  451. clearBets={clearBets}
  452. />
  453. )}
  454. </>
  455. )}
  456. {type == "Parly"
  457. ? ""
  458. : type !== "" &&
  459. !isEmpty(filtered) && (
  460. <ul
  461. id="openBetOption"
  462. className="check-list"
  463. style={{ display: "flex" }}
  464. >
  465. <li>
  466. <a
  467. id="showBetInfo"
  468. onClick={() => setBetInfo(!betinfo)}
  469. className={betinfo ? "checked" : ""}
  470. href="javascript:void(0)"
  471. >
  472. Bet Info
  473. </a>
  474. </li>
  475. {filtered?.length > 1 && type !== "SportsBook" && (
  476. <li>
  477. <a
  478. id="showTimeOrder"
  479. onClick={() => sortTime(!sortbyTime)}
  480. className={sortbyTime ? "checked" : ""}
  481. href="javascript:void(0)"
  482. >
  483. Time Order
  484. </a>
  485. </li>
  486. )}
  487. {/* <li name="txnOption">
  488. <a id="averageOdds" className="" href="javascript:void(0)">
  489. Average Odds
  490. </a>
  491. </li> */}
  492. </ul>
  493. )}
  494. </div>
  495. </div>
  496. </div>
  497. </>
  498. );
  499. }
  500.  
  501. export default Openbets;
RAW Paste Data Copied