Problem with Arduino Pro Micro Game controller

I’m working on a game controller that uses the Arduino Pro Micro with this Joystick library: https://github.com/MHeironimus/ArduinoJoystickLibrary

My controller is planned to have 16 buttons, but since the Pro Micro doesn’t really have that many I/O pins, I decided to use the Keypad library (https://playground.arduino.cc/Code/Keypad/#Functions) to reduce the pins needed to 8.

My code is below. Everything works fine, expect whenever you press a button, only one input is registered. So if you’re holding down a button, the input won’t keep repeating like I want it to. How do I make it so the code registers an input when pressing a button and keep doing so until the button is released?

#include <Keypad.h>
#include <Joystick.h>

#define NUM_BUTTONS 16

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_GAMEPAD,
                   NUM_BUTTONS, 0,                  // Button Count, Hat Switch Count
                   true, true, false,     // X and Y, but no Z Axis
                   false, false, false,   // No Rx, Ry, or Rz
                   false, false,          // No rudder or throttle
                   false, false, false);  // No accelerator, brake, or steering

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the symbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
  {'a', 'b', 'x', 'y'}, //A, B, X, Y
  {'u', 'd', 'l', 'r'}, // DPAD UP, DOWN, LEFT, RIGHT
  {'+', '-', 'c', 'h'}, // PLUS, MINUS, CAPTURE, HOME
  {'1', '2', '3', '4'}  // LEFT BUMPER AND TRIGGER, RIGHT BUMPER AND TRIGGER
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad

int x1 = A1; //Left Joystick
int y1 = A0;

//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);


void setup() {
  // Initialize Button Pins
  Serial.begin(9600);

  pinMode(10, INPUT_PULLUP);
  pinMode(15, INPUT_PULLUP);

  Joystick.begin();
  Joystick.setXAxisRange(-1, 1);
  Joystick.setYAxisRange(-1, 1);
}

// Last state of the buttons
int lastButtonState[8] = {0, 0, 0, 0, 0, 0, 0, 0};

void checkButtons() {
  //Buttons
  char key = customKeypad.getKey();
  customKeypad.setHoldTime(10);
  switch (key) {
    case 'a': //A
      Joystick.setButton(0, 0);
      Serial.println("Button A was pressed");
      while (digitalRead(2) == HIGH) {
        Joystick.setButton(0, 0);
        Serial.println("Button A is held");
      }
      break;
    case 'b': //B
      Joystick.pressButton(1);
      Serial.println("Button B was pressed");
      break;
    case 'x': //X
      Joystick.pressButton(2);
      Serial.println("Button X was pressed");
      break;
    case 'y': //Y
      Joystick.pressButton(3);
      Serial.println("Button Y was pressed");
      break;
    case 'u': //DPAD UP
      Joystick.pressButton(4);
      Serial.println("DPAD UP was pressed");
      break;
    case 'd': //DPAD DOWN
      Joystick.pressButton(5);
      Serial.println("DPAD DOWN was pressed");
      break;
    case 'l': //DPAD LEFT
      Joystick.pressButton(6);
      Serial.println("DPAD LEFT was pressed");
      break;
    case 'r': //DPAD RIGHT
      Joystick.pressButton(7);
      Serial.println("DPAD RIGHT was pressed");
      break;
    case '+': //PLUS
      Joystick.pressButton(8);
      Serial.println("PLUS was pressed");
      break;
    case '-': //MINUS
      Joystick.pressButton(9);
      Serial.println("MINUS was pressed");
      break;
    case 'c': //CAPTURE
      Joystick.pressButton(10);
      Serial.println("CAPTURE was pressed");
      break;
    case 'h': //HOME
      Joystick.pressButton(11);
      Serial.println("HOME was pressed");
      break;
    case '1': //L.BUMPER
      Joystick.pressButton(12);
      Serial.println("LEFT BUMPER was pressed");
      break;
    case '2': //L.TRIGGER
      Joystick.pressButton(13);
      Serial.println("LEFT TRIGGER was pressed");
      break;
    case '3': //R.BUMPER
      Joystick.pressButton(14);
      Serial.println("RIGHT BUMPER was pressed");
      break;
    case '4': //R.TRIGGER
      Joystick.pressButton(15);
      Serial.println("RIGHT TRIGGER was pressed");
      break;
  }
  for (int i = 0; i <= 16; i++) {
    Joystick.releaseButton(i);
  }
  Serial.println(customKeypad.getState());
}

void loop() {
  //Joystick
  int yPosition = analogRead(y1);
  int xPosition = analogRead(x1);
  if (yPosition >= 0 && yPosition <= 200) {
    Serial.println("DOWN on the joystick");
    Joystick.setYAxis(1);
  } else if (yPosition >= 800) {
    Serial.println("UP on the joystick");
    Joystick.setYAxis(-1);
  } else {
    Joystick.setYAxis(0);
  }

  if (xPosition >= 0 && xPosition <= 200) {
    Serial.println("LEFT on the joystick");
    Joystick.setXAxis(-1);
  } else if (xPosition >= 800) {
    Serial.println("RIGHT on the joystick");
    Joystick.setXAxis(1);
  } else {
    Joystick.setXAxis(0);
  }

  //Buttons
  checkButtons();

}

See File->Examles->Keypad->EventKeypad. This will show you how to add an event listener that will be called when each button is PRESSED or RELEASED. Then you set the button state to 1 when PRESSED and to 0 when RELEASED.