浏览代码

Fixes infinite loop with triggerChange

If child is splatted, it can trigger a change on itself (e.g. parent)
main
Eric Amodio 4 年前
父节点
当前提交
356f1ffbd7
共有 1 个文件被更改,包括 7 次插入4 次删除
  1. +7
    -4
      src/views/nodes/viewNode.ts

+ 7
- 4
src/views/nodes/viewNode.ts 查看文件

@ -108,11 +108,14 @@ export abstract class ViewNode {
refresh?(reset?: boolean): boolean | void | Promise<void> | Promise<boolean>;
@gate()
@gate<RepositoryFolderNode['triggerChange']>(
(reset: boolean = false, force: boolean = false, avoidSelf?: ViewNode) =>
JSON.stringify([reset, force, avoidSelf?.toString()]),
)
@debug()
triggerChange(reset: boolean = false, force: boolean = false): Promise<void> {
triggerChange(reset: boolean = false, force: boolean = false, avoidSelf?: ViewNode): Promise<void> {
// If this node has been splatted (e.g. not shown itself, but its children are), then delegate the change to its parent
if (this.splatted && this.parent != null) {
if (this.splatted && this.parent != null && this.parent !== avoidSelf) {
return this.parent.triggerChange(reset, force);
}
@ -354,7 +357,7 @@ export abstract class RepositoryFolderNode<
@gate()
@debug()
async refresh(reset: boolean = false) {
await this.child?.triggerChange(reset);
await this.child?.triggerChange(reset, false, this);
await this.ensureSubscription();
}

正在加载...
取消
保存