import {render, CustomElement, defineElement, Host, prop, state} from "../../packages/csx"; import style from "./index.scss"; import {TableComponent} from "./table-component"; @defineElement("table-tester") class TableTester extends CustomElement{ /** * * @type {({[headerRender]: (function(): string), render: (function(User): *), [size]: number})[]} */ #columnDefinitions = [ { headerRender: () => "Id", render: (u) => u.userId, size: 110 }, { headerRender: () => "Email", render: (u) => u.identity?.email, }, { headerRender: () => "FirstName", render: (u) => u.identity?.firstName, size: 160 }, { headerRender: () => "LastName", render: (u) => u.identity?.lastName, size: 160 }, { headerRender: () => "...", render: (u) => { let d = new Date(); return () }, size: 110 }, ]; @state() users = []; render(){ return } connectedCallback() { super.connectedCallback(); setTimeout(()=>this.load(), 0); setTimeout(()=>this.load(), 50); setTimeout(()=>this.load(), 100); setTimeout(()=>this.load(), 150); setTimeout(()=>this.load(), 200); setTimeout(()=>this.load(), 250); this.interval = setInterval(()=>this.load(), 3000); } interval; disconnectedCallback() { super.disconnectedCallback(); if(this.interval) { clearInterval(this.interval); } } load(){ let users = []; let rndFirstNames = ['Loes', 'Johnny', 'Maria', 'Jezus', 'Philippe', 'Filip', 'Annie']; let rndLastNames = ['Peeters', 'Wachters', 'Jannsens', 'De Schaetzen', 'Becks', 'Konings', 'De Clerk']; for(let i = 0; i < 5; ++i){ let first = rndFirstNames[Math.floor(rndFirstNames.length*Math.random())]; let last = rndLastNames[Math.floor(rndLastNames.length*Math.random())]; users.push({ userId: (Math.random()*99999).toString(36).slice(-6).toUpperCase(), identity: { firstName: first, lastName: last, email: `${first}.${last}@example.com`.toLocaleLowerCase() } }) } this.users = users; } lastClear = new Date(); testMe = (ev, u, d)=>{ if((new Date()).getTime() - this.lastClear.getTime() > 20){ console.log("\n\n"); this.lastClear = new Date(); } console.log("I should only show up once per click:", d.getTime()); } } document.body.appendChild(render()); document.body.appendChild(render());