| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- import { APP_FAVO_ADD, APP_FAVO_REMOVE, APP_GAME_LIST, success } from "@scripts/api";
- import { Http } from "@scripts/request";
- import { IGameInfo, IGameListParams } from "./data";
- import { CURRENCY_TYPE, CurrencyType, GAME_TABS, GameTabType } from "@scripts/define/Define";
- const UPDATE_LIST_CD = 10 * 60 * 1000;
- interface IGameCaches {
- list: IGameInfo[],
- update_at: number,
- }
- class GameStore {
- private _gameListMap: { [key: string]: IGameCaches } = {};
- private _allGameList: IGameCaches;
- private _currencyNow: CurrencyType;
- private _favoriting: boolean = false;
- public get favoriting() { return this._favoriting; }
- public gameID = 0;
- public gameLink = "";
- clearGame() {
- this.gameID = 0;
- this.gameLink = "";
- }
- private getAllGames() {
- return this._allGameList?.list || [];
- }
- async reqAllGames() {
- const params: IGameListParams = {
- currency: "",
- favorite: 0
- }
- const res = await Http.call<IGameInfo[]>(APP_GAME_LIST, params as any);
- if (success(res)) {
- this._allGameList = {
- list: res.data,
- update_at: Date.now(),
- };
- return true;
- }
- return false;
- }
- async reqGameList(currency: CurrencyType, cache = true) {
- this._currencyNow = currency;
- const gameCache = this._gameListMap[currency];
- if (gameCache && cache) {
- if (Date.now() - gameCache.update_at < UPDATE_LIST_CD) {
- return true;
- }
- }
- const params: IGameListParams = {
- currency: currency,
- favorite: 0
- }
- const res = await Http.call<IGameInfo[]>(APP_GAME_LIST, params as any);
- if (success(res)) {
- this._gameListMap[currency] = {
- list: res.data,
- update_at: Date.now(),
- };
- return true;
- }
- return false;
- }
- async reqFavoAdd(id: number) {
- if (this._favoriting) return;
- this._favoriting = true;
- const res = await Http.call(APP_FAVO_ADD, { id });
- this._favoriting = false;
- if (success(res)) {
- const gameList = this.getAllGames();
- const game = gameList.find(g => g.gameID === id);
- if (game) {
- game.isFavorite = 1;
- return game;
- }
- }
- }
- async reqFavoRemove(id: number) {
- if (this._favoriting) return;
- this._favoriting = true;
- const res = await Http.call(APP_FAVO_REMOVE, { id });
- this._favoriting = false;
- if (success(res)) {
- const gameList = this.getAllGames();
- const game = gameList.find(g => g.gameID === id);
- if (game) {
- game.isFavorite = 0;
- return game;
- }
- }
- }
- filterGames(tag: GameTabType, currency: CurrencyType) {
- const allGames = this._allGameList?.list || [];
- let gameList = allGames;
- switch (tag) {
- case GAME_TABS.Hot:
- case GAME_TABS.New:
- gameList = allGames.filter(v => v.tags.find(t => t.tagCode === tag));
- break;
- case GAME_TABS.Favs:
- gameList = allGames.filter(v => v.isFavorite === 1);
- break;
- }
- return gameList.filter(v => v.currencies.includes(currency));
- }
- }
- export const gameStore = new GameStore();
|