GAS - Same Action inside Ability - Tap/Hold/Release

Hey, I’ve been doing my game with GAS for a while. I wanted to create an action link that will allow me create different outcomes of an action if I hold, tap, release.
I created an interface that will do three functions, one that will handle ability if pressed, another if released and third one if held.
For simple stuff, which is not ability based and is not using GAS, it would work perfectly, for example by using this:

PFInputComponent->BindAction(SprintAction, ETriggerEvent::Started, this, &APFPlayerController::StartSprinting);
PFInputComponent->BindAction(SprintAction, ETriggerEvent::Completed, this, &APFPlayerController::StopSprinting);
PFInputComponent->BindAction(SprintAction, ETriggerEvent::Triggered, this, &APFPlayerController::HoldSprinting);

Then for example I can use code like this:

void APFPlayerController::StartSprinting()
{
if (APawn* ControlledPawn = GetPawn())
{
if (APFProtagonistBase* ControlledCharacter = Cast(ControlledPawn))
{
if (UPlatformingComponent* Platforming = ControlledCharacter->FindComponentByClass())
{
Platforming->StartSprinting(); // Trigger sprint on tap
}
}
}
}

But If I tried to do it via GAS, then Ability System Component will be null inside of an ability itself.

I really want to do a system a proper system like this, so I don’t have to bother doing really weird stuff in Blueprints to create my Abilities, just a simple solution, for example:
If I hold a button, my character stops and is able to create portals by aiming.
If I tap, my character instantly creates a portal in front of her and second click creates a second portal.
If I release button, my character moves again after “holding”.

Stuff like gameplay cues I would just extend in Blueprint.
What is the proper way to do something like this?