@opensumi/ide-components 2.16.7 → 2.16.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/index.js +171 -59
  2. package/lib/icon/iconfont/iconManager.d.ts +13 -1
  3. package/lib/icon/iconfont/iconManager.d.ts.map +1 -1
  4. package/lib/icon/iconfont/iconManager.js +4 -0
  5. package/lib/icon/iconfont/iconManager.js.map +1 -1
  6. package/lib/icon/iconfont/iconMap.d.ts +13 -1
  7. package/lib/icon/iconfont/iconMap.d.ts.map +1 -1
  8. package/lib/icon/iconfont/iconMap.js +13 -1
  9. package/lib/icon/iconfont/iconMap.js.map +1 -1
  10. package/lib/icon/iconfont/iconfont.css +50 -6
  11. package/lib/icon/iconfont/iconfont.eot +0 -0
  12. package/lib/icon/iconfont/iconfont.html +341 -741
  13. package/lib/icon/iconfont/iconfont.svg +22 -0
  14. package/lib/icon/iconfont/iconfont.ttf +0 -0
  15. package/lib/icon/iconfont/iconfont.woff +0 -0
  16. package/lib/icon/iconfont/iconfont.woff2 +0 -0
  17. package/lib/menu/MenuItem.d.ts +6 -7
  18. package/lib/menu/MenuItem.d.ts.map +1 -1
  19. package/lib/menu/MenuItem.js +2 -8
  20. package/lib/menu/MenuItem.js.map +1 -1
  21. package/lib/menu/SubMenu.d.ts +4 -5
  22. package/lib/menu/SubMenu.d.ts.map +1 -1
  23. package/lib/menu/SubMenu.js +1 -10
  24. package/lib/menu/SubMenu.js.map +1 -1
  25. package/lib/menu/index.d.ts +4 -4
  26. package/lib/menu/index.d.ts.map +1 -1
  27. package/lib/menu/index.js +1 -1
  28. package/lib/menu/index.js.map +1 -1
  29. package/lib/menu/style.less +2 -1
  30. package/lib/notification/index.d.ts +1 -1
  31. package/lib/notification/index.d.ts.map +1 -1
  32. package/lib/notification/index.js.map +1 -1
  33. package/lib/recycle-tree/RecycleTree.d.ts +4 -2
  34. package/lib/recycle-tree/RecycleTree.d.ts.map +1 -1
  35. package/lib/recycle-tree/RecycleTree.js +50 -13
  36. package/lib/recycle-tree/RecycleTree.js.map +1 -1
  37. package/lib/recycle-tree/tree/TreeNode.d.ts +15 -4
  38. package/lib/recycle-tree/tree/TreeNode.d.ts.map +1 -1
  39. package/lib/recycle-tree/tree/TreeNode.js +91 -34
  40. package/lib/recycle-tree/tree/TreeNode.js.map +1 -1
  41. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -4163,7 +4163,7 @@ tslib_1.__exportStar(__webpack_require__(294), exports);
4163
4163
  "use strict";
4164
4164
 
4165
4165
  Object.defineProperty(exports, "__esModule", { value: true });
4166
- exports.CompositeTreeNode = exports.TreeNode = exports.spliceArray = void 0;
4166
+ exports.CompositeTreeNode = exports.TreeNode = exports.BranchOperatorStatus = exports.spliceArray = void 0;
4167
4167
  const tslib_1 = __webpack_require__(2);
4168
4168
  const utils_1 = __webpack_require__(14);
4169
4169
  const types_1 = __webpack_require__(22);
@@ -4181,6 +4181,11 @@ function spliceArray(arr, start, deleteCount = 0, items) {
4181
4181
  return a;
4182
4182
  }
4183
4183
  exports.spliceArray = spliceArray;
4184
+ var BranchOperatorStatus;
4185
+ (function (BranchOperatorStatus) {
4186
+ BranchOperatorStatus[BranchOperatorStatus["EXPANDED"] = 1] = "EXPANDED";
4187
+ BranchOperatorStatus[BranchOperatorStatus["SHRINKED"] = 2] = "SHRINKED";
4188
+ })(BranchOperatorStatus = exports.BranchOperatorStatus || (exports.BranchOperatorStatus = {}));
4184
4189
  class TreeNode {
4185
4190
  constructor(tree, parent, watcher, optionalMetadata, options) {
4186
4191
  this._uid = TreeNode.nextId();
@@ -4199,6 +4204,10 @@ class TreeNode {
4199
4204
  if (!(options && options.disableCache)) {
4200
4205
  TreeNode.setTreeNode(this._uid, this.path, this);
4201
4206
  }
4207
+ if (!parent) {
4208
+ // 由于根节点默认展开,故默认状态应该为 BranchOperatorStatus.EXPANDED
4209
+ TreeNode.updateBranchStatus(this.path, BranchOperatorStatus.EXPANDED);
4210
+ }
4202
4211
  }
4203
4212
  static is(node) {
4204
4213
  return !!node && 'depth' in node && 'name' in node && 'path' in node && 'id' in node;
@@ -4217,6 +4226,12 @@ class TreeNode {
4217
4226
  TreeNode.idToTreeNode.delete(id);
4218
4227
  TreeNode.pathToTreeNode.delete(path);
4219
4228
  }
4229
+ static updateBranchStatus(path, status) {
4230
+ TreeNode.pathToBranchStatus.set(path, status);
4231
+ }
4232
+ static getBranchStatus(path) {
4233
+ return TreeNode.pathToBranchStatus.get(path);
4234
+ }
4220
4235
  get disposed() {
4221
4236
  return this._disposed;
4222
4237
  }
@@ -4357,6 +4372,7 @@ TreeNode.nextId = (() => {
4357
4372
  })();
4358
4373
  TreeNode.idToTreeNode = new Map();
4359
4374
  TreeNode.pathToTreeNode = new Map();
4375
+ TreeNode.pathToBranchStatus = new Map();
4360
4376
  class CompositeTreeNode extends TreeNode {
4361
4377
  // parent 为undefined即表示该节点为根节点
4362
4378
  constructor(tree, parent, watcher, optionalMetadata, options) {
@@ -4603,10 +4619,10 @@ class CompositeTreeNode extends TreeNode {
4603
4619
  this.isExpanded = true;
4604
4620
  if (this._children === null) {
4605
4621
  !quiet && this._watcher.notifyWillResolveChildren(this, this.isExpanded);
4606
- yield this.hardReloadChildren();
4622
+ const resolved = yield this.hardReloadChildren();
4607
4623
  !quiet && this._watcher.notifyDidResolveChildren(this, this.isExpanded);
4608
4624
  // 检查其是否展开;可能同时执行了 setCollapsed 方法
4609
- if (!this.isExpanded) {
4625
+ if (!this.isExpanded || !resolved) {
4610
4626
  return;
4611
4627
  }
4612
4628
  }
@@ -4664,7 +4680,21 @@ class CompositeTreeNode extends TreeNode {
4664
4680
  let forceLoadPath;
4665
4681
  if (this.isExpanded) {
4666
4682
  if (needReload) {
4667
- yield this.hardReloadChildren(true);
4683
+ const resolved = yield this.hardReloadChildren(true);
4684
+ if (!resolved) {
4685
+ // 当请求刷新节点时,如果该节点已经不应该被处理,则清理 Children
4686
+ // 下次再被展开时便会自动更新 Children 最新内容
4687
+ if (this.children) {
4688
+ // 清理子节点,等待下次展开时更新
4689
+ if (!!this.children && this.parent) {
4690
+ for (const child of this.children) {
4691
+ child.dispose();
4692
+ }
4693
+ this._children = null;
4694
+ }
4695
+ }
4696
+ return;
4697
+ }
4668
4698
  }
4669
4699
  while ((forceLoadPath = expandedPaths.shift())) {
4670
4700
  const relativePath = new utils_1.Path(this.path).relative(new utils_1.Path(forceLoadPath));
@@ -4680,9 +4710,9 @@ class CompositeTreeNode extends TreeNode {
4680
4710
  if (forceLoadPath.indexOf(child.path) === 0 && CompositeTreeNode.is(child)) {
4681
4711
  // 包含压缩节点的情况
4682
4712
  // 加载路径包含当前判断路径,尝试加载该节点再匹配
4683
- yield child.hardReloadChildren(true);
4684
- if (child.isExpanded) {
4685
- // 说明此时节点初始化时已默认展开,不需要进一步处理
4713
+ const resolved = yield child.hardReloadChildren(true);
4714
+ if (child.isExpanded || !resolved) {
4715
+ // 说明此时节点初始化时已默认展开或被裁切,不需要进一步处理
4686
4716
  continue;
4687
4717
  }
4688
4718
  child.isExpanded = true;
@@ -4710,8 +4740,12 @@ class CompositeTreeNode extends TreeNode {
4710
4740
  yield child.forceReloadChildrenQuiet(expandedPaths);
4711
4741
  }
4712
4742
  else {
4713
- yield child.hardReloadChildren(true);
4714
- child.expandBranch(child, true);
4743
+ const resolved = yield child.hardReloadChildren(true);
4744
+ if (resolved) {
4745
+ // 这里有可能因为加载节点内容后由于节点已裁切到本身节点上,导致二次裁切问题
4746
+ // 当节点裁切后不再二次裁切,同时也不额外执行展开节点的操作
4747
+ child.expandBranch(child, true);
4748
+ }
4715
4749
  }
4716
4750
  }
4717
4751
  }
@@ -4720,6 +4754,7 @@ class CompositeTreeNode extends TreeNode {
4720
4754
  this.expandBranch(this, true);
4721
4755
  }
4722
4756
  else if (CompositeTreeNode.isRoot(this)) {
4757
+ TreeNode.updateBranchStatus(this.path, BranchOperatorStatus.EXPANDED);
4723
4758
  // 通知分支树已更新
4724
4759
  this.watcher.notifyDidUpdateBranch();
4725
4760
  }
@@ -4783,20 +4818,22 @@ class CompositeTreeNode extends TreeNode {
4783
4818
  }
4784
4819
  // 折叠节点
4785
4820
  setCollapsed(quiet = false) {
4786
- // 根节点不可折叠
4787
- if (CompositeTreeNode.isRoot(this)) {
4788
- return;
4789
- }
4790
- if (!this.isExpanded) {
4791
- return;
4792
- }
4793
- if (this._children && this.parent) {
4821
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
4822
+ // 根节点不可折叠
4823
+ if (CompositeTreeNode.isRoot(this)) {
4824
+ return;
4825
+ }
4826
+ if (!this.isExpanded) {
4827
+ return;
4828
+ }
4794
4829
  !quiet && this._watcher.notifyWillChangeExpansionState(this, false);
4795
- // 从根节点裁剪分支
4796
- this.shrinkBranch(this, quiet);
4797
- }
4798
- this.isExpanded = false;
4799
- !quiet && this._watcher.notifyDidChangeExpansionState(this, false);
4830
+ if (this._children && this.parent) {
4831
+ // 从根节点裁剪分支
4832
+ this.shrinkBranch(this, quiet);
4833
+ }
4834
+ this.isExpanded = false;
4835
+ !quiet && this._watcher.notifyDidChangeExpansionState(this, false);
4836
+ });
4800
4837
  }
4801
4838
  mv(to, name = this.name) {
4802
4839
  const prevPath = this.path;
@@ -4966,22 +5003,22 @@ class CompositeTreeNode extends TreeNode {
4966
5003
  * 设置扁平化的分支信息
4967
5004
  */
4968
5005
  setFlattenedBranch(leaves, withoutNotify) {
4969
- this._lock = true;
4970
5006
  this._flattenedBranch = leaves;
4971
5007
  // Root节点才通知更新
4972
5008
  if (CompositeTreeNode.isRoot(this) && !withoutNotify) {
4973
5009
  this.watcher.notifyDidUpdateBranch();
4974
5010
  }
4975
- this._lock = false;
4976
5011
  }
4977
5012
  /**
4978
5013
  * 展开分支节点
4979
5014
  * @param branch 分支节点
4980
5015
  */
4981
5016
  expandBranch(branch, withoutNotify) {
4982
- if (this !== branch) {
5017
+ if (this !== branch && !this.lock) {
4983
5018
  // 但节点为展开状态时进行裁剪
4984
- this._branchSize += branch._branchSize;
5019
+ if (branch._flattenedBranch) {
5020
+ this._branchSize += branch._branchSize;
5021
+ }
4985
5022
  }
4986
5023
  // 当前节点为折叠状态,更新分支信息
4987
5024
  if (this !== branch && this._flattenedBranch) {
@@ -4998,20 +5035,19 @@ class CompositeTreeNode extends TreeNode {
4998
5035
  this.setFlattenedBranch(spliceArray(this._flattenedBranch, injectionStartIdx, 0, branch._flattenedBranch), withoutNotify);
4999
5036
  }
5000
5037
  // 取消展开分支对于分支的所有权,即最终只会有顶部Root拥有所有分支信息
5001
- if (!branch.lock) {
5002
- branch.setFlattenedBranch(null, withoutNotify);
5003
- }
5038
+ branch.setFlattenedBranch(null, withoutNotify);
5004
5039
  }
5005
5040
  else if (this.parent) {
5006
5041
  this.parent.expandBranch(branch, withoutNotify);
5007
5042
  }
5043
+ TreeNode.updateBranchStatus(branch.path, BranchOperatorStatus.EXPANDED);
5008
5044
  }
5009
5045
  /**
5010
5046
  * 清理分支节点
5011
5047
  * @param branch 分支节点
5012
5048
  */
5013
5049
  shrinkBranch(branch, withoutNotify) {
5014
- if (this !== branch) {
5050
+ if (this !== branch && !this.lock) {
5015
5051
  // 这里的`this`实际上为父节点
5016
5052
  // `this`的分支大小没有改变,仍然具有相同数量的叶子,但是从父级参照系(即根节点)来看,其分支缩小了
5017
5053
  this._branchSize -= branch._branchSize;
@@ -5022,20 +5058,21 @@ class CompositeTreeNode extends TreeNode {
5022
5058
  // 中途发生了branch更新事件,此时的_flattenedBranch可能已被更新,即查找不到branch.id
5023
5059
  return;
5024
5060
  }
5025
- if (!branch.lock) {
5026
- // 返回分支对于分支信息所有权,即将折叠的节点信息再次存储于折叠了的节点中
5027
- branch.setFlattenedBranch(this._flattenedBranch.slice(removalStartIdx, removalStartIdx + branch._branchSize), withoutNotify);
5028
- }
5029
- if (!this.lock) {
5030
- this.setFlattenedBranch(spliceArray(this._flattenedBranch, removalStartIdx, branch._flattenedBranch ? branch._flattenedBranch.length : 0), withoutNotify);
5031
- }
5061
+ // 返回分支对于分支信息所有权,即将折叠的节点信息再次存储于折叠了的节点中
5062
+ branch.setFlattenedBranch(this._flattenedBranch.slice(removalStartIdx, removalStartIdx + branch._branchSize), withoutNotify);
5063
+ this.setFlattenedBranch(spliceArray(this._flattenedBranch, removalStartIdx, branch._flattenedBranch ? branch._flattenedBranch.length : 0), withoutNotify);
5032
5064
  }
5033
5065
  else if (this.parent) {
5034
5066
  this.parent.shrinkBranch(branch, withoutNotify);
5035
5067
  }
5068
+ TreeNode.updateBranchStatus(branch.path, BranchOperatorStatus.SHRINKED);
5036
5069
  }
5037
5070
  /**
5038
5071
  * 加载节点信息
5072
+ * 当返回值为 true 时,一般应该被逻辑响应,即需要进行 expandBranch 的操作更新视图
5073
+ * 返回值为 false 时,此时后续的 expandBranch 不应该被响应,否则可能出现节点重复展示问题
5074
+ * 该问题一般容易在调用 refresh 时并在某个时间点点击节点展开的情况下
5075
+ *
5039
5076
  * @memberof CompositeTreeNode
5040
5077
  */
5041
5078
  hardReloadChildren(quiet) {
@@ -5043,10 +5080,10 @@ class CompositeTreeNode extends TreeNode {
5043
5080
  if (this.hardReloadPromise) {
5044
5081
  return this.hardReloadPromise;
5045
5082
  }
5046
- this.hardReloadPromise = new Promise((res) => (this.hardReloadPResolver = res));
5083
+ this.hardReloadPromise = new Promise((res) => (this.hardReloadResolver = res));
5047
5084
  this.hardReloadPromise.then(() => {
5048
5085
  this.hardReloadPromise = null;
5049
- this.hardReloadPResolver = null;
5086
+ this.hardReloadResolver = null;
5050
5087
  });
5051
5088
  let rawItems;
5052
5089
  try {
@@ -5055,10 +5092,28 @@ class CompositeTreeNode extends TreeNode {
5055
5092
  catch (e) {
5056
5093
  rawItems = [];
5057
5094
  }
5058
- if (this._children) {
5095
+ // 当获取到新的子节点时,如果当前节点正处于非展开状态时,忽略后续裁切逻辑
5096
+ // 后续的 expandBranch 也不应该被响应
5097
+ if (!this.isExpanded) {
5098
+ if (this.hardReloadResolver) {
5099
+ this.hardReloadResolver(false);
5100
+ return false;
5101
+ }
5102
+ }
5103
+ if (this.children) {
5059
5104
  // 重置节点分支
5060
5105
  this.shrinkBranch(this, quiet);
5061
5106
  }
5107
+ else {
5108
+ const status = TreeNode.getBranchStatus(this.path);
5109
+ if (status === BranchOperatorStatus.EXPANDED) {
5110
+ // 当节点 flattenedBranch 已被处理过,同时此时接受到更新指令时,依旧需要进行裁切操作
5111
+ // 便于在视图上更新子节点变化
5112
+ if (!this.flattenedBranch && this.branchSize) {
5113
+ this.shrinkBranch(this, quiet);
5114
+ }
5115
+ }
5116
+ }
5062
5117
  const flatTree = new Array(rawItems.length);
5063
5118
  this._children = Array(rawItems.length);
5064
5119
  for (let i = 0; i < rawItems.length; i++) {
@@ -5076,8 +5131,9 @@ class CompositeTreeNode extends TreeNode {
5076
5131
  this.watchTerminator(this.path);
5077
5132
  }
5078
5133
  this.watchTerminator = this.watcher.onWatchEvent(this.path, this.handleWatchEvent);
5079
- if (this.hardReloadPResolver) {
5080
- this.hardReloadPResolver();
5134
+ if (this.hardReloadResolver) {
5135
+ this.hardReloadResolver(true);
5136
+ return true;
5081
5137
  }
5082
5138
  });
5083
5139
  }
@@ -5100,16 +5156,19 @@ class CompositeTreeNode extends TreeNode {
5100
5156
  return result;
5101
5157
  };
5102
5158
  this.queuedRefreshPromise = new Promise((resolve) => {
5103
- this.activeRefreshPromise.then(onComplete, onComplete).then(resolve);
5159
+ var _a;
5160
+ (_a = this.activeRefreshPromise) === null || _a === void 0 ? void 0 : _a.then(onComplete, onComplete).then(resolve);
5104
5161
  });
5105
5162
  }
5106
5163
  return new Promise((c, e) => {
5107
- this.queuedRefreshPromise.then(c, e);
5164
+ var _a;
5165
+ (_a = this.queuedRefreshPromise) === null || _a === void 0 ? void 0 : _a.then(c, e);
5108
5166
  });
5109
5167
  }
5110
5168
  this.activeRefreshPromise = promiseFactory();
5111
5169
  return new Promise((c, e) => {
5112
- this.activeRefreshPromise.then((result) => {
5170
+ var _a;
5171
+ (_a = this.activeRefreshPromise) === null || _a === void 0 ? void 0 : _a.then((result) => {
5113
5172
  this.activeRefreshPromise = null;
5114
5173
  c(result);
5115
5174
  }, (err) => {
@@ -7393,6 +7452,10 @@ class IconManager {
7393
7452
  this._ktIconPrefixes.push(prefix);
7394
7453
  }
7395
7454
  getIconClx(iconKey) {
7455
+ if (!iconKey) {
7456
+ (0, warning_1.default)(false, 'not a valid icon key:' + iconKey);
7457
+ return [];
7458
+ }
7396
7459
  let lastIndex = this._ktIconPrefixes.length;
7397
7460
  while (!this._iconMap[this._ktIconPrefixes[--lastIndex]][iconKey]) {
7398
7461
  if (lastIndex === 0) {
@@ -7590,10 +7653,12 @@ class RecycleTree extends react_1.default.Component {
7590
7653
  this.filterFlattenBranchChildrenCache = new Map();
7591
7654
  this.filterWatcherDisposeCollection = new utils_1.DisposableCollection();
7592
7655
  this.batchUpdatePromise = null;
7656
+ this.delayedUpdatePromise = null;
7657
+ this.batchUpdateQueue = 0;
7593
7658
  // 批量更新Tree节点
7594
7659
  this.batchUpdate = (() => {
7595
7660
  let lastFrame;
7596
- const commitUpdate = () => {
7661
+ const commitUpdate = (resolver) => {
7597
7662
  // 已经在 componentWillUnMount 中 disposed 了
7598
7663
  if (this.disposables.disposed) {
7599
7664
  return;
@@ -7637,7 +7702,7 @@ class RecycleTree extends react_1.default.Component {
7637
7702
  this.idxToRendererPropsCache.clear();
7638
7703
  // 更新React组件
7639
7704
  this.forceUpdate(() => {
7640
- this.batchUpdateResolver();
7705
+ resolver();
7641
7706
  // 如果存在过滤条件,同时筛选一下展示节点
7642
7707
  if (this.props.filter && this.props.filterProvider && this.props.filterProvider.filterAlways) {
7643
7708
  this.filterItems(this.props.filter);
@@ -7645,21 +7710,50 @@ class RecycleTree extends react_1.default.Component {
7645
7710
  });
7646
7711
  };
7647
7712
  return () => {
7648
- // 如果上次更新队列未完成,直接使用上次更新队列作为最新结果
7649
- if (!this.batchUpdatePromise) {
7650
- this.batchUpdatePromise = new Promise((res) => (this.batchUpdateResolver = res));
7651
- this.batchUpdatePromise.then(() => {
7652
- this.batchUpdatePromise = null;
7653
- this.batchUpdateResolver = null;
7654
- this.onDidUpdateEmitter.fire();
7655
- });
7713
+ var _a;
7714
+ const doUpdate = (batchUpdatePromise, batchUpdateResolver) => {
7656
7715
  // 更新批量更新返回的promise对象
7657
7716
  if (lastFrame) {
7658
7717
  window.cancelAnimationFrame(lastFrame);
7659
7718
  }
7660
- lastFrame = requestAnimationFrame(commitUpdate.bind(this));
7719
+ lastFrame = requestAnimationFrame(() => {
7720
+ commitUpdate(batchUpdateResolver);
7721
+ });
7722
+ return batchUpdatePromise;
7723
+ };
7724
+ if (!this.batchUpdatePromise) {
7725
+ let batchUpdateResolver;
7726
+ this.batchUpdatePromise = new Promise((res) => (batchUpdateResolver = res));
7727
+ (_a = this.batchUpdatePromise) === null || _a === void 0 ? void 0 : _a.then(() => {
7728
+ this.onDidUpdateEmitter.fire();
7729
+ this.batchUpdatePromise = null;
7730
+ });
7731
+ doUpdate(this.batchUpdatePromise, batchUpdateResolver);
7732
+ return this.batchUpdatePromise;
7733
+ }
7734
+ else {
7735
+ if (!this.delayedUpdatePromise) {
7736
+ let delayedUpdateResolver;
7737
+ this.delayedUpdatePromise = new Promise((resolve) => {
7738
+ delayedUpdateResolver = resolve;
7739
+ });
7740
+ this.batchUpdatePromise.then(() => {
7741
+ var _a;
7742
+ this.batchUpdatePromise = this.delayedUpdatePromise;
7743
+ this.delayedUpdatePromise = null;
7744
+ (_a = this.batchUpdatePromise) === null || _a === void 0 ? void 0 : _a.then(() => {
7745
+ this.onDidUpdateEmitter.fire();
7746
+ this.batchUpdatePromise = null;
7747
+ });
7748
+ doUpdate(this.batchUpdatePromise, delayedUpdateResolver);
7749
+ this.batchUpdateQueue = 0;
7750
+ });
7751
+ }
7752
+ else {
7753
+ this.batchUpdateQueue++;
7754
+ }
7755
+ return this.delayedUpdatePromise;
7661
7756
  }
7662
- return this.batchUpdatePromise;
7663
7757
  };
7664
7758
  })();
7665
7759
  // 使用箭头函数绑定当前this
@@ -7968,6 +8062,12 @@ class RecycleTree extends react_1.default.Component {
7968
8062
  }
7969
8063
  };
7970
8064
  }
8065
+ getUpdatePromise() {
8066
+ if (this.delayedUpdatePromise) {
8067
+ return this.delayedUpdatePromise;
8068
+ }
8069
+ return this.batchUpdatePromise;
8070
+ }
7971
8071
  getNewPromptInsertIndex(startIndex, parent) {
7972
8072
  const { root } = this.props.model;
7973
8073
  let insertIndex = startIndex + 1;
@@ -8074,7 +8174,7 @@ class RecycleTree extends react_1.default.Component {
8074
8174
  }
8075
8175
  utils_1.Event.once(this.props.model.onChange)(() => tslib_1.__awaiter(this, void 0, void 0, function* () {
8076
8176
  var _a, _b;
8077
- yield this.batchUpdatePromise;
8177
+ yield this.getUpdatePromise();
8078
8178
  if (node.constructor === NewPromptHandle_1.NewPromptHandle && !node.destroyed) {
8079
8179
  (_a = this.listRef.current) === null || _a === void 0 ? void 0 : _a.scrollToItem(this.newPromptInsertionIndex);
8080
8180
  }
@@ -14656,6 +14756,7 @@ exports.defaultIconfont = {
14656
14756
  'arrowup': 'arrowup',
14657
14757
  'basement': 'basement',
14658
14758
  'basement-fileicon': 'basement-fileicon',
14759
+ 'bash': 'bash',
14659
14760
  'bell': 'bell',
14660
14761
  'branches': 'branches',
14661
14762
  'breakpoint-activate': 'breakpoint-activate',
@@ -14664,6 +14765,7 @@ exports.defaultIconfont = {
14664
14765
  'breakpoint-enabled': 'breakpoint-enabled',
14665
14766
  'breakpoint-stop': 'breakpoint-stop',
14666
14767
  'breakpoint-stop-before': 'breakpoint-stop-before',
14768
+ 'brew': 'brew',
14667
14769
  'browser-preview': 'browser-preview',
14668
14770
  'bulb-fill': 'bulb-fill',
14669
14771
  'caret-right': 'caret-right',
@@ -14692,8 +14794,8 @@ exports.defaultIconfont = {
14692
14794
  'dashboard-fill': 'dashboard-fill',
14693
14795
  'deactivate-breakpoints': 'deactivate-breakpoints',
14694
14796
  'debug': 'debug',
14695
- 'debug-restart-frame': 'debug-restart-frame',
14696
14797
  'debug-alt-small': 'debug-alt-small',
14798
+ 'debug-restart-frame': 'debug-restart-frame',
14697
14799
  'delete': 'delete',
14698
14800
  'deploy': 'deploy',
14699
14801
  'detail': 'detail',
@@ -14731,21 +14833,26 @@ exports.defaultIconfont = {
14731
14833
  'follow-cursor': 'follow-cursor',
14732
14834
  'fullscreen': 'fullscreen',
14733
14835
  'fullscreen-exit': 'fullscreen-exit',
14836
+ 'git': 'git',
14734
14837
  'github-fill': 'github-fill',
14735
14838
  'gitlab': 'gitlab',
14736
14839
  'global-search': 'global-search',
14840
+ 'go': 'go',
14737
14841
  'huoban': 'huoban',
14738
14842
  'huoban-blue': 'huoban-blue',
14739
14843
  'info-circle': 'info-circle',
14740
14844
  'info-circle-fill': 'info-circle-fill',
14845
+ 'java': 'java',
14741
14846
  'kaitian': 'kaitian',
14742
14847
  'keyboard': 'keyboard',
14848
+ 'kotlin': 'kotlin',
14743
14849
  'layout': 'layout',
14744
14850
  'layout1': 'layout1',
14745
14851
  'left': 'left',
14746
14852
  'left-right-subfield': 'left-right-subfield',
14747
14853
  'line': 'line',
14748
14854
  'link': 'link',
14855
+ 'loading': 'loading',
14749
14856
  'max': 'max',
14750
14857
  'message': 'message',
14751
14858
  'min': 'min',
@@ -14756,12 +14863,14 @@ exports.defaultIconfont = {
14756
14863
  'more': 'more',
14757
14864
  'new-file': 'new-file',
14758
14865
  'new-folder': 'new-folder',
14866
+ 'node': 'node',
14759
14867
  'open': 'open',
14760
14868
  'open-changes': 'open-changes',
14761
14869
  'openfile': 'openfile',
14762
14870
  'pause': 'pause',
14763
14871
  'plus': 'plus',
14764
14872
  'project-information': 'project-information',
14873
+ 'python': 'python',
14765
14874
  'question-circle': 'question-circle',
14766
14875
  'question-circle-o': 'question-circle-o',
14767
14876
  'refresh': 'refresh',
@@ -14772,6 +14881,7 @@ exports.defaultIconfont = {
14772
14881
  'retrieval': 'retrieval',
14773
14882
  'right': 'right',
14774
14883
  'rollback': 'rollback',
14884
+ 'rust': 'rust',
14775
14885
  'save-all': 'save-all',
14776
14886
  'scm': 'scm',
14777
14887
  'search': 'search',
@@ -14794,11 +14904,13 @@ exports.defaultIconfont = {
14794
14904
  'time-circle-fill': 'time-circle-fill',
14795
14905
  'toolkit': 'toolkit',
14796
14906
  'tree': 'tree',
14907
+ 'ubuntu': 'ubuntu',
14797
14908
  'undock': 'undock',
14798
14909
  'unmax': 'unmax',
14799
14910
  'unorderedlist': 'unorderedlist',
14800
14911
  'up': 'up',
14801
14912
  'up-down-subfield': 'up-down-subfield',
14913
+ 'vim': 'vim',
14802
14914
  'wait': 'wait',
14803
14915
  'warning-circle': 'warning-circle',
14804
14916
  'warning-circle-fill': 'warning-circle-fill',
@@ -14,6 +14,7 @@ export declare const defaultIconMap: {
14
14
  arrowup: string;
15
15
  basement: string;
16
16
  'basement-fileicon': string;
17
+ bash: string;
17
18
  bell: string;
18
19
  branches: string;
19
20
  'breakpoint-activate': string;
@@ -22,6 +23,7 @@ export declare const defaultIconMap: {
22
23
  'breakpoint-enabled': string;
23
24
  'breakpoint-stop': string;
24
25
  'breakpoint-stop-before': string;
26
+ brew: string;
25
27
  'browser-preview': string;
26
28
  'bulb-fill': string;
27
29
  'caret-right': string;
@@ -50,8 +52,8 @@ export declare const defaultIconMap: {
50
52
  'dashboard-fill': string;
51
53
  'deactivate-breakpoints': string;
52
54
  debug: string;
53
- 'debug-restart-frame': string;
54
55
  'debug-alt-small': string;
56
+ 'debug-restart-frame': string;
55
57
  delete: string;
56
58
  deploy: string;
57
59
  detail: string;
@@ -89,21 +91,26 @@ export declare const defaultIconMap: {
89
91
  'follow-cursor': string;
90
92
  fullscreen: string;
91
93
  'fullscreen-exit': string;
94
+ git: string;
92
95
  'github-fill': string;
93
96
  gitlab: string;
94
97
  'global-search': string;
98
+ go: string;
95
99
  huoban: string;
96
100
  'huoban-blue': string;
97
101
  'info-circle': string;
98
102
  'info-circle-fill': string;
103
+ java: string;
99
104
  kaitian: string;
100
105
  keyboard: string;
106
+ kotlin: string;
101
107
  layout: string;
102
108
  layout1: string;
103
109
  left: string;
104
110
  'left-right-subfield': string;
105
111
  line: string;
106
112
  link: string;
113
+ loading: string;
107
114
  max: string;
108
115
  message: string;
109
116
  min: string;
@@ -114,12 +121,14 @@ export declare const defaultIconMap: {
114
121
  more: string;
115
122
  'new-file': string;
116
123
  'new-folder': string;
124
+ node: string;
117
125
  open: string;
118
126
  'open-changes': string;
119
127
  openfile: string;
120
128
  pause: string;
121
129
  plus: string;
122
130
  'project-information': string;
131
+ python: string;
123
132
  'question-circle': string;
124
133
  'question-circle-o': string;
125
134
  refresh: string;
@@ -130,6 +139,7 @@ export declare const defaultIconMap: {
130
139
  retrieval: string;
131
140
  right: string;
132
141
  rollback: string;
142
+ rust: string;
133
143
  'save-all': string;
134
144
  scm: string;
135
145
  search: string;
@@ -152,11 +162,13 @@ export declare const defaultIconMap: {
152
162
  'time-circle-fill': string;
153
163
  toolkit: string;
154
164
  tree: string;
165
+ ubuntu: string;
155
166
  undock: string;
156
167
  unmax: string;
157
168
  unorderedlist: string;
158
169
  up: string;
159
170
  'up-down-subfield': string;
171
+ vim: string;
160
172
  wait: string;
161
173
  'warning-circle': string;
162
174
  'warning-circle-fill': string;
@@ -1 +1 @@
1
- {"version":3,"file":"iconManager.d.ts","sourceRoot":"","sources":["../../../src/icon/iconfont/iconManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,CAAC;AA4B3B,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMzB,CAAC;AAEH,cAAM,WAAW;IACf,OAAO,CAAC,eAAe,CAAgB;IAEvC,OAAO,CAAC,QAAQ,CAA+D;IAE/E,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE;QAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;IAKnE,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;CAatC;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
1
+ {"version":3,"file":"iconManager.d.ts","sourceRoot":"","sources":["../../../src/icon/iconfont/iconManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,CAAC;AA4B3B,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMzB,CAAC;AAEH,cAAM,WAAW;IACf,OAAO,CAAC,eAAe,CAAgB;IAEvC,OAAO,CAAC,QAAQ,CAA+D;IAE/E,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE;QAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;IAKnE,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;CAiBtC;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
@@ -46,6 +46,10 @@ class IconManager {
46
46
  this._ktIconPrefixes.push(prefix);
47
47
  }
48
48
  getIconClx(iconKey) {
49
+ if (!iconKey) {
50
+ (0, warning_1.default)(false, 'not a valid icon key:' + iconKey);
51
+ return [];
52
+ }
49
53
  let lastIndex = this._ktIconPrefixes.length;
50
54
  while (!this._iconMap[this._ktIconPrefixes[--lastIndex]][iconKey]) {
51
55
  if (lastIndex === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"iconManager.js","sourceRoot":"","sources":["../../../src/icon/iconfont/iconManager.ts"],"names":[],"mappings":";;;;AAAA,0EAA0C;AAE1C,uCAA4C;AACnC,gGADA,yBAAe,OACA;AAExB;;;GAGG;AACH,MAAM,WAAW,GAAG;IAClB,kBAAkB,EAAE,aAAa;IACjC,cAAc,EAAE,cAAc;IAC9B,MAAM,EAAE,cAAc;IACtB,iBAAiB,EAAE,SAAS;IAC5B,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,WAAW;IAC3B,mBAAmB,EAAE,WAAW;IAChC,WAAW,EAAE,OAAO;IACpB,oBAAoB,EAAE,wBAAwB;IAC9C,kBAAkB;IAClB,UAAU,EAAE,UAAU;IACtB,YAAY,EAAE,MAAM;IACpB,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,MAAM;IACb,2BAA2B;IAC3B,UAAU,EAAE,OAAO;IACnB,WAAW,EAAE,MAAM;CACpB,CAAC;AAEF,MAAM,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,yBAAe,EAAE,WAAW,CAAC,CAAC;AAEtE,QAAA,cAAc,GAAG,IAAI,KAAK,CAAC,0BAA0B,EAAE;IAClE,GAAG,CAAC,GAAG,EAAE,IAAY;QACnB,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,IAAA,iBAAO,EAAC,CAAC,SAAS,EAAE,SAAS,IAAI,6BAA6B,SAAS,WAAW,CAAC,CAAC;QACpF,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,WAAW;IAAjB;QACU,oBAAe,GAAa,EAAE,CAAC;QAE/B,aAAQ,GAA4D,EAAE,CAAC;IAoBjF,CAAC;IAlBC,MAAM,CAAC,MAAc,EAAE,aAA4C;QACjE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,IAAI,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;YACjE,IAAI,SAAS,KAAK,CAAC,EAAE;gBAAE,MAAM;aAAE;SAChC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAE1E,IAAI,CAAC,SAAS,EAAE;YACd,IAAA,iBAAO,EAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC;YACrC,OAAO,EAAE,CAAC;SACX;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF;AAEY,QAAA,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAE7C,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AACnD,qBAAqB;AACrB,mBAAW,CAAC,MAAM,CAAC,mBAAmB,EAAE,sBAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"iconManager.js","sourceRoot":"","sources":["../../../src/icon/iconfont/iconManager.ts"],"names":[],"mappings":";;;;AAAA,0EAA0C;AAE1C,uCAA4C;AACnC,gGADA,yBAAe,OACA;AAExB;;;GAGG;AACH,MAAM,WAAW,GAAG;IAClB,kBAAkB,EAAE,aAAa;IACjC,cAAc,EAAE,cAAc;IAC9B,MAAM,EAAE,cAAc;IACtB,iBAAiB,EAAE,SAAS;IAC5B,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,WAAW;IAC3B,mBAAmB,EAAE,WAAW;IAChC,WAAW,EAAE,OAAO;IACpB,oBAAoB,EAAE,wBAAwB;IAC9C,kBAAkB;IAClB,UAAU,EAAE,UAAU;IACtB,YAAY,EAAE,MAAM;IACpB,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,MAAM;IACb,2BAA2B;IAC3B,UAAU,EAAE,OAAO;IACnB,WAAW,EAAE,MAAM;CACpB,CAAC;AAEF,MAAM,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,yBAAe,EAAE,WAAW,CAAC,CAAC;AAEtE,QAAA,cAAc,GAAG,IAAI,KAAK,CAAC,0BAA0B,EAAE;IAClE,GAAG,CAAC,GAAG,EAAE,IAAY;QACnB,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,IAAA,iBAAO,EAAC,CAAC,SAAS,EAAE,SAAS,IAAI,6BAA6B,SAAS,WAAW,CAAC,CAAC;QACpF,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,WAAW;IAAjB;QACU,oBAAe,GAAa,EAAE,CAAC;QAE/B,aAAQ,GAA4D,EAAE,CAAC;IAwBjF,CAAC;IAtBC,MAAM,CAAC,MAAc,EAAE,aAA4C;QACjE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,IAAI,CAAC,OAAO,EAAE;YACZ,IAAA,iBAAO,EAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,CAAC;YAClD,OAAO,EAAE,CAAC;SACX;QACD,IAAI,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;YACjE,IAAI,SAAS,KAAK,CAAC,EAAE;gBAAE,MAAM;aAAE;SAChC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAE1E,IAAI,CAAC,SAAS,EAAE;YACd,IAAA,iBAAO,EAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC;YACrC,OAAO,EAAE,CAAC;SACX;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF;AAEY,QAAA,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAE7C,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AACnD,qBAAqB;AACrB,mBAAW,CAAC,MAAM,CAAC,mBAAmB,EAAE,sBAAc,CAAC,CAAC"}