propTypes.jsВместо того чтобы определять PropTypes встроенно в объявлении .propTypes каждого компонента, веб-приложение ProjectForge извлекает общие формы в этот служебный модуль. Компоненты импортируют конкретные валидаторы (например, buttonPropType) и используют их напрямую. Это форма шаблона «общий словарь типов» — она уменьшает расхождение, когда одна и та же концепция (скажем, кнопка) получает слегка разные PropTypes в разных компонентах.
menuItemPropType — минимальная форма со строкой title. Используется в компонентах выпадающего меню навигации и бокового меню.
buttonPropType — полная форма кнопки, охватывающая варианты в стиле Bootstrap (от primary до link), опциональные id, обработчик клика, подтип CHECKBOX и состояние checked.
colorPropType — перечисление строк цветов, соответствующих названиям цветов Bootstrap 4 плюс light.
selectProps — форма выпадающего списка с обязательными id и массивом options (поддерживает как массивы объектов {value, title}, так и плоские массивы строк/чисел), плюс опциональные метка и цвет.
tableColumnsPropType — массив описателей столбцов с id и title.
contentPropType — основополагающая форма для системы DynamicLayout: каждый блок контента требует строку type (например, INPUT, TABLE, LABEL) и строку key (уникальный идентификатор в пределах макета).
В более ранней версии этого файла был определён dynamicTypePropType, перечисляющий набор поддерживаемых типов DynamicLayout (CHECKBOX, COL, CUSTOMIZED, FIELDSET, INPUT, LABEL, ROW, SELECT, TABLE, TEXTAREA). Позже он был заменён на простой PropTypes.string.isRequired — намеренное ослабление, которое позволяет серверному движку макетов вводить новые типы контента без необходимости обновления PropTypes на фронтенде, следуя принципу открытости/закрытости.
| Коммит | Что изменилось |
|---|---|
09fadca1c | Добавлен 'light' в перечисление colorPropType. Это потребовалось, когда конфигурация календаря начала поддерживать светлый цветовой вариант для стилей событий, что соответствует расширению цветовой палитры Bootstrap. |
4b945f64d | Откат 30eea8132: восстановлено поле contentPropType.key как .isRequired. Откат предполагает, что опциональный ключ приводил к незаметным сбоям поиска макета — обязательный ключ заставляет потребляющий код всегда предоставлять идентификаторы. |
30eea8132 | Сделал contentPropType.key опциональным (убрал .isRequired), предположительно для поддержки встроенных блоков контента, которым не нужны идентификаторы для сохранения. Позже это было откачено. |
3763871f8 | Удалено перечисление dynamicTypePropType и заменён contentPropType.type на простой PropTypes.string.isRequired. Это открыло систему DynamicLayout для произвольных типов контента, управляемых сервером, без изменений в коде фронтенда. |
ae35f5cc0 | Добавлен TABLE в перечисление dynamicTypePropType, когда представление списка было перенесено на использование системы отрисовки таблиц DynamicLayout вместо жёстко заданного табличного компонента. |
a8102b34e | Добавлен SELECT в перечисление dynamicTypePropType и введена форма contentPropType. Это был основополагающий коммит, который утвердил модуль PropTypes как общий словарь для системы DynamicLayout. |