Jumping wont work with my 3rd person movement code

I used the Brackeys tutorial to make 3rd person movement code and when I tried adding some code for jumping into it the jump would be weirdly low all the time and slow down the speed of the character when I jump.
Here’s the code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ThirdPersonMovement : MonoBehaviour
{
public CharacterController controller;
public Transform cam;
public float speed = 3f;
public float turnSmoothTime = 0.1f;
float turnSmoothVelocity;
[SerializeField] private Animator animator;
[SerializeField] private float jumpSpeed = 20f;

[SerializeField] private float jumpHeight = 1f;
[SerializeField] private float gravity = 1f;
private Vector3 direction = Vector3.zero;
private float yVelocity;
private bool canDoubleJump;

void Start()
{
    
}

// Update is called once per frame
void Update()
{
    float horizontal = Input.GetAxisRaw("Horizontal");
    float vertical = Input.GetAxisRaw("Vertical");
    Vector3 direction = new Vector3(horizontal, 0f, vertical).normalized;
    Vector3 jumpVelocity = direction * jumpSpeed;

    if (controller.isGrounded)
    {
        canDoubleJump = false;
        if (Input.GetKeyDown(KeyCode.Space))
        {
            yVelocity = jumpHeight; 
            canDoubleJump = true;
        }
    }
    else
    {
        yVelocity -= gravity;
        if (Input.GetKeyDown(KeyCode.Space))
        {
            if (canDoubleJump == true)
            {
                yVelocity += jumpHeight;
                canDoubleJump = false;
            }
        }
    }

    jumpVelocity.y = yVelocity;

    if (direction.magnitude >= 0.1f)
    {
        float targetAngle = Mathf.Atan2(direction.x, direction.z) * Mathf.Rad2Deg + cam.eulerAngles.y;
        float angle = Mathf.SmoothDampAngle(transform.eulerAngles.y, targetAngle, ref turnSmoothVelocity, turnSmoothTime);
        transform.rotation = Quaternion.Euler(0f, angle, 0f);
        animator.SetBool("Run", true);

        Vector3 moveDir = Quaternion.Euler(0f, targetAngle, 0f) * Vector3.forward;
        controller.Move(moveDir.normalized * Time.deltaTime);
    }
    else
    {
        animator.SetBool("Run", false);
    }
    controller.Move(jumpVelocity.normalized * Time.deltaTime);
}

}

Try this :

 // make it into private
 private Vector3 moveDir = Vector3.zero;
 -------
 //
 jumpVelocity.y = yVelocity;
 
 if (direction.magnitude >= 0.1f)
 {
     float targetAngle = Mathf.Atan2(direction.x, direction.z) * Mathf.Rad2Deg + cam.eulerAngles.y;
     float angle = Mathf.SmoothDampAngle(transform.eulerAngles.y, targetAngle, ref turnSmoothVelocity, turnSmoothTime);
     transform.rotation = Quaternion.Euler(0f, angle, 0f);
     animator.SetBool("Run", true);
     moveDir = Quaternion.Euler(0f, targetAngle, 0f) * Vector3.forward;
     // comment it, just make it into ona all values of movement
     // controller.Move(moveDir.normalized * Time.deltaTime);
 }
 else
 {
     animator.SetBool("Run", false);
 }
 // i don't know with you normalized used, cause it make the value back to max 1, like if in vector3 x=1, and z=3, when you normalized,
 //  it will be x = 1/3 and z = 3/3. but if it already move, these code maybe work
 controller.Move((jumpVelocity.normalized+moveDir.normalized) * Time.deltaTime);

Hope it help