Files
hr-appeals/README.md
T
gorbenko.pavel 010f78b138 feat: форма обращения сотрудника в HR департамент
Переносит вопросы из Microsoft Forms в собственный интерфейс: компания,
анонимность, ФИО и должность, вид обращения, описание ситуации и предложение.

Поля автора скрываются при анонимном обращении, а не блокируются: требовать ФИО
у анонима — противоречие, а серое неактивное поле выглядит как ошибка формы.

Состояние целиком в useFeedbackForm, правила заполнения — в отдельной чистой
функции validateFeedback: её можно покрыть тестами без React.

Отправки пока нет — по договорённости делаем только UI, submit пишет данные в
консоль (TODO в useFeedbackForm).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 18:15:10 +05:00

3.1 KiB
Raw Blame History

hr-appeals

Форма обращений сотрудников в HR департамент.

Заменяет встроенную Microsoft Forms: даёт собственный интерфейс в фирменном стиле (общие токены и компоненты, что и request-portal) без чужого брендинга и служебных плашек в подвале.

Стек

  • React 17 + TypeScript (строгий режим)
  • Vite 6
  • SCSS Modules
  • @tnsu/ui-kit — общие UI-компоненты

React именно 17-й: @tnsu/ui-kit объявляет его в peerDependencies.

Запуск

Пакеты @tnsu/* лежат в приватном реестре — он прописан в .npmrc, отдельная настройка не нужна, но нужен доступ к git.tnsu.kz.

npm install
npm run dev

Прочие команды:

npm run build      # проверка типов + production-сборка в dist/
npm run typecheck  # только проверка типов
npm run preview    # просмотр собранной версии

Структура

src/
  components/          переиспользуемые UI-обёртки
    Field/             FormField из ui-kit + текст ошибки валидации
    PageShell/         шапка страницы и центрированный контент
  features/feedback/   собственно форма обращения
    model.ts           типы данных, справочники, пустое состояние
    texts.ts           все пользовательские строки (задел под локализацию)
    validateFeedback.ts  правила заполнения — чистая функция
    useFeedbackForm.ts   состояние формы, валидация, отправка
    FeedbackForm.tsx     сборка формы из секций
    ThankYouScreen.tsx   экран после отправки
    sections/            секции формы
  styles/
    _design-tokens.scss  фирменные токены (копия из request-portal)
    global.scss

Состояние формы целиком живёт в useFeedbackForm; секции получают срез данных и колбэк set, но своим состоянием не владеют.

Что не сделано

Отправка данных. Бэкенда пока нет: useFeedbackForm.submit валидирует форму и пишет результат в консоль (см. TODO в файле). Реальную интеграцию нужно подключить отдельно — только там, без правок в компонентах.

Список компаний. В model.ts заполнено одно значение — «ТОО АСТЕЛ-К», единственное видимое в исходной форме. Полный список нужно уточнить у владельца формы.