Конечный автомат — это ограниченное количество состояний, входные сигналы для перехода между состояниями и выходящие при этих переходах, а также сигналы текущего состояния. В теории их делят по выработке сигналов, но на фронтенде всё смешивается всё равно.
И важно помнить, что для фронтенда "конечный автомат" применяется в большей степени для процесса, а не значений. То есть, состояниями будут, например, являться:
• инициализация/загрузка документа — что до события download,
• открытое модальное окно,
• передача данных из формы,
а сигналами будут как раз события:
• ondowload сигнал для перехода из состояния загрузки в состояние готовности,
• клик по определённой кнопке — это сигнал для закрытия модального окна, например.
• submit формы
• response или reject — ответ на форму,
ещё сигналы из таймеров подойдут:
• таймаут загрузки, как самое очевидное,
• циклическая подгрузка, типа для новостей.
И по теории автоматов должно быть так, чтобы переход из одного состояния в другое всегда сопровождался определённым сигналом. Например, бесконечная лента записей из состояния просмотра по сигналу "докрутили до конца" переходит в состояние "подгрузка". Но ведь пользователь может крутануть назад и вперёд, что опять породит сигнал "докрутили до конца", но из состояния "подгрузка" не должно быть переходов по этому сигналу, а потому не должно быть и повторного запроса на сервер.
Можно примешивать ещё и значения, связанные с контентом, например, зависимость поведения от конкретных данных, но тогда количество состояний рискует быть неограниченным.
И тут начинается цирк с конями.Обычное действие — форма заявки. Здесь можно начать с состояния "покоя", когда никаких действий пользователь ещё не совершил. Затем клик по кнопке "Заявка" — сигнал. Появляется модальное окно с формой — другое состояние. Здесь два пути, продолжить заполнять форму или закрыть её, оба пути – сигналы.
НО процесс заполнения формы порождает зависимость от значений, так как нужна валидация введённых данных. Тут вроде бы и один сигнал "Отправить", но порождает два состояния: передача данных или "неверные данные в форме". С передачей данных более-менее понятно, переводим в состояние "Подождите" с каким-нибудь эффектом вращающейся свистелки.
А как определить переход в состояние "неверной формы"? Технически это запуск функции валидации через перехват submit события, но логически это противоречит "конечным автоматам", а потому результат валидации становится сигналом. А ещё бывает так, что части формы нужно скрывать или показывать по чекбоксу в той же форме. Здесь есть место для размышлений и споров, да.
И ещё, разные части страницы могут обладать своими независимым состояниями, а это порождает нужду в независимых, параллельно существующих автоматах или целой автоматной иерархии.