Skip to content

Release/v3.4.0 - #943

Merged
chamikaJ merged 227 commits into
mainfrom
release/v3.4.0
Nov 13, 2026
Merged

chamikaJ merged 227 commits into
mainfrom
release/v3.4.0

Conversation

@chamikaJ

Copy link
Copy Markdown
Contributor

No description provided.

123sewmini and others added 30 commits October 14, 2026 13:11
…ding logo upload

- Add LogoCropModal component using react-easy-crop with 1:1 square crop, rule-of-thirds gridlines, and zoom slider
- Intercept branding logo file selection in ClientPortalSettings to open cropping modal before staging
- Reset file input value on change in BrandingSection to support re-uploading the same file
- Add localization strings across all 8 supported languages (en, alb, de, es, fr, pl, pt, zh)
- Add unit tests for LogoCropModal lifecycle, rendering, and crop completion
…anguages

feat(client-portal): add square image cropping with gridlines and output scaling for branding logo

- Implement LogoCropModal component using react-easy-crop with 1:1 square aspect ratio, rule-of-thirds gridlines, and zoom slider
- Cap cropped canvas output dimensions at 512px to optimize file size without upscaling smaller images
- Reset internal crop and zoom state on successful crop application to prevent stale configuration on subsequent uploads
- Intercept file selection in ClientPortalSettings to route uploads through the crop modal before staging
- Reset file input value on change in BrandingSection to permit re-uploading the same file
- Add localization strings across all 8 supported languages (en, alb, de, es, fr, pl, pt, zh) passing strict translation checks
- Add comprehensive unit tests in LogoCropModal.test.tsx covering modal lifecycle, crop application, and output scaling
…g for branding logo

- Integrate react-image-crop into LogoCropModal for interactive 8-point drag handles (sides and corners)
- Add aspect ratio toggle between 1:1 Square and Free cropping modes
- Display rule-of-thirds gridlines for precise alignment
- Scale cropped canvas output to cap longest side at 512px without upscaling smaller crops
- Reset crop state on apply or cancel
- Add translations across all 8 locales with zero translation drift
- Update unit tests covering aspect switching, drag crop, and canvas scaling
Implemented a proper lifecycle ordering for the Status column in the Projects → Reports → Projects table.

Why
The previous sorter (sorter: true) relied on backend ordering, which did not respect the required status lifecycle order (Proposed → In Planning → In Progress → Completed → On Hold → Blocked → Cancelled).
Users experienced incorrect sorting when clicking the status column header, breaking expected UI behavior.
What
Replaced sorter: true with a custom comparator that:
Defines STATUS_ORDER mapping each status string to its intended position.
Retrieves order values from a.status_name and b.status_name.
Returns the numeric difference to let Ant Design handle ascending/descending automatically.
Added an inline comment explaining the purpose of the custom sorter.
Impact
Sorting now follows the exact lifecycle sequence for both ascending and descending orders.
No changes to API contracts or other columns; existing table functionality (pagination, filters, loading state) remains unchanged.
The UI now reflects intuitive ordering, improving user experience and meeting the project’s UI/UX guidelines.
Verification
Ran the full test suite (npm test --silent) with no failures.
Manually verified in the development server that:
Clicking the Status header sorts rows according to the defined lifecycle order.
Clicking again correctly reverses the order.
Other table features (search, pagination, other column sorting) continue to work as expected.
- Replace free-form cropping with 1:1 Square and 250x100 presets
- Lock 250x100 crop box to prevent resizing and allow only repositioning
- Export 250x100 crop selections directly to exact 250x100 pixel canvas output
- Add context-aware instruction text when crop box is locked
- Update localization across all 8 supported languages with zero translation drift
- Update unit tests covering locked state, aspect toggles, and target dimension export
…to 526-bug-sorting-functionality-not-working-correctly-in-reports-projects-page-new
…ort reset

- Sort project status column by workflow lifecycle order (Proposed -> In Planning -> In Progress -> Completed -> On Hold -> Blocked -> Cancelled) in reporting tables.
- Order JSON aggregate in reporting-controller-base to preserve sorting through ARRAY_AGG across LIMIT/OFFSET pages.
- Handle sort cancellation (3rd click) in projects-reports-table and reporting-overview-projects-table so columns return to normal neutral state instead of remaining stuck on descend.
- Drive table column sort indicators using controlled sortOrder to prevent multiple columns highlighting simultaneously.
…equestModal functionality

- Changed DetailModal to use destroyOnHidden instead of destroyOnClose.
- Improved NewChangeRequestModal to retain typed fields and attachments after upload confirmation, addressing issues with project list refetch.
- Enhanced tag display for attachments with ellipsis and improved styling for better responsiveness.
- Set default value of `client_contact_notification_prefs.email` to false via migration
- Set default values for `client_email_events` and `team_email_events` in `client_portal_settings` to false
- Reset existing portal settings rows to disable all client and team email notification events by default
- Update `DEFAULT_PORTAL_SETTINGS_V2` and `getNotificationPrefs` fallback to false
- Ensure notifications dispatch queries only send email when explicitly enabled (opt-in)
- Update client portal frontend notification toggle fallback and tests
- Changed member count keys to singular and plural forms for better localization handling.
- Updated various button labels and messages to improve clarity and user experience.
- Added new keys for invitation link generation and management across different languages.
- Ensured consistency in terminology and phrasing across all language files.
…acking page

- Replace obsolete round pill buttons with standard 32px height, 7px radius buttons
- Convert '% Complete' select to standard dropdown button with menu item checkmarks and clear icon
- Add semantic active background and border tints per delivery confidence status
- Add toggle-to-deselect behavior returning active status filters back to 'All'
- Replace nested badge pill with clean space-separated inline counter for optimal dark and light theme contrast
- Update unit tests in progress-tracking-page.test.tsx covering filter actions and toggling
…essibility

- Replace non-standard round pill buttons on Progress Tracking page with 32px height, 7px radius buttons
- Convert '% Complete' select to dropdown filter button with checkmarks and animated caret
- Add semantic active status tints and toggle-to-deselect filter behavior
- Replace badge pill with space-separated inline counter for dark/light theme contrast
- Improve percent-range button accessible name to dynamically reflect the selected range
- Provide dedicated button semantics, keyboard focus, and Enter/Space handling for clear control
- Update unit tests in progress-tracking-page.test.tsx covering filter interactions
…ute changes and add search guard functionality
…on-styles-on-the-reports-progress-tracking-page

style(reporting): standardize button and filter styles on progress tracking page
…ut-breaks-when-project-or-task-names-are-too-long

fix(layout): improve responsiveness of HomeLogTime page and quick entry feild
…ation-logos-for-switch-account-drop-down

feat: display organization logos in switch team dropdown
…fter-being-uploaded-to-a-request

fix: update DetailModal to use destroyOnHidden and enhance NewChangeR…
chamikaJ and others added 26 commits November 3, 2026 15:03
…ing-dates-shows-permissions-updated-toast

refactor(socket): remove PROJECT_PERMISSION_CHANGED emission on unaut…
…e-hold

Revert roles and permissions for the upcoming release
… sidebar layout with ReportingModePaddle component
… ReportingSider components for improved user experience
…, enhancing translations for mode switching and sidebar actions.
…-projects-members-date-range-are-lost-after-navigating-away-and-returning-hotfix

821 bug reports applied filters projects members date range are lost after navigating away and returning hotfix
Implement Apple desktop sign-in callback and redirect handling
…te AppSumoPopup component. Added new pricing structure and improved UI for notifications drawer. Refactored Mixpanel tracking events for better analytics.
…eserve whitespace in the editor. Added a test to ensure typed spaces are retained while the editor is open.
Update reporting sidebar localization to replace "Custom" with "Advan…
…Stepper and conditionally render seat selector for AppSumo customers
* feat(migration): allow NULL project_id in project_logs to preserve logs on project deletion

* chore(deps): bump multer from 2.4.0 to 2.5.0 in /worklenz-backend

Bumps [multer](https://github.com/expressjs/multer) from 2.4.0 to 2.5.0.
- [Release notes](https://github.com/expressjs/multer/releases)
- [Changelog](https://github.com/expressjs/multer/blob/main/CHANGELOG.md)
- [Commits](expressjs/multer@v2.4.0...v2.5.0)

---
updated-dependencies:
- dependency-name: multer
  dependency-version: 2.5.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump dompurify from 3.4.16 to 3.4.17 in /worklenz-frontend

Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.4.16 to 3.4.17.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](cure53/DOMPurify@3.4.16...3.4.17)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-version: 3.4.17
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps-dev): bump undici in /worklenz-client-portal

Bumps [undici](https://github.com/nodejs/undici) from 7.30.0 to 7.30.1.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](nodejs/undici@v7.30.0...v7.30.1)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 7.30.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump nodemailer from 10.0.16 to 10.1.4 in /worklenz-backend

Bumps [nodemailer](https://github.com/nodemailer/nodemailer) from 10.0.16 to 10.1.4.
- [Release notes](https://github.com/nodemailer/nodemailer/releases)
- [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md)
- [Commits](nodemailer/nodemailer@v10.0.16...v10.1.4)

---
updated-dependencies:
- dependency-name: nodemailer
  dependency-version: 10.1.4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump tinymce from 7.9.3 to 8.9.3 in /worklenz-backend

Bumps [tinymce](https://github.com/tinymce/tinymce/tree/HEAD/modules/tinymce) from 7.9.3 to 8.9.3.
- [Changelog](https://github.com/tinymce/tinymce/blob/8.9.3/modules/tinymce/CHANGELOG.md)
- [Commits](https://github.com/tinymce/tinymce/commits/8.9.3/modules/tinymce)

---
updated-dependencies:
- dependency-name: tinymce
  dependency-version: 8.9.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* Prepare Italian locale support

* Add Italian translations for various components and settings

* Add Italian translations for various components in the application

* Add Italian translations for various frontend components and settings

- Added translations for client view requests, services, and settings.
- Included translations for chat, invoices, projects, and home inbox.
- Implemented translations for reporting overview and sidebar.
- Added translations for task drawer and template drawer components.
- Included translations for guest members, job titles, and practices management.
- Added help documentation and integrations settings translations.
- Implemented translations for organization currency settings and survey prompts.

* Add Italian translations for various settings, notifications, and project management features

* Add Italian translations for various project management and reporting features

* Add Italian translations for various components including Gantt, Kanban Board, Navbar, Project View Files, Project View Members, Reporting Projects, Project Templates, Ratecard Settings, Sidebar, and Team Lead Reports.

* chore(deps-dev): bump highcharts in /worklenz-backend

Bumps [highcharts](https://github.com/highcharts/highcharts-dist) from 11.4.8 to 11.4.9.
- [Commits](https://github.com/highcharts/highcharts-dist/commits)

---
updated-dependencies:
- dependency-name: highcharts
  dependency-version: 11.4.9
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix:Table colums are not properly seperated on the report page (#820)

* fix:table colums are not properly seperated on the report page

* fix(locales): add missing billing translations

Add the current-plan labels across locales so strict locale checks pass.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(analytics): correct table pagination and row rendering

Use selectable client pagination and stable record identifiers, and render delivery confidence status and notes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(analytics): size confidence tag to content

Keep the delivery-confidence tag content-sized within the stacked cell and remove its default margin.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: improve analytics report table borders and column widths

* fix(analytics): truncate delivery confidence notes

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix : project health report table header colum overlap on narrow screen widths (#834)

* fix : project health report table header coloum overlap on narrow screen width

* fix : use pixel widths for project health columns

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix : incorrect row count displaye in cumalative flow report page (#837)

* fix: prevent long project names from overlapping header actions (#842)

* fix: prevent long project names from overlapping header actions

* fix: keep project header title on one line

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Enhance task creation by ensuring total_minutes defaults to 0 and updating create_task response handling (#849)

* fix: constrain planner current date indicator to project rows (#851)

* fix: constrain planner current date indicator to project rows

* fix: raise planner today indicator above project rows

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore(deps): bump follow-redirects in /worklenz-frontend (#859)

Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.16.1 to 1.16.2.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](follow-redirects/follow-redirects@v1.16.1...v1.16.2)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-version: 1.16.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump postcss-selector-parser in /worklenz-frontend (#858)

Bumps [postcss-selector-parser](https://github.com/postcss/postcss-selector-parser) from 6.1.2 to 6.1.5.
- [Release notes](https://github.com/postcss/postcss-selector-parser/releases)
- [Changelog](https://github.com/postcss/postcss-selector-parser/blob/6.1.5/CHANGELOG.md)
- [Commits](postcss/postcss-selector-parser@v6.1.2...6.1.5)

---
updated-dependencies:
- dependency-name: postcss-selector-parser
  dependency-version: 6.1.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps-dev): bump vite from 6.4.4 to 6.4.5 in /worklenz-frontend (#856)

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.4.4 to 6.4.5.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.4.5/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.4.5/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.4.5
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump i18next-http-backend in /worklenz-frontend (#857)

Bumps [i18next-http-backend](https://github.com/i18next/i18next-http-backend) from 4.0.2 to 4.0.4.
- [Changelog](https://github.com/i18next/i18next-http-backend/blob/master/CHANGELOG.md)
- [Commits](i18next/i18next-http-backend@v4.0.2...v4.0.4)

---
updated-dependencies:
- dependency-name: i18next-http-backend
  dependency-version: 4.0.4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* refactor(reporting): replace Highcharts.PointOptionsObject with custom IChartPoint interface

* chore(deps): update package versions in package-lock.json

* chore: update dependencies in package-lock.json

- Bumped versions of several @babel packages to 7.29.x
- Updated brace-expansion from 2.1.4 to 2.1.7
- Updated body-parser from 1.20.5 to 1.20.9 and qs from 6.15.1 to 6.16.0
- Updated baseline-browser-mapping from 2.11.28 to 2.11.35
- Updated browserslist from 4.28.0 to 4.29.5
- Updated caniuse-lite from 1.0.30001757 to 1.0.30001820
- Updated electron-to-chromium from 1.5.263 to 1.5.477
- Updated follow-redirects from 1.16.0 to 1.16.2
- Updated minimatch from 10.2.5 to 10.2.6
- Updated node-releases from 2.0.27 to 2.0.63
- Updated proxy-addr from 2.0.7 to 2.0.8
- Updated update-browserslist-db from 1.1.4 to 1.3.4
- Updated ws from 8.20.1 to 8.21.3

* Add Italian language support

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Sadeesha Sewmini <167700499+123sewmini@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: DinuniWork <dinuni@ceydigital.com>
@coderabbitai

coderabbitai Bot commented Nov 12, 2026

Copy link
Copy Markdown
Contributor

Walkthrough

Warning

Review details and warnings were omitted to fit the comment limit.

@chamikaJ
chamikaJ merged commit c0115ed into main Nov 13, 2026
12 checks passed
@chamikaJ
chamikaJ deleted the release/v3.4.0 branch November 13, 2026 03:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants