|
|
import { djbase, djclass } from "@implab/djx/declare";
|
|
|
import { DjxWidgetBase } from "@implab/djx/tsx/DjxWidgetBase";
|
|
|
import { createElement, watch, prop, attach, all, bind, toggleClass } from "@implab/djx/tsx";
|
|
|
import ProgressBar from "./ProgressBar";
|
|
|
import Button = require("dijit/form/Button");
|
|
|
import { interval } from "rxjs";
|
|
|
|
|
|
const Counter = ({ children }: { children: unknown[] }) => <span>Counter: {children}</span>;
|
|
|
|
|
|
@djclass
|
|
|
export default class MainWidget extends djbase(DjxWidgetBase) {
|
|
|
|
|
|
titleNode?: HTMLHeadingElement;
|
|
|
|
|
|
progressBar?: ProgressBar;
|
|
|
|
|
|
count = 0;
|
|
|
|
|
|
showCounter = false;
|
|
|
|
|
|
counterNode?: HTMLInputElement;
|
|
|
|
|
|
paused = false;
|
|
|
|
|
|
render() {
|
|
|
|
|
|
return <div className="tundra">
|
|
|
<h2 ref={attach(this, "titleNode")}>Hi!</h2>
|
|
|
<section style={{ padding: "10px" }}>
|
|
|
{watch(prop(this, "showCounter"), flag => flag &&
|
|
|
[
|
|
|
<Counter><input ref={all(
|
|
|
bind("value", prop(this, "count")
|
|
|
.map(x => x/10)
|
|
|
),
|
|
|
attach(this, "counterNode")
|
|
|
)} /> <span>s</span></Counter>,
|
|
|
" | ",
|
|
|
<span ref={bind("innerHTML", interval(1000))}></span>,
|
|
|
" | ",
|
|
|
<Button
|
|
|
ref={all(
|
|
|
bind("label", prop(this, "paused")
|
|
|
.map(x => x ? "Unpause" : "Pause")
|
|
|
),
|
|
|
toggleClass("paused", prop(this,"paused"))
|
|
|
)}
|
|
|
onClick={this._onPauseClick}
|
|
|
/>
|
|
|
]
|
|
|
|
|
|
)}
|
|
|
</section>
|
|
|
<Button onClick={this._onToggleCounterClick}>Toggle counter</Button>
|
|
|
</div>;
|
|
|
}
|
|
|
|
|
|
postCreate(): void {
|
|
|
super.postCreate();
|
|
|
|
|
|
const h = setInterval(
|
|
|
() => {
|
|
|
this.set("count", this.count + 1);
|
|
|
},
|
|
|
100
|
|
|
);
|
|
|
this.own({
|
|
|
destroy: () => {
|
|
|
clearInterval(h);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
private readonly _onPauseClick = () => {
|
|
|
this.set("paused", !this.paused);
|
|
|
};
|
|
|
|
|
|
private readonly _onToggleCounterClick = () => {
|
|
|
this.set("showCounter", !this.showCounter);
|
|
|
};
|
|
|
}
|
|
|
|