* fix(review-workflows): fetch all users in assignee dropdown
The AssigneeSelect component passed no pagination params to
useAdminUsers, which defaults to pageSize 10. Users with more than
10 admin accounts could not see or select all assignees.
Pass pageSize: 100 so the dropdown lists all available users.
Fixes#25945
* fix(review-workflows): incremental loading + preserve current assignee
Replaces the fixed pageSize:100 fetch with the same incremental Combobox
pattern used by the admin-users filter (Filters.tsx): grow pageSize on
onLoadMore, debounce server-side search via _q, and reset both on close.
Also keeps the currently assigned user in the option list when they fall
outside the loaded page or active search, so the Combobox never loses
its value.
* fix(review-workflows): improve assignee dropdown pagination search
---------
Co-authored-by: Bassel Kanso <basselkanso82@gmail.com>
StageSelect and AssigneeSelect were calling unstable_useDocument without
the query params (which carry the active locale). This caused both
components to always fetch and display data from the default locale,
regardless of which locale the editor had open.
As a result, when viewing a non-default locale entry, the displayed
review stage and assignee reflected the default locale's values. After
updating the stage or assignee for a non-default locale, the cache
invalidation triggered a refetch that still omitted the locale param,
so the panel appeared unchanged even though the backend had been
updated correctly.
Passing params to unstable_useDocument aligns the document fetch with
the locale already used by the mutations (useUpdateStageMutation,
useUpdateAssigneeMutation) and the stages query (useGetStagesQuery),
ensuring the panel reads from and reflects the correct locale.
Previously the migration could leave the DB in an unbootable state after
a statement_timeout or process kill: the document_id column existed but
the migration was not recorded, and the retry crashed with PG 42701
"column already exists". Additionally, when hasColumn returned true
the migration early-exited via continue, silently skipping the backfill
and leaving rows with NULL document_id.
- Swallow duplicate-column errors (PG 42701, MySQL 1060, generic
/duplicate column/i) around ALTER TABLE ADD COLUMN to tolerate
catalog drift / operator-applied partial fixes.
- Always run the document_id backfill when the column exists; the
backfill already uses WHERE document_id IS NULL so it is a no-op on
fully-populated tables and recovery on partially-populated ones.
- Add unit tests covering fresh run, column-already-exists,
PG 42701, MySQL 1060, and non-duplicate errors.
Fixes CMS-689
* fix(document-service): preserve self-referential relations during publish/discard
* test(document-service): convert self-referential API test to TypeScript
* fix(document-service): use JoinTable type and tighten Record types in self-referential-relations
* test(document-service): remove weak load() happy-path unit test
* fix(document-service): skip mappedBy attrs, deduplicate and idempotent-insert self-refs
* test(document-service): fix missing dialect and trx mocks in self-referential-relations tests
* fix(tests): use count assertions for CM API self-referential relation tests
* enhancement: update progress per chunk
* fix: check stageprogress exists to make ts happy
* chore: split progress tracker into two methods
* test: fix lint
* enhancement: display readable times
* fix: speed indication for assets
* fix: restore speed indicator and fix double counting
* chore: clean up code
* fix: data transfer memory leak
* fix: yarn.lock
* chore: fix memory logging
* ci: complex project remote transfer
* enhancement: optimized transfer mode
* test(cli): data transfer and env passthrough
* chore: only send one message warning of legacy mode
* enhancement: show transfer totals and estimated time
* test(cli): fix deterministic transfer test files
* fix: push and pull shared utils backwards compatibility
* fix(data-transfer): extract legacy asset chunk parsing and tighten transfer logging/test coverage
* enhancement: checksum negotiation
* enhancement: show skipped file warnings on client
* fix: transfer diagnostics
* test: fix open handle
* fix: clear stall timeout for assets
* chore: fix misleading comments and variables
* test: fix misleading test
* test: fix typo
* test: make checks deterministic, less flaky
* enhancement(data-transfer): speed up asset totals; widen assets start reply window on remote pull
* fix(data-transfer): harden WebSocket JSON serialization for transfer frames
* fix(data-transfer): more transfer hardening
* test: fix test imports
* fix: await async write
* fix(data-transfer): resolve push transfer deadlock and harden async writes
- Extract createAssetsDestinationWritable so Writable callbacks run before
uploadStream completes (same WS batch as PassThrough chunks).
- Add writable-async-write (write callback + drain/finished race; avoid hang
on destroy).
- Wire push/pull, remote-source, file & directory sources to shared write().
- Fire-and-forget pull flush: Promise.resolve(flush).catch(onError); guard
missing stream inside try.
- Add regression tests (assets writable, writable-async-write, handler checks).
* fix(data-transfer): write push stream batches sequentially
Use a for-loop with await write() instead of Promise.all over msg.data
so non-asset stages respect one in-flight write per objectMode Writable
and backpressure from writable-async-write.
- Validate minChunksForBackpressure in assertReadStreamBackpressure
- Add engine test for non-Buffer asset chunk byte progress (counts as 1)
- Assert push.ts keeps sequential msg.data handling in static handler test
* fix(data-transfer): align push streamAsset with remote-source and harden tests
- Push handler: combine stream/end under one branch, error when start is missing
or action is invalid; shorten stage write comments.
- Engine version-matching tests: use a fresh createDestination() per engine so
parallel transfers do not share destination writables (MaxListeners warnings).
- File destination tests: mock createWriteStream with a new Writable per call.
- CLI transfer tests: mock progress.stream so transfer::finish runs after transfer
and clears the progress setInterval (fixes Jest worker hang).
- Misc test cleanup: assets-destination timeout clearTimeout, collect listeners,
writable-async-write teardown; tighten push/static test descriptions.
* test: remove parity test
* fix(data-transfer): harden collect() and stabilize transfer tests
- collect(): settle once, remove listeners on resolve/reject, avoid double completion
- engine tests: add expectHeapGrowthWithinNoise for heap smoke checks
- CLI transfer tests: console spies in beforeAll; jest.restoreAllMocks in afterAll
- stream test: remove removeAllListeners workaround
* fix: webpack public path was missing a slash at the end
* fix: pr review
---------
Co-authored-by: Adrien Lepoutre <3693028+Adzouz@users.noreply.github.com>
Add missing Dutch translations across all core packages and plugins,
bringing coverage from ~50% to ~100%.
Changes:
- core/admin: 301 new translations added (564 → 863 keys)
- core/content-manager: 169 new translations added (190 → 359 keys)
- core/content-type-builder: 62 new translations added (226 → 288 keys)
- core/upload: new nl.json with 220 translations
- core/email: 43 translations added (was empty)
- core/content-releases: new nl.json with 104 translations
- core/review-workflows: new nl.json with 15 translations
- plugins/users-permissions: 39 new translations added (42 → 81 keys)
- plugins/i18n: new nl.json with 84 translations
- plugins/cloud: new nl.json with 19 translations
Also standardizes existing translations to use informal "je/jouw"
consistently (was mixed "u/uw" and "je/jouw"), matching Strapi's
informal, developer-friendly tone of voice.