import FlipClock from 'flipclock-es6';
import 'flipclock-es6/compiled/flipclock.css';
import Lang from './extension/lang';
import { DailyCounterFace, HourlyCounterFace } from './extension/faces';
import './style.less';
import DomService from '../domService';
/**
* @memberof Initiators/FlipClock
* @constructor FlipClockInitiator
* @param {Object} args - all arguments
* @example
* const flipClock = new FlipClockInitiator({selector: '.Promotion__timer'});
*/
export default class FlipClockInitiator {
wrapperObject = null;
args = null;
clock = [];
constructor(args) {
this.args = args;
this.wrapperObject = DomService.getAll('.PlasmaPromotion__timerJs');
}
/**
* @method FlipClockInitiator#addExtension
* @memberof Initiators/FlipClock
* @description Private method for init extension
*/
addExtension = () => {
FlipClock.Lang = {
...FlipClock.Lang,
...Lang,
};
FlipClock.PlasmaDailyCounterFace = FlipClock.Face.extend(DailyCounterFace);
FlipClock.PlasmaHourlyCounterFace = FlipClock.Face.extend(HourlyCounterFace);
};
/**
* @method FlipClockInitiator#run
* @memberof Initiators/FlipClock
* @description Run timer
* @example
* const flipClock = new FlipClockInitiator({selector: '.Promotion__timer'});
* flipClock.run();
*/
run = () => {
if (this.args.withoutTimer) return;
if (this.wrapperObject === null) return;
this.addExtension();
Array.prototype.forEach.call(this.wrapperObject, (timer) => {
const clock = new FlipClock(timer, this.args.time, {
language: this.args.language,
countdown: this.args.countdown,
clockFace: this.args.clockFace,
});
if (this.args.clockFace === 'counter') {
DomService.addClass(timer, ['PlasmaPromotionCounter']);
}
this.clock.push(clock);
});
if (this.args.clockFace === 'counter') {
this.clock.forEach((flipTimer) => {
setTimeout(() => {
setInterval(() => {
flipTimer.decrement();
}, this.args.timeInterval);
});
});
}
}
}