MainWidget.tsx
82 lines
| 2.5 KiB
| text/x-typescript
|
TypeScriptLexer
cin
|
r99 | import { djbase, djclass } from "@implab/djx/declare"; | ||
import { DjxWidgetBase } from "@implab/djx/tsx/DjxWidgetBase"; | ||||
cin
|
r102 | import { createElement, watch, prop, attach, all, bind, toggleClass } from "@implab/djx/tsx"; | ||
cin
|
r100 | import ProgressBar from "./ProgressBar"; | ||
cin
|
r101 | import Button = require("dijit/form/Button"); | ||
cin
|
r102 | import { interval } from "rxjs"; | ||
cin
|
r99 | |||
@djclass | ||||
export default class MainWidget extends djbase(DjxWidgetBase) { | ||||
cin
|
r100 | |||
titleNode?: HTMLHeadingElement; | ||||
progressBar?: ProgressBar; | ||||
cin
|
r101 | count = 0; | ||
showCounter = false; | ||||
cin
|
r102 | counterNode?: HTMLInputElement; | ||
paused = false; | ||||
cin
|
r99 | render() { | ||
cin
|
r102 | const Counter = ({ children }: { children: unknown[] }) => <span>Counter: {children}</span>; | ||
cin
|
r101 | return <div className="tundra"> | ||
cin
|
r102 | <h2 ref={attach(this, "titleNode")}>Hi!</h2> | ||
<ProgressBar ref={attach(this, "progressBar")} /> | ||||
<section style={{ padding: "10px" }}> | ||||
{watch(prop(this, "showCounter"), flag => flag && | ||||
[ | ||||
<Counter><input ref={all( | ||||
bind("value", prop(this, "count") | ||||
.map(x => x*10) | ||||
.map(String) | ||||
), | ||||
attach(this, "counterNode") | ||||
)} /> <span>ms</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> | ||||
cin
|
r101 | <Button onClick={this._onToggleCounterClick}>Toggle counter</Button> | ||
cin
|
r99 | </div>; | ||
} | ||||
cin
|
r101 | |||
postCreate(): void { | ||||
super.postCreate(); | ||||
cin
|
r102 | const h = setInterval( | ||
() => { | ||||
this.set("count", this.count + 1); | ||||
}, | ||||
10 | ||||
); | ||||
this.own({ | ||||
destroy: () => { | ||||
clearInterval(h); | ||||
} | ||||
}); | ||||
} | ||||
cin
|
r101 | |||
cin
|
r102 | private _onPauseClick = () => { | ||
this.set("paused", !this.paused); | ||||
cin
|
r101 | } | ||
private _onToggleCounterClick = () => { | ||||
this.set("showCounter", !this.showCounter); | ||||
} | ||||
cin
|
r99 | } | ||