403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/im/v2/lib/promo/src/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/im/v2/lib/promo/src/promo.js
import { Core } from 'im.v2.application.core';
import { Logger } from 'im.v2.lib.logger';
import { PromoId } from 'im.v2.const';

import { PromoService } from './classes/promo-service';
import { Promo } from './classes/promo';

import type { PromotionUpdatedParams, PromoParams, RawPromoData } from 'im.v2.provider.pull';

export class PromoManager
{
	static #instance: PromoManager;

	#promoList: Promo[];

	static getInstance(): PromoManager
	{
		if (!this.#instance)
		{
			this.#instance = new this();
		}

		return this.#instance;
	}

	static init()
	{
		PromoManager.getInstance();
	}

	constructor()
	{
		const { promoList } = Core.getApplicationData();
		Logger.warn('PromoManager: promoList', promoList);
		this.#init(promoList);
	}

	needToShow(promoId: $Values<typeof PromoId>, promoParams: PromoParams = {}): boolean
	{
		const promo: Promo = new Promo(promoId, promoParams);

		return Boolean(this.#get(promo));
	}

	async markAsWatched(promoId: $Values<typeof PromoId>, promoParams: PromoParams = {}): Promise<void>
	{
		const promo: Promo = new Promo(promoId, promoParams);

		if (this.#get(promo))
		{
			await PromoService.markAsWatched(promo);
			this.#remove(promo);
		}
	}

	onPromotionUpdated(params: PromotionUpdatedParams): void
	{
		const deletedPromotions: Promo[] = params.deletedPromotions.map(
			(promoData: RawPromoData) => Promo.createFromRawPromoData(promoData),
		);

		this.#removeByPromotionList(deletedPromotions);

		const addedPromotions: Promo[] = params.addedPromotions.map(
			(promoData: RawPromoData) => Promo.createFromRawPromoData(promoData),
		);

		this.#promoList = [...this.#promoList, ...addedPromotions];
	}

	#init(promoList: RawPromoData[]): void
	{
		this.#promoList = promoList.map((promoData: RawPromoData) => Promo.createFromRawPromoData(promoData));
	}

	#get(promo: Promo): ?Promo
	{
		return this.#promoList.find((item: Promo) => item.isEqual(promo));
	}

	#remove(promo: Promo): void
	{
		this.#promoList = this.#promoList.filter((item: Promo) => !item.isEqual(promo));
	}

	#removeByPromotionList(promoList: Promo[]): void
	{
		this.#promoList = this.#promoList.filter((promo: Promo) => {
			const deletedPromo = promoList.find((deleted: Promo) => deleted.id === promo.id);
			if (!deletedPromo)
			{
				return true;
			}

			if (deletedPromo.isEmptyParams())
			{
				return false;
			}

			return !promo.isEqual(deletedPromo);
		});
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit