* Use new async FilterableTreeView for global project selector
* Remove replaced angular component
* Fine tune sorting and expansion state of the new project selector
* Update primer to 0.86.1
* Add workspace information and filter results hierarchy information to project selector
* Include review feedback: Harmonize I18n keys, fix visible scope, use guarded local storage
* Add a turboFrame in the project select overlay to only load the projects when it is actually opened
* Restore BIM tab styles which were broken for a while already but the new project selector changes made it so bad that the test broke because the plus icon was overlapping the checkbox
* Clarify spec expectation
rspec ./spec/features/search/search_spec.rb:307
the search for the first work package, having 1 in the subject, led to all 1x work packages being found.
The work package activity tab computed a per-journal sequence_version on
every render — a ROW_NUMBER() window function over a LATERAL join — only to
stamp the legacy data-anchor-activity-id that #activity-N deep links rely on.
Nothing mints those links anymore; copy and share links use
#comment-<journal id>, which needs no extra query.
The activity number is now resolved on demand. Only a request carrying
?anchor=activity-N runs the window function, mapping the number to a journal
id the paginator exposes as resolved_anchor. The view hands that to the
client, which rewrites #activity-N to the canonical #comment-<id> and scrolls
using the comment anchor already present in the DOM. Default renders no longer
touch the window function.
References WP #68063.
rspec spec/features/projects/subproject_creation_spec.rb:59
The theory is that the page hasn`t completed the turbo request and stale dom elements are evaluated
Refactors the custom `:list`/`:list_item` selectors onto CAS's
`add_role_selector` and drops the now-native `Capybara::Node::Simple#role`
hack. `:list_item` resolves the listitem role, so specs matching
non-listitem `<li>` are updated (`have_row` for the custom field table,
presentation dividers via CSS).
CAS 0.16 also resolves role selectors by computed role and accessible
name, which our CSS-styled tables and Primer menus do not expose through
plain markup. Affected feature specs switch to robust locators:
Capybara's `:table_row`, the FullCalendar `data-date`, and the action
menu's real accessible name ("Edit status").
The `:columnheader` `colindex` filter lost its off-by-one offset and now
uses the true 1-based `th` position. Also fixes Webhooks `RowComponent`
spec capitalization.
Work package results on the search page build their link through the
acts_as_event url proc, which passed the numeric primary key instead of
the work package's display id. In semantic mode this rendered
/work_packages/<id> even though the row showed the semantic identifier,
unlike Rails URL helpers that already resolve the object via to_param.
Pass display_id so the link follows the same convention everywhere.
* Create a new dialog component for non-working days
* Change the non-working days component
* Add feature spec
* Fix reload after canceling the action
* preserve submitted form data for confirmation, and simplify cancel handling
* Change header text
* Remove the typescript unnecessary codes and listening to a form submit and call update on confirm changes
* Add footer component for widget box
* Add footer component to the widget box as a slot
* Change projects widget to show the favorite projects
* Fix failing test
* Change the subitems widget
* Change the costs and budgets widgets
* Change the meeting widget
* Change the WPs widget in version
* Change memebers widget in project overview
* Change the favorite projects widget in my page
# Conflicts:
# frontend/src/app/shared/components/grids/widgets/project-favorites/widget-project-favorites.component.ts
* Add the widget box to the lookbook
* Add footer for members widget in dashboard
* Fix members widget capability check
* Add feature spec for favorites projects in my page
* Remove committed demo project gitlink
* Remove temporary body variables from the costs and budgets widget templates
* Remove the scroll for favorites widget
* Remove scrollbar for members and favorite projects widgets
* Change projects block to favorite projects
* Refine feature specs
* Fix the widget footer styles globally
* Rename the component name from project favorites to favorite projects
* Rename the test selector for project name
* Move widget content inside the body
* grid widgets stretch their content area so widget footers stay pinned to the bottom
* Ensure frontend-rendered grid widgets keep their turbo-loaded content in the widget flex layout so server-rendered footers stay pinned to the bottom
* Show filed type beside its name
* Add feature spec
* Add a comment for field_type_label
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Add custom field type label assertion to feature spec
* Move custom field to active group before asserting type label
* Rename the displayed field format value from field_type to
field_format_label and reuse CustomFieldsHelper for custom field format
labels.
* Make the table configuration modal wait more and embedded work package table loading take longer to avoid flaky failures when the modal or embedded table is still refreshing in CI
* Undo changes for switch_to method
* Undo changes for the tests that are sometimes failing on CI
* Update spec/features/types/form_configuration_spec.rb
Co-authored-by: Henriette Darge <h.darge@openproject.com>
* Update spec/helpers/types_helper_spec.rb
Co-authored-by: Henriette Darge <h.darge@openproject.com>
* Rubocop errors fixed
* Fix flaky field format labels spec by revisiting page after custom field creation
---------
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Henriette Darge <h.darge@openproject.com>
Turbo can restore the query filter pane as either open or closed during
browser history traversal. Use an idempotent helper before asserting
restored filters so the spec checks the query state instead of depending
on the current pane visibility.
The `## / ###` autocomplete assertions pin both `data-id` (the
record id, `mentioned_work_package.id` in either mode) and
`data-display-id` (what the user typed — `wp_display_id` resolving
to the numeric id in classic and the identifier in semantic) on the
widget DOM that appears in the editor right after a pick. The
classic / semantic asymmetry now lives in the assertion itself
rather than in a per-context CSS selector.
The previous version reached for `wp.display_id` and `wp.formatted_id`
inside the example body, so the spec was implicitly re-testing the
dispatch logic of those helpers (covered elsewhere) rather than
asserting on the column values it actually cares about.
Each consuming context now defines `wp_id` and `wp_label` lets so the
shared example asserts directly on the typed value and the rendered
link label. Classic mode passes `wp.id` and `"##{wp.id}"`. Semantic
mode passes `wp.identifier` for both — the rendered link drops the `#`
for semantic identifiers.