2019-03-12 11:42:46 +01:00
|
|
|
import { Component } from "./core/component";
|
2019-03-04 17:00:29 +01:00
|
|
|
import { Env } from "./env";
|
2019-02-05 14:39:45 +01:00
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
// Widget classes
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
2019-03-12 11:42:46 +01:00
|
|
|
export class Widget<P, S> extends Component<Env, P, S> {
|
2019-02-06 10:15:07 +01:00
|
|
|
constructor(parent, props) {
|
|
|
|
|
super(parent, props);
|
|
|
|
|
(<any>this.__widget__).isMobile = this.env.isMobile;
|
|
|
|
|
}
|
2019-03-12 11:42:46 +01:00
|
|
|
async updateProps(nextProps: P): Promise<void> {
|
2019-02-06 10:15:07 +01:00
|
|
|
if ((<any>this.__widget__).isMobile !== this.env.isMobile) {
|
|
|
|
|
(<any>this.__widget__).isMobile = this.env.isMobile;
|
2019-03-12 11:42:46 +01:00
|
|
|
return this._updateProps(nextProps);
|
|
|
|
|
}
|
|
|
|
|
return super.updateProps(nextProps);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export class PureWidget<P, S> extends Widget<P, S> {
|
|
|
|
|
shouldUpdate(nextProps: P): boolean {
|
|
|
|
|
for (let k in nextProps) {
|
|
|
|
|
if (nextProps[k] !== this.props[k]) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
async updateState(nextState: Partial<S>) {
|
|
|
|
|
for (let k in nextState) {
|
|
|
|
|
if (nextState[k] !== this.state[k]) {
|
|
|
|
|
return super.updateState(nextState);
|
|
|
|
|
}
|
2019-02-06 10:15:07 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|