← Назад ко всем проектам

Клиентский проект3 мин чтения

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

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

Технологии

ReactSharePointReduxTablesDataGridsStrategyScrumMasteringProjectFrontend

Услуги

  • →Проектирование и разработка кастомной библиотеки компонентов
  • →Обёртка над Kendo Grid с типизированным API (серверный/клиентский режимы, приведение типов, кастомные рендереры)
  • →Хук useCustomGridFilters для мемоизированных представлений с вкладками
  • →Адаптер CustomGridRedux - полная интеграция с Redux с обратной совместимостью
  • →Scrum-мастеринг: церемонии, устранение препятствий, отслеживание скорости

Результаты

  • ✓CustomGrid - единая стандартизированная таблица данных, используемая по всему порталу
  • ✓Серверный и клиентский режимы пагинации с автоматическим приведением типов из структур API
  • ✓Представления с фильтрами по вкладкам и живым счётчиком элементов через хук useCustomGridFilters
  • ✓Слой таблицы, подключённый к Redux (выбор, пагинация, сортировка, режим редактирования в сторе)
  • ✓Согласованный UX на всех насыщенных данными экранах - новые табличные представления занимают часы, а не дни

Задача

Внутренний портал Почты России - которым пользуются десятки тысяч сотрудников - годами разрастался органически. Каждый модуль работал с табличными данными по-своему: своя логика пагинации, свои паттерны фильтрации, свои режимы редактирования. Итогом стал непоследовательный UX и растущая стоимость поддержки при каждом новом экране с данными.

Вдобавок работа велась в строгих корпоративных ограничениях: многоуровневое согласование изменений, версионирование SharePoint API и политики безопасности, исключавшие большинство сторонних SaaS-инструментов.

Исследование

После анализа существующих экранов стало ясно, что почти каждому нужно одно и то же: серверная пагинация, сортировка и фильтрация по колонкам, режим инлайн-редактирования и вкладки, переключающие набор данных без перезагрузки страницы. Проблема была не в данных - а в отсутствии общего контракта на их отображение.

Рассмотренные варианты

  1. Использовать Kendo Grid напрямую везде - отклонено. Каждая команда интегрировала его по-своему, что закрепляло несогласованность.
  2. Построить собственную таблицу с нуля - отклонено. Слишком рискованно с учётом корпоративных сроков и широты требуемых возможностей.
  3. Стандартизированная обёртка над Kendo Grid - выбрано. Инкапсулировать всё общее поведение за единым типизированным API, оставить Kendo как движок и обеспечить согласованность через слой абстракции.

Решение

Подход с обёрткой дал лучшее соотношение контроля и риска. Kendo отвечал за рендеринг и виртуализацию; обёртка владела контрактом API: метаданные полей, режимы серверной/клиентской пагинации, приведение типов, кастомные рендереры ячеек и колонки статусов. Поверх был добавлен отдельный слой-адаптер для Redux (CustomGridRedux) для экранов, которым нужно было хранить состояние таблицы (выбор, пагинацию, сортировку) в сторе - при этом он оставался обратно совместимым с таблицами, которым это было не нужно.

Реализация

CustomGrid принимает поля с метаданными, массив данных и метод загрузки. Он поддерживает два режима пагинации - серверный (общее число приходит из API, таблица оркестрирует загрузку) и клиентский (dataQuery Kendo обрабатывает всё локально) - плюс комбинированный режим для добавления локальных изменений к серверным данным. Приведение типов из серверных структур к типам JS происходит автоматически через маппинги полей, избавляя от повторяющегося кода преобразований на каждом экране.

useCustomGridFilters - это мемоизированный хук, который оборачивает набор именованных определений фильтров и рендерит тулбар Kendo с живым счётчиком элементов по каждой вкладке. Переключение вкладок меняет набор данных, подаваемый в таблицу, без перезагрузки страницы и дополнительных запросов.

CustomGridRedux - это тонкий адаптер, который оборачивает CustomGrid и зеркалит выбор, пагинацию, сортировку, фильтр, режим редактирования и состояние полей в Redux - через выделенные экшены, редьюсеры и reselect-селекторы - оставаясь при этом полностью обратно совместимым с существующими использованиями.

Обзор компонента

Практически вся работа шла на удалённых Windows-серверах. Клиент удалённого рабочего стола стал почти родным: любая задача начиналась с подключения к удалённому серверу.

Окно подключения к удалённому рабочему столу Windows-сервера, адрес сервера и логин скрыты
Любая задача начиналась с удалённого подключения

Результат

Теперь каждый экран с данными в портале использует один и тот же компонент с одним и тем же API. Добавление нового табличного представления превратилось из многодневной задачи интеграции в передачу конфигурации полей и функции загрузки. Роль Scrum-мастера параллельно с технической работой держала скорость поставки стабильной при постоянных блокерах со стороны корпорации - церемонии оставались лёгкими, а препятствия устранялись до того, как тормозили спринты.

Проекты

Jiro Health - практическая аналитика для врачей

Jiro Health - практическая аналитика для врачей

До: практикующим медикам в США приходилось собирать данные о доходах, рекомендациях и денежных потоках из систем, которые медленно подключались. После: как principal/founding engineer в команде основателей я веду разработку API своих подов от спецификации до релиза и строю интерфейсы корпоративного уровня на Node.js с фоновой обработкой данных на Python.

Челябинский государственный университет - доработка и администрирование портала на SharePoint

Челябинский государственный университет - доработка и администрирование портала на SharePoint

До: университетскому порталу на SharePoint не хватало того, чего нет в платформе из коробки: календаря событий, рейтинговых списков из выгрузок FoxPro, мобильной вёрстки и защищённых от спама адресов. После: свои веб-части добавили календарь с синхронизацией из Google, рейтинговые списки на SSRS, которые обновляются из загрузки, и скрытые email, а сайт получил адаптивную мобильную версию.

MyLanit - веб-часть фотогалерей и фотоконкурсов для корпоративного портала

MyLanit - веб-часть фотогалерей и фотоконкурсов для корпоративного портала

HR проводил фотоконкурсы по почте с таблицами. Мы заменили это самообслуживаемой веб-частью SharePoint - галереи, голосование, лайки, автоматические результаты - созданной с нуля вместе с параллельной backend-командой.

Открыт для работы по контракту

Я доступен для работы по контракту. Если у вас есть интересная идея проекта, запишитесь на звонок через Calendly.

Записаться на 30-минутный звонок