import { ComponentBase } from '../ComponentBase'; import { DomRender, DomRenderRunConfig } from '../../DomRender'; import { RawSet } from '../../rawsets/RawSet'; import { OtherData } from '../../lifecycle/OnChangeAttrRender'; import { OnDestroyRenderParams } from '../../lifecycle/OnDestroyRender'; export namespace Timer { export const selector = 'dr-timer'; export type Attribute = { value?: string; interval?: number; onCreated?: (timer: Timer) => void; }; export class Timer extends ComponentBase { private interval?: any; private value?: number; async onInitRender(param: any, rawSet: RawSet) { await super.onInitRender(param, rawSet); this.getAttribute('onCreated')?.(this); // console.log('---2', this.getElement()?.isConnected) // const element = this.getElement(); // if(element){ // (element as any).component = this; // } } isRunning() { return this.value !== undefined; } start() { const timems = this.getAttribute('value'); if (timems) { this.value = parseInt(timems); const intervalValue = this.getAttribute('interval') ?? 1000; console.log('int', this.value, intervalValue); this.interval = setInterval(() => { // console.log('--------->', this.value); if (this.value) { this.value--; } else { clearInterval(this.interval); this.value = undefined; this.interval = undefined; } }, intervalValue); } } stop() { if (this.interval) { clearInterval(this.interval); this.interval = undefined; this.value = undefined; } } onChangeAttrRender(name: string, val: any, other: OtherData) { super.onChangeAttrRender(name, val, other); console.log('-----', name, val, this.getElement()); } onDestroyRender(data: OnDestroyRenderParams) { super.onDestroyRender(data); if (this.interval) { clearInterval(this.interval); } } } } export default { timer: (config?: DomRenderRunConfig) => { return RawSet.createComponentTargetElement({ name: `${Timer.selector}`, template: '#innerHTML#', objFactory: (e, o, r2, counstructorParam) => { return DomRender.run({ rootObject: new Timer.Timer(...counstructorParam), config: config }); } }); } };