mirror of
https://github.com/flarum/framework.git
synced 2024-12-03 07:33:36 +08:00
38 lines
782 B
JavaScript
38 lines
782 B
JavaScript
/**
|
|
// constructor
|
|
this.subtree = new SubtreeRetainer(
|
|
() => this.props.post.freshness,
|
|
() => this.showing
|
|
);
|
|
this.subtree.add(() => this.props.user.freshness);
|
|
|
|
// view
|
|
this.subtree.retain() || 'expensive expression'
|
|
*/
|
|
export default class SubtreeRetainer {
|
|
constructor() {
|
|
this.clear();
|
|
this.callbacks = [].slice.call(arguments);
|
|
}
|
|
|
|
retain() {
|
|
var needsRebuild = false;
|
|
this.callbacks.forEach((callback, i) => {
|
|
var result = callback();
|
|
if (result !== this.old[i]) {
|
|
this.old[i] = result;
|
|
needsRebuild = true;
|
|
}
|
|
});
|
|
return needsRebuild ? false : {subtree: 'retain'};
|
|
}
|
|
|
|
add() {
|
|
this.callbacks = this.callbacks.concat([].slice.call(arguments));
|
|
}
|
|
|
|
clear() {
|
|
this.old = [];
|
|
}
|
|
}
|