async reloadTree()

in client/src/components/pipelines/PipelinesLibrary.js [721:848]


  async reloadTree (reload, folderToReload) {
    const parts = this.props.path.split('/');
    let metadataClass,
      selectedKey,
      history,
      metadata;
    const [
      placeholderOrPipelineId,
      idOrVersionName,
      section,
      subSection
    ] = parts;
    if ((placeholderOrPipelineId || '').toLowerCase() === 'folder') {
      history = /^history$/i.test(section);
      metadata = /^metadata$/i.test(section);
      if (metadata && subSection) {
        metadataClass = subSection;
      }
    }
    let rootItems = this.state.rootItems || [];
    let selectedItem;
    const findVersionFn = (parentPipeline) => {
      if (idOrVersionName) {
        for (let i = 0; i < parentPipeline.children.length; i++) {
          const child = parentPipeline.children[i];
          if (child.type === ItemTypes.version &&
            child.name.toLowerCase() === idOrVersionName.toLowerCase()) {
            selectedKey = child.key;
            break;
          }
        }
      }
      if (!selectedKey) {
        selectedKey = parentPipeline.key;
      }
    };
    switch ((placeholderOrPipelineId || '').toLowerCase()) {
      case 'storage':
        if (idOrVersionName) {
          selectedKey = `${ItemTypes.storage}_${idOrVersionName}`;
        }
        break;
      case 'configuration':
        if (idOrVersionName) {
          selectedKey = `${ItemTypes.configuration}_${idOrVersionName}`;
        }
        break;
      case 'metadata':
        if (idOrVersionName) {
          selectedKey = `${ItemTypes.metadata}_${idOrVersionName}metadataFolder${metadataClass}`;
        }
        break;
      case 'pipelines':
        selectedKey = `${ItemTypes.folder}_pipelines`;
        break;
      case 'storages':
        selectedKey = `${ItemTypes.folder}_storages`;
        break;
      case 'vs':
        selectedKey = `${ItemTypes.versionedStorage}_${idOrVersionName}`;
        break;
      case 'folder':
      case 'library':
      case '':
        if (idOrVersionName) {
          selectedKey = `${ItemTypes.folder}_${idOrVersionName}`;
        } else {
          selectedKey = `${ItemTypes.folder}_root`;
        }
        break;
      default:
        selectedKey = `${ItemTypes.pipeline}_${placeholderOrPipelineId}`;
        break;
    }
    if (reload || rootItems.length === 0) {
      await this.props.pipelinesLibrary.fetch();
      const rootElements = [{
        id: 'pipelines',
        name: `All ${this.localizedString('pipeline')}s`
      }, {
        id: 'storages',
        name: 'All storages'
      }, {
        id: 'root',
        name: 'Library',
        ...this.props.pipelinesLibrary.value
      }];
      rootItems = generateTreeData(
        {childFolders: rootElements},
        {
          filter: this.props.hiddenObjectsTreeFilter(),
          sortRoot: false
        }
      );
      const savedExpandedKeys = this.savedExpandedKeys;
      if (savedExpandedKeys.length > 0) {
        expandItemsByKeys(rootItems, savedExpandedKeys);
      } else {
        expandFirstParentWithManyChildren(rootItems[0]);
      }
    }
    await this.reloadItem(selectedKey, undefined, rootItems, false);
    if (folderToReload) {
      await this.reloadItem(`${ItemTypes.folder}_${folderToReload}`, undefined, rootItems, false);
    }
    if ((placeholderOrPipelineId || '').toLowerCase() === 'folder' && idOrVersionName && history) {
      selectedKey = `${ItemTypes.projectHistory}_${idOrVersionName}`;
    }
    if ((placeholderOrPipelineId || '').toLowerCase() === 'folder' && idOrVersionName && metadata) {
      if (metadataClass) {
        selectedKey = `${ItemTypes.metadata}_${idOrVersionName}/metadata/${metadataClass}`;
      } else {
        selectedKey = `${ItemTypes.metadataFolder}_${idOrVersionName}/metadata`;
      }
    }
    selectedItem = getTreeItemByKey(selectedKey, rootItems);
    if (selectedItem) {
      if (selectedItem.type === ItemTypes.pipeline) {
        findVersionFn(selectedItem);
      }
      expandItem(selectedItem, true);
    }
    this.setState({
      rootItems: rootItems,
      selectedKeys: selectedKey ? [selectedKey] : [],
      expandedKeys: getExpandedKeys(rootItems)
    });
  }