Клиентский проект
Почта России — корпоративный портал для государственных почтовых отправлений

Технологии
Услуги
- →Проектирование и разработка кастомной библиотеки компонентов
- →Обёртка над Kendo Grid с типизированным API (серверный/клиентский режимы, приведение типов, кастомные рендереры)
- →Хук useCustomGridFilters для мемоизированных представлений с вкладками
- →Адаптер CustomGridRedux — полная интеграция с Redux с обратной совместимостью
- →Scrum-мастеринг: церемонии, устранение препятствий, отслеживание скорости
Результаты
- ✓CustomGrid — единая стандартизированная таблица данных, используемая по всему порталу
- ✓Серверный и клиентский режимы пагинации с автоматическим приведением типов из структур API
- ✓Представления с фильтрами по вкладкам и живым счётчиком элементов через хук useCustomGridFilters
- ✓Слой таблицы, подключённый к Redux (выбор, пагинация, сортировка, режим редактирования в сторе)
- ✓Согласованный UX на всех насыщенных данными экранах — новые табличные представления занимают часы, а не дни
Задача
Внутренний портал Почты России — которым пользуются десятки тысяч сотрудников — годами разрастался органически. Каждый модуль работал с табличными данными по-своему: своя логика пагинации, свои паттерны фильтрации, свои режимы редактирования. Итогом стал непоследовательный UX и растущая стоимость поддержки при каждом новом экране с данными.
Вдобавок работа велась в строгих корпоративных ограничениях: многоуровневое согласование изменений, версионирование SharePoint API и политики безопасности, исключавшие большинство сторонних SaaS-инструментов.
Исследование
После анализа существующих экранов стало ясно, что почти каждому нужно одно и то же: серверная пагинация, сортировка и фильтрация по колонкам, режим инлайн-редактирования и вкладки, переключающие набор данных без перезагрузки страницы. Проблема была не в данных — а в отсутствии общего контракта на их отображение.
Рассмотренные варианты
- Использовать Kendo Grid напрямую везде — отклонено. Каждая команда интегрировала его по-своему, что закрепляло несогласованность.
- Построить собственную таблицу с нуля — отклонено. Слишком рискованно с учётом корпоративных сроков и широты требуемых возможностей.
- Стандартизированная обёртка над Kendo Grid — выбрано. Инкапсулировать всё общее поведение за единым типизированным API, оставить Kendo как движок и обеспечить согласованность через слой абстракции.
Решение
Подход с обёрткой дал лучшее соотношение контроля и риска. Kendo отвечал за рендеринг и виртуализацию; обёртка владела контрактом API: метаданные полей, режимы серверной/клиентской пагинации, приведение типов, кастомные рендереры ячеек и колонки статусов. Поверх был добавлен отдельный слой-адаптер для Redux (CustomGridRedux) для экранов, которым нужно было хранить состояние таблицы (выбор, пагинацию, сортировку) в сторе — при этом он оставался обратно совместимым с таблицами, которым это было не нужно.
Реализация
CustomGrid принимает поля с метаданными, массив данных и метод загрузки. Он поддерживает два режима пагинации — серверный (общее число приходит из API, таблица оркестрирует загрузку) и клиентский (dataQuery Kendo обрабатывает всё локально) — плюс комбинированный режим для добавления локальных изменений к серверным данным. Приведение типов из серверных структур к типам JS происходит автоматически через маппинги полей, избавляя от повторяющегося кода преобразований на каждом экране.
useCustomGridFilters — это мемоизированный хук, который оборачивает набор именованных определений фильтров и рендерит тулбар Kendo с живым счётчиком элементов по каждой вкладке. Переключение вкладок меняет набор данных, подаваемый в таблицу, без перезагрузки страницы и дополнительных запросов.
CustomGridRedux — это тонкий адаптер, который оборачивает CustomGrid и зеркалит выбор, пагинацию, сортировку, фильтр, режим редактирования и состояние полей в Redux — через выделенные экшены, редьюсеры и reselect-селекторы — оставаясь при этом полностью обратно совместимым с существующими использованиями.
Обзор компонента
Результат
Теперь каждый экран с данными в портале использует один и тот же компонент с одним и тем же API. Добавление нового табличного представления превратилось из многодневной задачи интеграции в передачу конфигурации полей и функции загрузки. Роль Scrum-мастера параллельно с технической работой держала скорость поставки стабильной при постоянных блокерах со стороны корпорации — церемонии оставались лёгкими, а препятствия устранялись до того, как тормозили спринты.
Открыт для работы по контракту
Я доступен для работы по контракту. Если у вас есть интересная идея проекта — запишитесь на звонок через Calendly.
Записаться на 30-минутный звонок