private async getSelectedTransactionNode()

in src/resourceExplorers/BlockchainDataManagerResourceExplorer.ts [599:651]


  private async getSelectedTransactionNode(
    azureClient: AzureBlockchainServiceClient,
    bdmItems: IAzureBlockchainDataManagerDto[],
    selectedMemberName: string,
    location: string,
  ): Promise<TransactionNodeItem> {
    Telemetry.sendEvent('BlockchainDataManagerResourceExplorer.getSelectedTransactionNode.selectTransactionNode');

    const { bdmResource, transactionNodeResource } = azureClient;
    let transactionNodeItems: TransactionNodeItem[] = [];
    let filteredTransactionNode: TransactionNodeItem[] = [];

    await window.withProgress({
      location: ProgressLocation.Window,
      title: `Getting transaction nodes for member - ${selectedMemberName}`,
    }, async () => {
      const bdmInputList: IAzureBlockchainDataManagerInputDto[] = [];

      await Promise.all(bdmItems.map((bdm) => bdmResource.getBlockchainDataManagerInputList(bdm.name)))
      .then((result) => {
        result.forEach((inputs) => {
          if (inputs.length) {
            bdmInputList.push(...inputs);
          }
        });
      });

      const transactionNodes = await transactionNodeResource.getTransactionNodeList(selectedMemberName);
      const defaultTransactionNode = await transactionNodeResource
        .getTransactionNode(selectedMemberName, Constants.defaultInputNameInBdm);
      defaultTransactionNode.name = selectedMemberName;

      transactionNodeItems = [defaultTransactionNode, ...transactionNodes]
        .map((tn) => new TransactionNodeItem(tn.name, tn.id, tn.properties.provisioningState));

      filteredTransactionNode = transactionNodeItems
        .filter((tn) => tn.provisioningState === Constants.provisioningState.succeeded &&
          !bdmInputList.some((input) => input.properties.dataSource.resourceId === tn.url));
    });

    const selectedTransactionNode = await showQuickPick(
      [ { label: Constants.uiCommandStrings.createTransactionNode}, ...filteredTransactionNode ],
      { placeHolder: Constants.placeholders.selectTransactionNode, ignoreFocusOut: true });

    if (selectedTransactionNode instanceof TransactionNodeItem) {
      return selectedTransactionNode;
    }

    await this.createdTransactionNode(selectedMemberName, location, azureClient, transactionNodeItems);

    Telemetry.sendEvent('BlockchainDataManagerResourceExplorer.getSelectedTransactionNode.cancellationCreatingTransactionNode');
    throw new CancellationEvent();
  }