EN · DE · RU · FR · ES

#2756: propTypes.js

projectforge-webapp/src/utilities/propTypes.js Определения типов / экспорт PropTypes · projectforge-webapp/src/utilities/propTypes.js 58 строк · 49 кода · 1 комментарий · 8 пустых
Центральный репозиторий общих определений форм React PropTypes для дерева компонентов веб-приложения ProjectForge. Этот модуль экспортирует многократно используемые валидаторы типов для меню, кнопок, цветов, выпадающих списков, столбцов таблиц, значков и элементов динамического макета. Размещая эти PropTypes в одном модуле, кодовая база избегает дублирования в десятках компонентов, которые отображают одни и те же формы данных, обеспечивая при этом согласованную проверку типов во время разработки.

Архитектура

Шаблон проектирования

Вместо того чтобы определять PropTypes встроенно в объявлении .propTypes каждого компонента, веб-приложение ProjectForge извлекает общие формы в этот служебный модуль. Компоненты импортируют конкретные валидаторы (например, buttonPropType) и используют их напрямую. Это форма шаблона «общий словарь типов» — она уменьшает расхождение, когда одна и та же концепция (скажем, кнопка) получает слегка разные PropTypes в разных компонентах.

Экспортируемые 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 → строка

В более ранней версии этого файла был определён dynamicTypePropType, перечисляющий набор поддерживаемых типов DynamicLayout (CHECKBOX, COL, CUSTOMIZED, FIELDSET, INPUT, LABEL, ROW, SELECT, TABLE, TEXTAREA). Позже он был заменён на простой PropTypes.string.isRequired — намеренное ослабление, которое позволяет серверному движку макетов вводить новые типы контента без необходимости обновления PropTypes на фронтенде, следуя принципу открытости/закрытости.

История Git

КоммитЧто изменилось
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.