Gameplay ability with indicator

I want to create a teleport ability for the player with an indicator that provides visual information about the target location.
(I want to create most of the base classes in cpp)

The primary user story:

  1. Player presses key
  2. indicator starts to indicate the target location
  3. player presses key
  4. indicator stops
  5. Player character gets teleported to target location

My current solution:

Filestructure:
All\Content:

  • Gamecharacter with ability system component
  • Generic gameplay ability (inherits from UGameplayAbility)

Teleport gameplay plugin:

  • BaseTeleportAbility (Abstract class that inherits from generic gameplay ability and that provides functionality to calculate the target location)
  • TeleportAbility (Inherits from BaseTeleportAbility and teleports the player to the target location)
  • TeleportIndicatorAbility (Inherits from BaseTeleportAbility and displays a static mesh at the target location, while the ability is active)

To implement that user story I would first bind one key with the enhanced input plugin to the execution of the TeleportIndicatorAbility and if that is executed I would rebind the key to the End function of the TeleportIndicatorAbility and the execution of the TeleportAbility.

I want to reuse this system for other abilities that need an indicator, like throwing a grenade. Because of this I would like some feedback on this implementation. Alternatives for this problem are also welcome.
Thank you