Commit Graph

108376 Commits

Author SHA1 Message Date
Alexander Brandon Coles 275eda0c96 Invalidate promises requested while disconnected
Any `services` or `pluginContext` promise requested between a disconnect
and a reconnect of the same controller instance still resolved after the
context arrived, because the epoch only ever advanced on disconnect. The
epoch now also advances on reconnect.
2026-06-11 12:57:00 +01:00
Alexander Brandon Coles 3203b63b44 Migrate Angular bridge controllers to useServices
Unravels the per-controller RxJS context chains and the injector promise
chains. The modal closing and the match preview now resolve the declared
services lazily, the storage form loses both its colliding pluginContext
getter and its deprecated `runInZone` wrapper while the menu controllers
reach the Angular injector by way of the pluginContext escape hatch. The
toggle keeps swallowing injector failures as before.
2026-06-11 12:57:00 +01:00
Alexander Brandon Coles b34cbc5f37 Migrate drag and drop autoscroll to useServices
Retrieves the autoscroll class through the pluginContext escape hatch of
the mixin, the first such consumer needing classes rather than services.
The manual `isConnected` guard drops away because pending plugin context
promises never settle on disconnected controllers.
2026-06-11 12:57:00 +01:00
Alexander Brandon Coles 6c3ad8d625 Migrate activities tab controllers to useServices
The polling setup shifts into the servicesConnected hook because polling
and conflict handling invoke the bound service properties synchronously,
while the lazy page resolves the turbo requests service on demand when a
page scrolls into view, closing the race with the load delay.
2026-06-11 12:57:00 +01:00
Alexander Brandon Coles 72c40a4433 Migrate date picker previews to useServices
Shifts both flatpickr dates-changed listeners into the servicesConnected
hook: their handlers invoke the bound timezone service synchronously, so
listening must only start once the service is bound. It also renames the
property to the context service name the mixin binds it under.
2026-06-11 12:57:00 +01:00
Alexander Brandon Coles 21e64b6e71 Disconnect controllers in Stimulus test dispose
Unloads the registered test identifiers before stopping the application,
since `stop()` disables the DOM observer and controllers would otherwise
never disconnect, leaking document-level listeners into later tests.
2026-06-11 12:56:59 +01:00
Alexander Brandon Coles ed47e8b1a0 Migrate meetings and time tracking to useServices
Declares the turbo request and path helper services through the mixin.

The time tracking calendar setup and its dialog close listener move into
the servicesConnected hook because the FullCalendar callbacks invoke the
bound service properties synchronously; the user-triggered handlers then
resolve the services lazily.
2026-06-11 12:56:59 +01:00
Alexander Brandon Coles e62e093409 Migrate simple service-binding controllers
Removes each controller's hand-rolled async `connect()` service binding,
plus one bespoke memoization, in favour of services declared through the
useServices mixin and destructured lazily in the action handlers.

The password confirmation form now intercepts submissions immediately on
connect rather than after plugin context resolution, so any early submit
can no longer bypass the confirmation dialog.
2026-06-11 12:56:59 +01:00
Alexander Brandon Coles 8ee11be79b Migrate export and job controllers to useServices
Replaces the hand-rolled `getPluginContext()` error notification lookups
with services declared and resolved through the useServices mixin.

The job dialog controller now attaches its click listener on connect, so
clicks arriving before the Angular plugin context has resolved no longer
fall through to the raw link.
2026-06-11 12:56:58 +01:00
Alexander Brandon Coles 56af6d66d0 Preserve grab offset on Backlogs drag preview
Custom preview snapped its top-left to the pointer;
preserveOffsetOnSource keeps the grab point like the native preview.
2026-06-11 12:44:01 +01:00
Alexander Brandon Coles 39955b723d Declare Backlogs controllers on the turbo frame
Moves the controller declarations from the inner div onto the frame tags
themselves, so the list refresh controller reloads `this.element` instead
of breaking out via `closest`.

The turbo frame tags carry identical attributes, so that morph refreshes
cannot strip the controllers off the live element.
2026-06-11 12:44:01 +01:00
Alexander Brandon Coles 899edbdd65 Factor list_id into Backlogs move target checks
Resolves a list move when either `list_type` or `list_id` is given, so a
`list_id` passed without its type now fails as an invalid target instead
of being silently ignored by the direction handling.
2026-06-11 12:44:00 +01:00
Alexander Brandon Coles dca73e2840 Handle menu close race in Backlogs dismiss_menu
A menu item that opens a modal closes its popover asynchronously, so the
overlay can disappear between the visibility check in `dismiss_menu` and
the click, raising `Capybara::ElementNotFound`.

Rescues it like the existing interactability case, re-raising unless the
menu is gone or a modal owns focus.
2026-06-11 12:44:00 +01:00
Alexander Brandon Coles 9b1486c557 Add useServices mixin for Angular services
Stimulus controllers each hand-rolled the `getPluginContext()` await and
its disconnect race guard differently. Adds one stimulus-use style mixin
that binds the declared services and owns the race handling.

Migrates the Backlogs list-refresh controller as the first consumer.
2026-06-11 12:44:00 +01:00
Alexander Brandon Coles 2aab2f74e0 Stop Backlogs story spec nav leak
Remove fixtures before stopping Stimulus so disconnect clears pending UI
click timers before test mocks are restored.
2026-06-10 16:19:46 +01:00
Alexander Brandon Coles 4ff6b3b01f Merge branch 'dev' into implementation/74970-backlogs-pragmatic-dnd 2026-06-10 16:08:00 +01:00
dependabot[bot] 00fe9c6a45 Bump fast-uri from 3.0.6 to 3.1.2 in /frontend (#23660)
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.0.6 to 3.1.2.
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.0.6...v3.1.2)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-10 16:05:53 +01:00
Alexander Brandon Coles 5da17b84a7 [AGILE-272] Remove rounded corners on edge rows
Upstream rounds the outermost row corners assuming the rows form the box
edge. With a header or footer in between, the focus and selection styles
showed rounded corners in the middle of the box.

https://community.openproject.org/wp/AGILE-272
2026-06-10 16:00:37 +01:00
Alexander Brandon Coles f5038ad6ee Show first-row state border in transparent lists
The transparent scheme removed the first row's top border completely, so
the selected and the current states had no top edge there. A transparent
border color keeps the row height stable and gets recolored per state.
2026-06-10 15:59:23 +01:00
Alexander Brandon Coles 80bb7559ec Apply box-list-item state colors to card rows
Moves the cursor modifiers from rows onto the card itself, drops the old
row tab stop, and applies the box-list-item state colors. Clicking marks
a card selected instantly; aria-current still tracks the open item.
2026-06-10 15:48:34 +01:00
Yauheni Suhakou beb0bd2cab Implement referencing pages query (#23544) 2026-06-10 16:11:15 +02:00
dependabot[bot] 35f4555683 Bump the typescript-eslint group in /frontend with 2 updates (#23649)
Bumps the typescript-eslint group in /frontend with 2 updates: [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) and [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser).


Updates `@typescript-eslint/eslint-plugin` from 8.60.0 to 8.60.1
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.60.1/packages/eslint-plugin)

Updates `@typescript-eslint/parser` from 8.60.0 to 8.60.1
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.60.1/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-version: 8.60.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: typescript-eslint
- dependency-name: "@typescript-eslint/parser"
  dependency-version: 8.60.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: typescript-eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-10 14:53:09 +01:00
Alexander Brandon Coles 30ebba4124 Remove border from drag preview 2026-06-10 14:46:28 +01:00
Alexander Brandon Coles 8127d71d6a Merge pull request #23588 from opf/code-maintenance/angular-22
[OP-19470] Upgrade Angular to v22
2026-06-10 14:01:14 +01:00
Oliver Günther f389bb1c9b Merge pull request #23629 from opf/fix/meeting-backlog-section
Expose the backlog section visibly through the meetings API, ensuring it appears
2026-06-10 14:06:40 +02:00
Klaus Zanders 1d45a95168 Merge pull request #23540 from opf/resource-allocation-user-time
[Resource Management] Calculation Logic
2026-06-10 13:54:41 +02:00
Alexander Brandon Coles 171a8c5d1b Move Box list styles to BorderBoxListComponent
Relocates the `.Box-*` overrides out of the global Primer overrides file
into the component stylesheet and removes the redundant padding rule for
draggable rows. It replaces the previously hardcoded `.Box-card` padding
with variant-aware rules which mirror the upstream `.Box-row` padding of
the default, condensed, and spacious Box densities. The detached preview
is mounted outside the originating Box, and the density variant class is
copied onto the preview container so the card keeps matching padding.
2026-06-10 12:48:36 +01:00
Oliver Günther cd5ceba958 Allow embed_links to be parameterized, controlling which elements should be embedded 2026-06-10 13:43:06 +02:00
Alexander Brandon Coles afe036a0db Bump @angular-builders/custom-esbuild to ^22.0.0
Also removes @angular/build version override added in 73e4c9f.
2026-06-10 12:22:34 +01:00
Alexander Brandon Coles efd516f749 Scope Pragmatic DnD morph guard to sortable roots
Preserving `data-dragging` globally can leave stale drag state on legacy
generic-drag-and-drop (Dragula) screens after a morph, because that same
controller sets this attribute as well. Preservation now only applies to
elements inside a sortable-lists root.
2026-06-10 12:16:26 +01:00
Alexander Brandon Coles 7b9bcf331d Remove per-item move URL from sortable lists
No template ever sets the per-item `moveUrl` Stimulus value, so the root
controller's URL template is the only move URL source. Drops the defunct
payload field, the resolver precedence branch, and the spec fixtures and
absence assertions that referenced the removed attribute.
2026-06-10 12:11:17 +01:00
Alexander Brandon Coles c63c266d48 Expand sortable move URLs via url-template
Swaps out the urijs `URI.expand` expansion with `parseTemplate` from the
url-template package. The urijs path relied on a side-effect import that
patched the global `URI` object and also an optional chain that silently
returned null when that import was missing; a direct import fails loudly
at build time instead.
2026-06-10 12:11:17 +01:00
Alexander Brandon Coles 7c43cf3d48 Add url-template frontend dependency
Provides standalone RFC 6570 URI template expansion, so Stimulus code no
longer needs the urijs global with its side-effect URITemplate import.
2026-06-10 12:11:16 +01:00
Klaus Zanders 35a20584b5 Only refresh the banner instead of the entire form 2026-06-10 13:03:56 +02:00
Ivan Kuchin 28c9718241 Merge pull request #23636 from opf/retry-failing-specs-visibility
Retry failing specs visibility
2026-06-10 12:49:48 +02:00
Klaus Zanders caefdd0ab0 When the allocation spans over multiple schedules, also show this in the warning 2026-06-10 12:44:09 +02:00
Alexander Brandon Coles 42f050d868 Handle Backlogs menu modal cleanup
Skip action-menu overlay dismissal once a modal is visible. Menu actions
can open the move dialog before the overlay is removed, and Selenium
cannot click that stale overlay while the modal owns focus.
2026-06-10 11:35:00 +01:00
Alexander Brandon Coles 7055e4e0cd Stabilize 422 rollback spec
Wait for the async Turbo Stream failure path before asserting the
optimistic rollback. Firefox completes the render-stream and rollback
chain one turn later than Chromium in the browser runner.
2026-06-10 11:27:40 +01:00
Oliver Günther 73892cd6d9 Remove preview mode 2026-06-10 12:27:19 +02:00
Klaus Zanders c2b3ec89cc Show availability factor in the overbooking warning 2026-06-10 12:19:10 +02:00
Ivan Kuchin ad0190de62 output flaky tests in summary and status 2026-06-10 12:18:11 +02:00
Klaus Zanders eccaf94237 Show warning for scheduling outside of work package hours in the dialog itself 2026-06-10 11:59:37 +02:00
Klaus Zanders 372c295422 Add gray background for the box 2026-06-10 11:59:18 +02:00
Klaus Zanders 4f425b03fb Display the correct working schedule 2026-06-10 11:59:17 +02:00
Klaus Zanders 660806aeeb Show overbooking warning for a user 2026-06-10 11:59:12 +02:00
Klaus Zanders d828f28c85 Resource Allocation calculation 2026-06-10 11:57:02 +02:00
Klaus Zanders 34c262c489 Add more scopes for working time related models 2026-06-10 11:57:00 +02:00
Klaus Zanders bda6278fd6 Merge pull request #23512 from opf/resource-allocation-modals
Resource allocation modals
2026-06-10 11:50:11 +02:00
Oliver Günther d851d25524 Merge remote-tracking branch 'origin/release/17.5' into dev 2026-06-10 11:29:44 +02:00
Oliver Günther efc7a8afb6 Fix IFC direct upload callback failing on non-standard store paths
attachment_id_from_key used a regex anchored to `uploads/` which does
not match store paths on SaaS instances where the store_dir is
overridden with an instance-specific prefix (e.g. instance_qa_bim/...).

https://community.openproject.org/projects/STB/work_packages/STB-80/activity
2026-06-10 11:28:06 +02:00