All updates
ProductionQAFrontend

QA Batch (Oct 7): Document Type Editor Overhaul, Bulk Mail/Document Actions, and CI Guardrails

PR #516pixbox-supportOct 7, 2025 · 16:40 UTC
QAOct 7, 2025
ProductionOct 7, 2025

Executive summary

This QA batch promotes several admin and inbox improvements to the testing environment, bundling feature PRs #507, #508, #509, #510, #511, and #514. Highlights include a significantly upgraded Document Type editor (tags, custom columns with drag-and-drop reordering, and loading skeletons), new bulk actions across mail and document grids (Mark as Unread, Update Status, Assign Document Type), subclient support when editing folders, and new automated lint/type-check checks on every pull request.

Why this was needed

Several admin and inbox workflows had gaps and rough edges: the Document Type editor could show stale or missing custom columns when reopened, reviewers had to manually catch styling and console.log mistakes, and operators lacked quick bulk controls (mark unread, change status, assign document type) directly from the mail and document grids. Folder editing also did not carry the assigned subclient, and the share dialog's recipient fields were colliding with the browser's autofill popup.

Client / user impact

Admins get a more reliable, polished Document Type editor: custom columns load freshly each time, can be reordered by drag-and-drop, and the whole form shows skeletons while loading and locks during save to prevent double-submits. Operators can now select multiple mails or documents and Mark as Unread, Update Status, or Assign a Document Type in bulk, with only one action menu open at a time. Folder editing now preserves and displays the existing subclient, and the share-via-mail recipient fields no longer fight the browser autofill. Engineering benefits from CI that flags lint failures (blocking) and type errors (non-blocking) on each PR.

Technical scope

  • CI workflows (PR #509): New .github/workflows/lint.yml (runs pnpm lint and a console.log scan, blocks merge on failure) and type-check.yml (runs pnpm typecheck, posts a PR comment on errors but does not block).
  • Document Type editor (PRs #507/#510): EditDocumentTypeModal.tsx (+592/-293) gains tags and custom-column support, refetches via include_columns: true on open to avoid stale cache, adds field/column loading skeletons, disables inputs while saving, normalizes data_type to lowercase enum, native HTML5 drag-and-drop column reordering with auto-recalculated display_order, and inert/pointer-event guards during column edits. Backed by document-types.service.ts, documentType.queries.ts, and document-types.types.ts (tags/columns response types).
  • Bulk actions (PRs #511 + others): Mark as Unread (MailContents, InboxGrid, MailGrid), Update Status and Assign Document Type (DocumentContents, DocumentGrid), with status-ID resolution from user statuses; bulk-actions.tsx adds single-overlay enforcement and a data-force-overflow attribute; shared getNumericDocumentId extracted to new utils/document-utils.ts.
  • Folder editing (PR #507): EditFolderModal.tsx / FolderDetailsStep.tsx add subclient_id/subclient_name, persist and display existing subclient (with fallback option), and reset on client change; FolderTypes.ts updated.
  • Mail upload & file validation (PR #508): fileValidation.ts and zipProcessing.ts drop the 10-file / 50MB limits (DEFAULT_MAX_FILES, DEFAULT_MAX_FILE_SIZE, validateFileSize removed); validation now checks file type only. Mail form/upload handling and AssignUserModal reset-on-close logic refined.
  • Share dialog (PR #514): ShareViaMailDialog.tsx disables browser autofill on recipient fields via inputProps (autoComplete off).
  • Misc: AGENTS.md code-style notes; turbopack enabled in dev script.

Risk & mitigation

Medium. The Document Type editor was heavily rewritten (~885 lines changed), so column add/edit/reorder/delete and ordering persistence need close verification. Removing file-count and size limits means very large or numerous uploads now pass front-end validation and rely entirely on the backend to enforce limits and handle load. Several features depend on backend-provided status names ('Read'/'Unread') and document-type columns matching expectations. Mitigation: changes are confined to QA, the new lint CI blocks regressions, and bulk actions clear selection state on modal close to avoid stale IDs.

QA validation focus

  • Document Types: open the edit modal, confirm fields and custom columns load with skeletons; reopen to verify columns are fresh (not stale); add, edit, delete, and drag-reorder columns and confirm order persists on save; confirm inputs lock during save.
  • Tags: assign/remove tags on a document type and verify persistence.
  • Bulk actions: select multiple mails and Mark as Unread; select documents and Update Status / Assign Document Type; confirm only one action menu opens at a time and selection clears after closing modals.
  • Folders: edit a folder with a subclient and confirm it is preselected and displayed; change client and confirm subclient resets.
  • Uploads: upload many and large files (mail and batch flows) and confirm front-end no longer blocks on count/size; verify ZIP processing still works.
  • Share via mail: type recipients and confirm the browser autofill no longer overlaps the suggestion dropdown.
  • CI: open a test PR and confirm the lint check blocks on lint/console.log issues and the type-check posts a comment without blocking.