Недавно я получил запрос на компонент, который может выбирать диапазон между двумя датами. Довольно обычная задача.
Поскольку я использую платформу пользовательского интерфейса@angular/material, я бросился к документации, пытаясь выяснить, как активировать эту функцию.
Материал имеет мощный компонент datepicker, но, к сожалению, функция диапазона еще не реализована, что шокирует!
Дальнейшее расследование обнаруживает эту проблему GitHub, в которой обсуждается этот вопрос, и хорошая кастомная реализация компонента datepicker с нуля, включая функцию диапазона.
Внедрение должно было стать официальным пиаром, но в итоге было отказано членом команды по нескольким причинам.
Обидно, я бы не хотел использовать внешний компонент, который в какой-то момент может оказаться устаревшим.
Вместо этого я решил посмотреть, насколько сложно может быть интегрировать эту функцию в материал, принимая во внимание примечания и комментарии члена команды, отказывающегося от PR.
Оказывается, это довольно просто, если принять проектное предположение, упрощающее весь процесс.
Для диапазона не используйте маскировку в пределах 1 входного компонента, используйте 2 входа. Потому что весь компонент уже реализует большую часть логики обработки даты. Таким образом мы сохраняем код, избегаем регрессий и делаем все намного проще.

В этом блице стека вы можете увидеть демонстрацию, реализацию кода и подробное описание процесса.
Тот факт, что это было сделано с использованием наследования материальных компонентов datepicker, означает, что это должна быть простая задача!
Я также опубликовал комментарий о проблеме в исходном выпуске GitHub, если вы думаете, что это решение хорошее, +1, чтобы убедить команду в продвижении этой функции.
Спасибо за чтение!