jiro-ui
Version:
A Mithril.js UI library based from construct-ui
44 lines (35 loc) • 1.26 kB
text/typescript
import m from 'mithril';
import { Classes } from '../../_shared';
import { BaseControl, IControlAttrs } from '../base-control';
export interface ICheckboxAttrs extends IControlAttrs {
/** Initially sets control to indeterminate state (uncontrolled mode) */
defaultIndeterminate?: boolean;
/** Toggles indeterminate state */
indeterminate?: boolean;
}
export class Checkbox implements m.Component<ICheckboxAttrs> {
private input: HTMLInputElement;
public oncreate({ attrs, dom }: m.VnodeDOM<ICheckboxAttrs>) {
this.input = dom.querySelector('input') as HTMLInputElement;
if (attrs.defaultIndeterminate != null) {
this.input.indeterminate = attrs.defaultIndeterminate;
}
this.updateIndeterminate(attrs);
}
public onupdate({ attrs, dom }: m.VnodeDOM<ICheckboxAttrs>) {
this.input = dom.querySelector('input') as HTMLInputElement;
this.updateIndeterminate(attrs);
}
public view({ attrs }: m.Vnode<ICheckboxAttrs>) {
return m(BaseControl, {
...attrs as IControlAttrs,
type: 'checkbox',
typeClass: Classes.CHECKBOX
});
}
private updateIndeterminate(attrs: ICheckboxAttrs) {
if (attrs.indeterminate != null) {
this.input.indeterminate = attrs.indeterminate;
}
}
}