import { IntUtils } from '../IntUtils'; import { TStoreItem } from '../WSAPI/WSAPITypes'; import { StoreItem } from './StoreItem'; import { StoreItemPurchaseType } from './StoreItemPurchaseType'; import { StoreItemTypeNamed } from './StoreItemType'; interface StoreItemPurchased extends StoreItem { purchase_ts: number; purchase_points_amount: number; purchased_today?: boolean; purchased_this_week?: boolean; purchased_this_month?: boolean; } const mapPurchaseType = (purchaseType: StoreItemPurchaseType) => { if (purchaseType === StoreItemPurchaseType.Points) { return 'points'; } else if (purchaseType === StoreItemPurchaseType.Gems) { return 'gems'; } else if (purchaseType === StoreItemPurchaseType.Diamonds) { return 'diamonds'; } return 'points'; }; export const StoreItemPurchasedTransform = (items: StoreItemPurchased[]): TStoreItem[] => { return items .filter((r) => r.id >= 1) .map((r) => { const purchasedToday = r.purchase_ts ? IntUtils.isWithinPeriod(r.purchase_ts, 'today') : false; const purchasedThisWeek = r.purchase_ts ? IntUtils.isWithinPeriod(r.purchase_ts, 'thisWeek') : false; const purchasedThisMonth = r.purchase_ts ? IntUtils.isWithinPeriod(r.purchase_ts, 'thisMonth') : false; const x: TStoreItem = { id: r.id, name: r.itemPublicMeta.name, price: r.itemPublicMeta.price as any as number, // AA: strange why it's string purchase_type: mapPurchaseType(r.itemPublicMeta.purchase_type), image: r.itemPublicMeta.image_url, description: r.itemPublicMeta.description, ribbon: r.itemPublicMeta.label_tag === 'custom' ? r.itemPublicMeta.custom_label_tag : r.itemPublicMeta.label_tag, limit_message: r.itemPublicMeta.limit_message, purchase_limit_message: r.itemPublicMeta.purchase_limit_message, priority: r.itemPublicMeta.priority ?? 0, related_item_ids: r.itemPublicMeta.related_items, hint_text: r.itemPublicMeta.hint_text, type: StoreItemTypeNamed(r.itemTypeId), can_buy: r.canBuy, category_ids: r.categoryIds ?? [], pool: r.shopPool, purchase_ts: r.purchase_ts, purchase_points_amount: r.purchase_points_amount, purchased_today: purchasedToday, purchased_this_week: purchasedThisWeek, purchased_this_month: purchasedThisMonth, custom_data: r.itemPublicMeta.custom_data, show_timer: r.itemPublicMeta.show_timer, related_games: (r.relatedGames?.filter((g) => g.game_public_meta.enabled) || []).map((g, i) => ({ ext_game_id: g.ext_game_id, game_public_meta: { name: g.game_public_meta.name, link: g.game_public_meta.link, image: g.game_public_meta.image, enabled: g.game_public_meta.enabled, game_categories: g.game_public_meta.game_categories, game_provider: g.game_public_meta.game_provider, mobile_spec_link: g.game_public_meta.mobile_spec_link, priority: i + 1, }, })), }; return x; }); }; export { StoreItemPurchased };