discourse/app/serializers
Isaac Janzen a2b038ffe7
DEV: Upgrade search-menu to glimmer (#20482)
# Top level view
This PR is the first version of converting the search menu and its logic from (deprecated) widgets to glimmer components. The changes are hidden behind a group based feature flag. This will give us the ability to test the new implementation in a production setting before fully committing to the new search menu.

# What has changed
The majority of the logic from the widget implementation has been updated to fit within the context of a glimmer component, but it has not fundamentally changed. Instead of having a single widget - [search-menu.js](https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/widgets/search-menu.js) - that built the bulk of the search menu logic, we split the logic into (20+) bite size components. This greatly increases the readability and makes extending a component in the search menu much more straightforward.

That being said, certain pieces needed to be rewritten from scratch as they did not translate from widget -> glimmer, or there was a general code upgraded needed. There are a few of these changes worth noting:

### Search Service
**Search Term** -> In the widget implementation we had a overly complex way of managing the current search term. We tracked the search term across multiple different states (`term`, `opts.term`, `searchData.term`) causing headaches. This PR introduces a single source of truth: 
```js
this.search.activeGlobalSearchTerm
```
This tracked value is available anywhere the `search` service is injected. In the case the search term should be needs to be updated you can call 
```js
this.search.activeGlobalSearchTerm = "foo"
```
 
**event listeners** -> In the widget implementation we defined event listeners **only** on the search input to handle things such as 
- keyboard navigation / shortcuts
- closing the search menu
- performing a search with "enter"

Having this in one place caused a lot of bloat in our logic as we had to handle multiple different cases in one location. Do _x_ if it is this element, but do _y_ if it is another. This PR updates the event listeners to be attached to individual components, allowing for a more fine tuned set of actions per element. To not duplicate logic across multiple components, we have condensed shared logic to actions on the search service to be reused. For example - `this.search.handleArrowUpOrDown` - to handle keyboard navigation.

### Search Context
We have unique logic based on the current search context (topic / tag / category / user / etc). This context is set within a models route file. We have updated the search service with a tracked value `searchContext` that can be utilized and updated from any component where the search service is injected.

```js
# before
this.searchService.set("searchContext", user.searchContext);

# after
this.searchService.searchContext = user.searchContext;
```

# Views
<img width="434" alt="Screenshot 2023-06-15 at 11 01 01 AM" src="https://github.com/discourse/discourse/assets/50783505/ef57e8e6-4e7b-4ba0-a770-8f2ed6310569">

<img width="418" alt="Screenshot 2023-06-15 at 11 04 11 AM" src="https://github.com/discourse/discourse/assets/50783505/2c1e0b38-d12c-4339-a1d5-04f0c1932b08">

<img width="413" alt="Screenshot 2023-06-15 at 11 04 34 AM" src="https://github.com/discourse/discourse/assets/50783505/b871d164-88cb-405e-9b78-d326a6f63686">

<img width="419" alt="Screenshot 2023-06-15 at 11 07 51 AM" src="https://github.com/discourse/discourse/assets/50783505/c7309a19-f541-47f4-94ef-10fa65658d8c">

<img width="424" alt="Screenshot 2023-06-15 at 11 04 48 AM" src="https://github.com/discourse/discourse/assets/50783505/f3dba06e-b029-431c-b3d0-36727b9e6dce">

<img width="415" alt="Screenshot 2023-06-15 at 11 08 57 AM" src="https://github.com/discourse/discourse/assets/50783505/ad4e7250-040c-4d06-bf06-99652f4c7b7c">
2023-06-16 09:24:07 -05:00
..
concerns FIX: Include group flair in homepage category topic lists (#21268) 2023-04-27 10:18:16 +08:00
about_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
admin_badge_serializer.rb
admin_badges_serializer.rb
admin_detailed_user_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
admin_email_template_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
admin_form_template_serializer.rb DEV: Create form templates (#20189) 2023-02-08 11:21:39 -08:00
admin_plugin_serializer.rb
admin_user_action_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
admin_user_list_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
admin_user_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
admin_web_hook_event_serializer.rb
admin_web_hook_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
api_key_scope_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
api_key_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
application_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
archetype_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
associated_group_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
auth_provider_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
backup_file_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
badge_grouping_serializer.rb
badge_index_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
badge_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
badge_type_serializer.rb
basic_category_serializer.rb DEV: Move form_template_ids serializer location (#20446) 2023-02-28 09:09:20 -08:00
basic_group_history_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
basic_group_serializer.rb FEATURE: Allow group owners promote more owners (#19768) 2023-01-11 16:43:18 +08:00
basic_group_user_serializer.rb
basic_post_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
basic_reviewable_flagged_post_serializer.rb DEV: Add reviewables tab to the new user menu (#17630) 2022-07-28 11:16:33 +03:00
basic_reviewable_queued_post_serializer.rb DEV: Add reviewables tab to the new user menu (#17630) 2022-07-28 11:16:33 +03:00
basic_reviewable_serializer.rb DEV: Include pending reviewables in the main tab in the user menu (#18471) 2022-10-05 12:30:02 +03:00
basic_reviewable_user_serializer.rb DEV: Add reviewables tab to the new user menu (#17630) 2022-07-28 11:16:33 +03:00
basic_theme_serializer.rb PERF: Don't serialize value for theme_fields unnecessarily (#21201) 2023-04-24 09:30:51 -05:00
basic_topic_serializer.rb
basic_user_badge_serializer.rb
basic_user_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
basic_user_with_status_serializer.rb DEV: move BasicUserWithStatusSerializer from Discourse Chat (#18745) 2022-10-26 16:41:31 +04:00
category_and_topic_lists_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
category_detailed_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
category_group_serializer.rb
category_list_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
category_required_tag_group_serializer.rb DEV: Ensure a broken tag_group relation doesn't raise an error (#16529) 2022-04-21 18:18:35 +01:00
category_serializer.rb FEATURE: Configurable auto-bump cooldown (#20507) 2023-03-10 13:45:01 +08:00
category_upload_serializer.rb
color_scheme_color_serializer.rb
color_scheme_selectable_serializer.rb
color_scheme_serializer.rb FIX: Allow non-persisted color-scheme colors to be edited (#20104) 2023-01-31 17:10:32 +00:00
current_user_option_serializer.rb DEV: Do not include method definitions in serializer attributes 2023-01-09 14:15:00 +00:00
current_user_serializer.rb DEV: Upgrade search-menu to glimmer (#20482) 2023-06-16 09:24:07 -05:00
detailed_tag_serializer.rb SECURITY: Default tags to show count of topics in unrestricted categories (#19916) 2023-01-20 09:50:24 +08:00
detailed_user_badge_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
directory_column_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
directory_item_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
discourse_version_check_serializer.rb
draft_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
edit_directory_column_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
email_log_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
email_style_serializer.rb
embeddable_host_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
embedding_serializer.rb
emoji_serializer.rb
flagged_topic_serializer.rb
flagged_topic_summary_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
flagged_user_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
flair_group_serializer.rb
form_template_serializer.rb DEV: Show form templates in the composer (#21190) 2023-05-29 14:47:18 -07:00
found_user_serializer.rb DEV: return user IDs on the user search route (#21206) 2023-04-25 18:25:57 +04:00
found_user_with_status_serializer.rb DEV: return user status on the user search route (#17716) 2022-08-09 14:54:33 +04:00
gap_serializer.rb
group_post_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
group_post_user_serializer.rb
group_requester_serializer.rb
group_show_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
group_user_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
grouped_screened_url_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
grouped_search_result_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
hidden_profile_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
inactive_user_serializer.rb FEATURE: Show user cards for inactive users (#21387) 2023-05-15 21:45:26 +03:00
incoming_email_details_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
incoming_email_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
invite_link_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
invite_serializer.rb FIX: Hide delete button to invite as user are unable to delete anyway (#21884) 2023-06-06 12:24:19 +08:00
invited_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
invited_user_record_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
invited_user_serializer.rb
listable_topic_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
new_post_result_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
notification_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
penalty_counts_serializer.rb
pending_post_serializer.rb FEATURE: Display pending posts on user’s page 2021-11-29 10:26:33 +01:00
permalink_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
post_action_type_serializer.rb PERF: Cache ToS and Privacy Policy paths (#21860) 2023-06-07 21:31:20 +03:00
post_action_user_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
post_item_excerpt.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
post_revision_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
post_serializer.rb FEATURE: Allow expanding hidden posts for groups in SiteSetting.can_see_hidden_post (#21853) 2023-06-01 11:32:05 +08:00
post_stream_serializer_mixin.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
post_wordpress_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
poster_serializer.rb
presence_channel_state_serializer.rb
primary_group_serializer.rb
private_message_topic_tracking_state_serializer.rb
published_page_serializer.rb
queued_post_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
remote_theme_serializer.rb PERF: Don't serialize value for theme_fields unnecessarily (#21201) 2023-04-24 09:30:51 -05:00
reviewable_action_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
reviewable_bundled_action_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
reviewable_conversation_post_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
reviewable_conversation_serializer.rb
reviewable_editable_field_serializer.rb
reviewable_explanation_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
reviewable_flagged_post_serializer.rb
reviewable_history_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
reviewable_perform_result_serializer.rb DEV: Remove legacy user menu (#21308) 2023-05-17 09:16:42 -07:00
reviewable_post_serializer.rb
reviewable_queued_post_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
reviewable_score_explanation_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
reviewable_score_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
reviewable_score_type_serializer.rb UX/DEV: Review queue redesign fixes (#20239) 2023-03-02 16:40:53 +01:00
reviewable_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
reviewable_settings_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
reviewable_topic_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
reviewable_user_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
screened_email_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
screened_ip_address_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
screened_url_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
search_logs_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
search_post_serializer.rb DEV: Get headline excerpt config from GroupedSearchResult in serializer. (#20942) 2023-04-03 15:02:42 -03:00
search_result_user_serializer.rb
search_topic_list_item_serializer.rb
sidebar_section_serializer.rb PERF: Strict loading for SidebarSection queries (#21717) 2023-05-25 09:10:32 +08:00
sidebar_url_serializer.rb DEV: move sidebar community section to database (#21166) 2023-05-04 12:14:09 +10:00
similar_admin_user_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
similar_topic_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
single_sign_on_record_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
site_category_serializer.rb DEV: Move form_template_ids serializer location (#20446) 2023-02-28 09:09:20 -08:00
site_serializer.rb FIX: Update sidebar to be navigation menu (#22101) 2023-06-15 09:31:28 +10:00
site_text_serializer.rb
skipped_email_log_serializer.rb
suggested_topic_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
suggested_topics_mixin.rb DEV: Replace #pluck_first freedom patch with AR #pick in core (#19893) 2023-02-13 12:39:45 +08:00
tag_group_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
tag_serializer.rb SECURITY: Default tags to show count of topics in unrestricted categories (#19916) 2023-01-20 09:50:24 +08:00
theme_field_serializer.rb PERF: Don't serialize value for theme_fields unnecessarily (#21201) 2023-04-24 09:30:51 -05:00
theme_serializer.rb PERF: Don't serialize value for theme_fields unnecessarily (#21201) 2023-04-24 09:30:51 -05:00
theme_settings_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
theme_translation_serializer.rb
topic_embed_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
topic_flag_type_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
topic_link_serializer.rb DEV: Do not include method definitions in serializer attributes 2023-01-09 14:15:00 +00:00
topic_list_item_serializer.rb FEATURE: display PM participant group names in the topics list. (#21677) 2023-05-31 19:32:06 +05:30
topic_list_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
topic_pending_post_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
topic_post_count_serializer.rb FIX: Show auto-group flair according to user preferences (#21221) 2023-04-24 16:04:26 -03:00
topic_poster_serializer.rb
topic_timer_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
topic_tracking_state_item_serializer.rb PERF: optimise serialization for topic tracking state (#20860) 2023-03-28 18:09:22 +11:00
topic_tracking_state_serializer.rb PERF: optimise serialization for topic tracking state (#20860) 2023-03-28 18:09:22 +11:00
topic_view_details_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
topic_view_posts_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
topic_view_serializer.rb DEV: Replace #pluck_first freedom patch with AR #pick in core (#19893) 2023-02-13 12:39:45 +08:00
topic_view_wordpress_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
trust_level3_requirements_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
upload_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
user_action_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
user_auth_token_serializer.rb
user_badge_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
user_badges_serializer.rb
user_bookmark_base_serializer.rb FIX: Allow .ics for polymorphic bookmarks (#16694) 2022-05-11 09:29:24 +10:00
user_bookmark_list_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
user_card_serializer.rb DEV: Prefer \A and \z over ^ and $ in regexes (#19936) 2023-01-20 12:52:49 -06:00
user_field_serializer.rb
user_history_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
user_name_serializer.rb
user_option_serializer.rb DEV: Do not include method definitions in serializer attributes 2023-01-09 14:15:00 +00:00
user_post_bookmark_serializer.rb FIX: Allow .ics for polymorphic bookmarks (#16694) 2022-05-11 09:29:24 +10:00
user_post_topic_bookmark_base_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
user_serializer.rb DEV: Do not include method definitions in serializer attributes 2023-01-09 14:15:00 +00:00
user_status_serializer.rb DEV: start glimmer-ification and optimisations of chat plugin (#19531) 2022-12-21 13:21:02 +01:00
user_summary_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
user_tag_notifications_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
user_topic_bookmark_serializer.rb PERF: Rely on preload for first_post for TopicBookmarkable (#18066) 2022-08-24 16:01:29 +10:00
user_with_custom_fields_serializer.rb
user_wordpress_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
watched_word_list_serializer.rb FIX: Make serialized watched word regex Javascript compatible (#22010) 2023-06-09 10:22:41 +00:00
watched_word_serializer.rb FIX: Make serialized watched word regex Javascript compatible (#22010) 2023-06-09 10:22:41 +00:00
web_hook_category_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
web_hook_flag_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
web_hook_group_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
web_hook_group_user_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
web_hook_like_serializer.rb
web_hook_post_serializer.rb FEATURE: Allow expanding hidden posts for groups in SiteSetting.can_see_hidden_post (#21853) 2023-06-01 11:32:05 +08:00
web_hook_topic_view_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
web_hook_user_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
wizard_field_choice_serializer.rb
wizard_field_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
wizard_serializer.rb
wizard_step_serializer.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00