Hi @Khaledwefky
please see the following flow:

Please review and test this flow again before putting it into production, I just tested some basic functionality. Also notice, that the Shift actions are still in preview and might change a bit over time, so you review your flow regularly.
When a Time Off request is created, updated or deleted:
- Select the team your shift is in
- I also use a trigger condition, so the flow only trigger when there is an update on a time off request.
@equals(triggerOutputs()?['body/changeType'],'updated')
to learn more about trigger conditions please check here: Power Automate: Trigger conditions | CLOUD KUMPEL
The trigger with the trigger condition will only start the flow, if there is an update on a time off request, so it doesn't get triggered when the time off request is created or deleted by the user, but only when the manager approves or denies the request.
Get a Time Off request:
- Select the team your shift is in
- Add the "Resource ID" from your trigger as the "Time Off Request ID"
Because not all information is within the trigger, we need to get the time off request with all details
Condition:
- On the left side put the dynamic value of "Time Off Request State" "is equal to" "approved"
As we only want the flow to delete existing shifts, we need to check what is the outcome of the request (approved, pending, or declined). So if the request is approved, the flow will go into the "if yes" branch.
In the "If yes" branch:
List all Shifts:

- Select the team your shift is in
- From start time is the dynamic value "Time off request start time" of "get a time off request" action
- To end time is the dynamic value "Time off request end time" of "get a time off request" action
Next, we need to get all shifts that are within the same date range as the time off request. This will give us also the shifts of other users within the date range, we will take care of this within the next step.
Filter array:

- From is "Shifts list" from "list all shifts"
- on the left side is "Shift assigned to user id" of "list all shifts"; "is equal to"; "time off request sender id" from "get a time off request"
Using the filter array action we will filter the list of all shifts from our previous action where the assigned user is the same as from the person requesting the time off.
Apply to each & Delete a shift:
- Select the team your shift is in
- Select the "shift id" from the "filter array" action. The apply to each will be created automatically as you have an array (list) of shifts, that needs to be deleted (e.g., if the user takes time off for multiple days).
The last action will delete all of the shifts within the specified time range. You can only add the "delete a shift" action, the "apply to each" will be created automatically after you putted in the "Shift id" from the "filter array" action.
I tested this flow with one user and a standard time schedule of 8-5 with one day and multiple days time off. Also approved and declined worked fine. As I said, please review and test the flow for your own scenario.
Does this help you? Otherwise please give me some more information.
Best regards
Marvin
If you like this post, give a Thumbs up. If it solved your request, Mark it as a Solution to enable other users to find it.
Blog: Cloudkumpel
Join my User Group (German & English): Power Platform UG Cologne