Для вывода сообщения лучше написать отдельную функцию.
Например:
const end = () => {
alert('end');
}
Теперь осталось отследить, когда нам необходимо вызвать данную функцию. В предоставленном вами коде уже есть интервал, в котором происходит отсчёт. Он вызывается каждую секунду. В нём уже предусмотрено событие конца, когда отсчёт останавливается (clearInterval). Иначе бы было -1, -2, -3, ...
Функция step() будет выглядеть следующим образом:
const step = () => {
if( state.timeleft.seconds-1 < 0 ){
if( state.timeleft.minutes !== 0 ){
state.timeleft.seconds = 59;
state.timeleft.minutes = ( state.timeleft.minutes-1 < 0) ? 0 : state.timeleft.minutes-1;
} else {
clearInterval( state.timerId );
end();
}
} else {
state.timeleft.seconds--;
}
render();
}
Мы вызвали end() в месте, где происходит clearInterval(). Поэтому, сообщение будет вызвано после того, как на таймере будет 00:00.