async configureSubscription()

in source/console/src/views/Observer.tsx [142:198]


  async configureSubscription(subscriptionType: ObserverSubscriptionTypes, delayMS: number = 10): Promise<void> {
    try {
      switch (subscriptionType) {
        case ObserverSubscriptionTypes.CREATE_ISSUE:
          if (this.createIssueSubscription) { this.createIssueSubscription.unsubscribe(); }

          // @ts-ignore
          this.createIssueSubscription = API.graphql(graphqlOperation(onCreateIssue)).subscribe({
            next: (response: any) => {
              const { issues, selectedSite, selectedArea, showIssue } = this.state;
              const newIssue = response.value.data.onCreateIssue;
              newIssue.visible = true;

              if (showIssue && selectedSite.name === newIssue.siteName && (selectedArea.name === newIssue.areaName || selectedArea.name === "all")) {
                const updatedIssues = [...issues, newIssue];
                this.setState({ issues: updatedIssues });

                this.props.handleNotification(`${I18n.get('text.issue')}: ${newIssue.deviceName}`, 'info', 5);
              }
            },
            error: async (e: any) => {
              await handleSubscriptionError(e, subscriptionType, this.configureSubscription, delayMS);
            }
          });
          break;
        case ObserverSubscriptionTypes.UPDATE_ISSUE:
          if (this.updateIssueSubscription) { this.updateIssueSubscription.unsubscribe(); }

          // @ts-ignore
          this.updateIssueSubscription = API.graphql(graphqlOperation(onUpdateIssue)).subscribe({
            next: (response: any) => {
              const { issues, selectedSite, selectedArea, showIssue } = this.state;
              let updatedIssue = response.value.data.onUpdateIssue;

              if (showIssue && selectedSite.name === updatedIssue.siteName && (selectedArea.name === updatedIssue.areaName || selectedArea.name === 'all')) {
                updatedIssue.visible = ('acknowledged' === updatedIssue.status);

                const issueIndex = issues.findIndex(issue => issue.id === updatedIssue.id);
                const updatedIssues = [
                  ...issues.slice(0, issueIndex),
                  updatedIssue,
                  ...issues.slice(issueIndex + 1)
                ];

                this.setState({ issues: updatedIssues });
              }
            },
            error: async (e: any) => {
              await handleSubscriptionError(e, subscriptionType, this.configureSubscription, delayMS);
            }
          })
          break;
      }
    } catch (err) {
      console.error('Unable to configure subscription', err);
    }
  }