Unable to get id_token by using parseFromUrl

I’m trying to get id_token from the url (as suggested here) and when I use the following implementation there is no idToken (undefined).

 if (!this.signIn.hasTokensInUrl()) {
    this.signIn.renderEl({el: '#sign-in-widget'},
      function() {},
      function(err) { console.error(err) });
  } else {
    console.log('signIn', this.signIn);
    const idToken = this.signIn.authClient.tokenManager.get('idToken')
    .then(idToken => {
      // If ID Token exists, output it to the console
      if (idToken) {
        console.log(`hi ${idToken}!`);
      // If ID Token isn't found, try to parse it from the current URL
      } else if (location.hash) {
        this.signIn.authClient.token.parseFromUrl()
        .then(idToken => {
          console.log(`hi ${idToken}!`);
          // Store parsed token in Token Manager
          this.signIn.authClient.tokenManager.add('idToken', idToken);
          console.log(idToken);
        });
      } else {
        // You're not logged in, you need a sessionToken
        this.signIn.authClient.token.getWithRedirect({
          responseType: 'id_token'
        });
      }
    });
  }

Previously I got this working from the following implementation but my application was redirecting twice and I’m trying to change it to the above implementation.

this.signIn = new OktaSignIn({
    this.signIn.renderEl(
            { el: '#sign-in-widget' },
            () => { },
           
           /**
             * In this flow, the success handler will not be called because we redirect
             * to the Okta org for the authentication workflow.
             * 
             * I'm not sure how to get a success response but my application works
             */

            err => {
              throw err;
            }
          );

          if (this.signIn.hasTokensInUrl()) {
            this.processingToken = true;
            this.authService.processTokens();
          }

    public async processTokens() {
        await this.oktaService.handleAuthentication(); // here I'm parsing tokens from url
        await this.setUserInfoWithOktaToken(); // here I'm setting userInfo
        await this.router.navigateByUrl(this.redirectUrl); // url = /main
      }

I’m using

okta-signin-widget (3.1.5)
okta-angular (1.1.0)
angular (6)

This is my first time asking a question here, please let me know if I need to provide any more details