| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import {
- APP_CHECKIN_CHECK,
- APP_CHECKIN_GET,
- success,
- } from '../../api';
- import { ApiEnvelope, Http } from '../../request';
- import { ICheckInData, ICheckInResponseData } from './data';
- class CheckInStore {
- private _checkInData: ICheckInData = null;
- private _nextCheckInTime = 0;
- private _canCheckIn = false;
- public get checkInData() { return this._checkInData; }
- public get nextCheckInTime() { return this._nextCheckInTime; }
- public get canCheckIn() { return this._canCheckIn; }
- async reqCheckinCheck(): Promise<boolean> {
- const res = await Http.call<ICheckInResponseData>(APP_CHECKIN_CHECK);
- if (success(res) && res.data) {
- this.parseCheckInData(res.data);
- return this._canCheckIn;
- }
- return false;
- }
- async reqCheckinGet(): Promise<ApiEnvelope> {
- const res = await Http.call(APP_CHECKIN_GET);
- if (success(res)) {
- this._canCheckIn = false;
- try {
- await this.reqCheckinCheck();
- } catch (error) {
- console.warn('[CheckInStore] failed to refresh check-in info', error);
- }
- }
- return res;
- }
- clear() {
- this._checkInData = null;
- this._nextCheckInTime = 0;
- this._canCheckIn = false;
- }
- private parseCheckInData(data: ICheckInResponseData) {
- const config = Array.isArray(data.config) ? data.config : [];
- const record = String(data.RecordDay || '');
- let signInDay = -1;
- const dailyRewards = config.map((item, index) => {
- signInDay = Number(item.SignInDay);
- return {
- dayNumber: Number(item.DayNumber),
- rewardScore: Number(item.RewardScore) / 100,
- isCheckedIn: Number.parseInt(record.substring(index, index + 1), 10) > 0,
- };
- });
- const seconds = Number(data.seconds || 0);
- const nextCheckInTime = seconds > 0 ? Date.now() + seconds * 1000 : 0;
- let nextDayNumber = Number(data.NextDayNumber || 0);
- let canCheckIn = nextCheckInTime === 0 || Date.now() >= nextCheckInTime;
- if (nextDayNumber > 7) {
- nextDayNumber = 7;
- canCheckIn = false;
- }
- const parsedLastDate = data.LastDate ? Date.parse(String(data.LastDate)) : 0;
- this._checkInData = {
- ...data,
- dailyRewards,
- nDayNumber: signInDay,
- LastDate: Number.isFinite(parsedLastDate) ? parsedLastDate : 0,
- NextDayNumber: nextDayNumber,
- };
- this._nextCheckInTime = nextCheckInTime;
- this._canCheckIn = canCheckIn;
- }
- }
- export const checkInStore = new CheckInStore();
|