etouch
Iniciar sesión
Volver a novedades
por Théo Daguier

Changelog — July 10, 2026

Major client duplicate-detection & merge workflow, per-organization FTP multi-server model, consolidated user settings, and centralized error handling.

#feature#bugfix#refactor#infrastructure

Release

v1.57.0

✨ New Features

  • Client duplicate-detection & merge workflow — Introduced a shared client-matching module (SIREN, email, corporate domain, website, phone signals) powering a new mergeOrganizations mutation and suspectedDuplicateClients query. Studios now see a "potential duplicates" banner on the client list and can merge clients via a dialog on the client detail sheet. The same resolver is used by the e-do reservation-to-client sync, preventing duplicate creation at the source. #778
  • Duplicate-client comparison sheet — Replaced the single-review duplicate banner with a collapsible todolist that opens a side-by-side comparison sheet, letting studios pick a survivor and merge using identifying fields (SIREN, phone, website, createdAt) surfaced from the API. #782
  • Per-organization FTP multi-server model — Reworked the FTP integration from a single install-based config into a first-class FtpServer model owned by studio or retoucher orgs. A project-level resolver prefers the assigned retoucher's default server before falling back to the studio's. Includes a new Apps-page FTP manager UI with full CRUD, server test mutations, and proper access control. #781

🐛 Bug Fixes

  • Prevented client re-creation on deleted bookings — The e-do booking sync worker no longer re-creates a client that a studio intentionally deleted; it skips client creation on subsequent syncs of an already-imported reservation. #782
  • Fixed client search lag — Memoized client table rows and lazy-mounted the row action menu, resolving search lag across ~2000 client rows. #782
  • Avatar upload hover/focus fix — The avatar-upload hover/focus reveal now keys off :focus-visible instead of focus-within, avoiding a flash on sheet auto-focus. #777

♻️ Refactoring & Technical Improvements

  • Centralized error-message handling — Introduced a shared useErrorMessage() / getErrorMessage() layer to eliminate scattered error formatting logic across the app. #779
  • Consolidated profile & security settings — Merged the standalone Réglages › Profil tab into the entity-sheet-based user detail view (with a self-editable account section). Extracted a reusable PasswordInput (show/hide toggle) and useSignOut hook to deduplicate logic across auth forms and the sidebar dropdown. #777
  • FTP hardening — Added filename sanitization, size caps, per-call import limits, and idempotent re-imports across all FTP sync/import code paths. #781

📦 Dependencies & Infrastructure

  • PR #784 opened — Follow-up PR to add a missing ClientPricing migration, further refine the compare sheet, and address remaining search lag and website-client recreation edge cases. Currently open and pending review. #784