How to program parallel action using Arduino UNO

Dears,
I have issue with programming a code which make two action to be executed in parallel.

For example:

Four LED's working sequentially using delay, during that sequence I should turn on another LED at any time when a push button pressed and turn off that LED once the push button released.

I tried If statement but it did not work as I need, it seems I need something else to do or to re-place the if statement.

Kindly help me in this small issue.
Below is my tried code

int InletSA = 2;
int OutletSA = 3;
int FlushSA = 4;
int DrainSA = 5;
int Button = 12;
int LED = 11;
int ButtonValue=0;
void setup() {
  pinMode(Button, INPUT);
  pinMode(LED, OUTPUT);
  pinMode(InletSA, OUTPUT);       
  pinMode(OutletSA, OUTPUT);      
  pinMode(FlushSA, OUTPUT);       
  pinMode(DrainSA, OUTPUT);      
  Serial.begin(9600);
  digitalWrite(LED, LOW);
  digitalWrite(InletSA,LOW);     
  digitalWrite(OutletSA,LOW);     
  digitalWrite(FlushSA,LOW);      
  digitalWrite(DrainSA,LOW);
}

void loop{
                     
  ButtonValue = digitalRead(Button);
  if(ButtonValue != 0){
  digitalWrite(LED, HIGH);
  }

  else{
  digitalWrite(LED, LOW);
  }  
   
  digitalWrite(InletSA, HIGH);     
  digitalWrite(OutletSA, HIGH);     
  digitalWrite(InletSA, LOW);     
  digitalWrite(OutletSA, LOW);   
  delay(5000);  
  digitalWrite(InletSA, LOW);    
  digitalWrite(OutletSA, LOW);    
  digitalWrite(InletSA, HIGH);     
  delay(8000);  
  digitalWrite(OutletSA, HIGH);   
  delay(4000);  
}

Take a look at Using millis() for timing. A beginners guide, Several things at the same time and look at the BlinkWithoutDelay example in the IDE.

Have a look at how the code is organized in Several Things at a Time

Note how each function runs very briefly and returns to loop() so the next one can be called. None of the functions tries to complete a task in one call. And there may be dozens of calls to a function before it is actually time for it to do anything.

Also note that it uses millis() to implement non-blocking timing.

...R

You could try something like this using millis(). Compiles, not tested

const byte InletSA = 2;
const byte OutletSA = 3;
const byte FlushSA = 4;
const byte DrainSA = 5;
const byte Button = 12;
const byte LED = 11;

int ButtonValue=0;

unsigned long
    timeNow,
    timeLED;
byte
    stateLED;
    
void setup() 
{
    pinMode(Button, INPUT);
    pinMode(LED, OUTPUT);
    pinMode(InletSA, OUTPUT);       
    pinMode(OutletSA, OUTPUT);     
    pinMode(FlushSA, OUTPUT);       
    pinMode(DrainSA, OUTPUT);  
    //   
    Serial.begin(9600);
    //
    digitalWrite(LED, LOW);
    digitalWrite(InletSA,LOW);     
    digitalWrite(OutletSA,LOW);     
    digitalWrite(FlushSA,LOW);     
    digitalWrite(DrainSA,LOW);
    //
    stateLED = 0;
    
}//setup

void loop( void )
{
    digitalWrite(LED, digitalRead( Button ) );
    
    timeNow = millis();
    switch( stateLED )
    {
        case    0:
            digitalWrite(InletSA, HIGH);     
            digitalWrite(OutletSA, HIGH);     
            digitalWrite(InletSA, LOW);     
            digitalWrite(OutletSA, LOW);   
            timeLED = timeNow;
            stateLED++;
        
        break;

        case    1:
            if( timeNow - timeLED >= 5000ul )
            {
                digitalWrite(InletSA, LOW);   
                digitalWrite(OutletSA, LOW);   
                digitalWrite(InletSA, HIGH);     
                timeLED = timeNow;
                stateLED++;
                
            }//if
        break;

        case    2:
            if( timeNow - timeLED >= 8000ul )
            {
                digitalWrite(OutletSA, HIGH);
                timeLED = timeNow;
                stateLED++;
                
            }//if
        
        break;

        case    3:
            if( timeNow - timeLED >= 4000ul )
                stateLED = 0;
        break;
                
    }//switch
    
}//loop