import lodash from "lodash"; import m, { CVnode, ClassComponent } from "mithril"; import { IList } from "../interface/list"; import { IMithrilEvent } from "../interface/widget"; import { ListController } from "./listController"; import { ListPage } from "./listPage"; export class List implements ClassComponent> { private static fragment() { return {}; } private controller!: ListController; private scrollHandler = lodash.throttle((target: HTMLElement) => { const scrollPct = (target.scrollTop / target.scrollHeight) || 0; this.controller.updateScroll(scrollPct); }, 50, { leading: false }); public oninit({ attrs: { controller } }: CVnode>) { this.controller = controller; } public view({ attrs: { component, classes = "overflow-y-auto", fragment = List.fragment } }: CVnode>) { return m("div", { class: classes, onscroll: (event: Event & IMithrilEvent) => { event.redraw = false; this.scrollHandler(event.target as HTMLElement); } }, this.controller.render( ({ items, idx, visible }) => m(ListPage, { items, idx, visible, component, fragment }) )); } }