diff --git a/app/assets/javascripts/admin/addon/components/admin-user-field-item.hbs b/app/assets/javascripts/admin/addon/components/admin-user-field-item.hbs
index 2ac7d15eb0f..4066af757e5 100644
--- a/app/assets/javascripts/admin/addon/components/admin-user-field-item.hbs
+++ b/app/assets/javascripts/admin/addon/components/admin-user-field-item.hbs
@@ -4,7 +4,7 @@
       <ComboBox
         @content={{this.fieldTypes}}
         @value={{this.buffered.field_type}}
-        @onChange={{action (mut this.buffered.field_type)}}
+        @onChange={{fn (mut this.buffered.field_type)}}
       />
     </AdminFormRow>
 
diff --git a/app/assets/javascripts/admin/addon/components/embeddable-host.hbs b/app/assets/javascripts/admin/addon/components/embeddable-host.hbs
index b2e09edc677..4e67cb1b50c 100644
--- a/app/assets/javascripts/admin/addon/components/embeddable-host.hbs
+++ b/app/assets/javascripts/admin/addon/components/embeddable-host.hbs
@@ -22,7 +22,7 @@
     <div class="label">{{i18n "admin.embedding.category"}}</div>
     <CategoryChooser
       @value={{this.categoryId}}
-      @onChange={{action (mut this.categoryId)}}
+      @onChange={{fn (mut this.categoryId)}}
       class="small"
     />
   </td>
diff --git a/app/assets/javascripts/admin/addon/components/modal/color-scheme-select-base.hbs b/app/assets/javascripts/admin/addon/components/modal/color-scheme-select-base.hbs
index 7b61082d949..4c70a97d1f7 100644
--- a/app/assets/javascripts/admin/addon/components/modal/color-scheme-select-base.hbs
+++ b/app/assets/javascripts/admin/addon/components/modal/color-scheme-select-base.hbs
@@ -7,7 +7,7 @@
     <ComboBox
       @content={{@model.baseColorSchemes}}
       @value={{this.selectedBaseThemeId}}
-      @onChange={{action (mut this.selectedBaseThemeId)}}
+      @onChange={{fn (mut this.selectedBaseThemeId)}}
       @valueProperty="base_scheme_id"
     />
   </:body>
diff --git a/app/assets/javascripts/admin/addon/components/modal/penalize-user.hbs b/app/assets/javascripts/admin/addon/components/modal/penalize-user.hbs
index bc21aa09939..783a20e610b 100644
--- a/app/assets/javascripts/admin/addon/components/modal/penalize-user.hbs
+++ b/app/assets/javascripts/admin/addon/components/modal/penalize-user.hbs
@@ -12,7 +12,7 @@
             @label="admin.user.suspend_duration"
             @clearable={{false}}
             @input={{this.penalizeUntil}}
-            @onChangeInput={{action (mut this.penalizeUntil)}}
+            @onChangeInput={{fn (mut this.penalizeUntil)}}
             class="suspend-until"
           />
         {{else if (eq @model.penaltyType "silence")}}
@@ -20,7 +20,7 @@
             @label="admin.user.silence_duration"
             @clearable={{false}}
             @input={{this.penalizeUntil}}
-            @onChangeInput={{action (mut this.penalizeUntil)}}
+            @onChangeInput={{fn (mut this.penalizeUntil)}}
             class="silence-until"
           />
         {{/if}}
diff --git a/app/assets/javascripts/admin/addon/components/permalink-form.hbs b/app/assets/javascripts/admin/addon/components/permalink-form.hbs
index 28727132a14..bc1f440a522 100644
--- a/app/assets/javascripts/admin/addon/components/permalink-form.hbs
+++ b/app/assets/javascripts/admin/addon/components/permalink-form.hbs
@@ -14,7 +14,7 @@
     <ComboBox
       @content={{this.permalinkTypes}}
       @value={{this.permalinkType}}
-      @onChange={{action (mut this.permalinkType)}}
+      @onChange={{fn (mut this.permalinkType)}}
       class="permalink-type"
     />
 
diff --git a/app/assets/javascripts/admin/addon/components/screened-ip-address-form.hbs b/app/assets/javascripts/admin/addon/components/screened-ip-address-form.hbs
index e550f50fc41..65ce8a71db6 100644
--- a/app/assets/javascripts/admin/addon/components/screened-ip-address-form.hbs
+++ b/app/assets/javascripts/admin/addon/components/screened-ip-address-form.hbs
@@ -11,7 +11,7 @@
 <ComboBox
   @content={{this.actionNames}}
   @value={{this.actionName}}
-  @onChange={{action (mut this.actionName)}}
+  @onChange={{fn (mut this.actionName)}}
 />
 
 <DButton
diff --git a/app/assets/javascripts/admin/addon/components/site-settings/category.hbs b/app/assets/javascripts/admin/addon/components/site-settings/category.hbs
index d947ed489ca..0ed73a74c86 100644
--- a/app/assets/javascripts/admin/addon/components/site-settings/category.hbs
+++ b/app/assets/javascripts/admin/addon/components/site-settings/category.hbs
@@ -1,6 +1,6 @@
 <CategoryChooser
   @value={{this.value}}
-  @onChange={{action (mut this.value)}}
+  @onChange={{fn (mut this.value)}}
   @options={{hash allowUncategorized=true none=(eq this.setting.default "")}}
 />
 <SettingValidationMessage @message={{this.validationMessage}} />
diff --git a/app/assets/javascripts/admin/addon/components/site-settings/enum.hbs b/app/assets/javascripts/admin/addon/components/site-settings/enum.hbs
index 7f4d2428cc4..1e96693538c 100644
--- a/app/assets/javascripts/admin/addon/components/site-settings/enum.hbs
+++ b/app/assets/javascripts/admin/addon/components/site-settings/enum.hbs
@@ -1,7 +1,7 @@
 <ComboBox
   @content={{this.setting.validValues}}
   @value={{this.value}}
-  @onChange={{action (mut this.value)}}
+  @onChange={{fn (mut this.value)}}
   @valueProperty={{this.setting.computedValueProperty}}
   @nameProperty={{this.setting.computedNameProperty}}
   @options={{hash castInteger=true allowAny=this.setting.allowsNone}}
diff --git a/app/assets/javascripts/admin/addon/templates/admin-badges/show.hbs b/app/assets/javascripts/admin/addon/templates/admin-badges/show.hbs
index 7664fb614f3..7542aa88b2e 100644
--- a/app/assets/javascripts/admin/addon/templates/admin-badges/show.hbs
+++ b/app/assets/javascripts/admin/addon/templates/admin-badges/show.hbs
@@ -72,7 +72,7 @@
           @name="icon"
           @value={{this.buffered.icon}}
           @options={{hash maximum=1}}
-          @onChange={{action (mut this.buffered.icon)}}
+          @onChange={{fn (mut this.buffered.icon)}}
         />
       {{/if}}
     </div>
@@ -83,7 +83,7 @@
         @name="badge_type_id"
         @value={{this.buffered.badge_type_id}}
         @content={{this.badgeTypes}}
-        @onChange={{action (mut this.buffered.badge_type_id)}}
+        @onChange={{fn (mut this.buffered.badge_type_id)}}
         @options={{hash disabled=this.readOnly}}
       />
     </div>
@@ -100,7 +100,7 @@
           @content={{this.badgeGroupings}}
           class="badge-selector"
           @nameProperty="name"
-          @onChange={{action (mut this.buffered.badge_grouping_id)}}
+          @onChange={{fn (mut this.buffered.badge_grouping_id)}}
         />
         <DButton
           @action={{route-action "editGroupings"}}
@@ -220,7 +220,7 @@
             name="trigger"
             @value={{this.buffered.trigger}}
             @content={{this.badgeTriggers}}
-            @onChange={{action (mut this.buffered.trigger)}}
+            @onChange={{fn (mut this.buffered.trigger)}}
             @options={{hash disabled=this.readOnly}}
           />
         </div>
diff --git a/app/assets/javascripts/admin/addon/templates/search-logs-index.hbs b/app/assets/javascripts/admin/addon/templates/search-logs-index.hbs
index 17a74893ec5..0e6cb93f91c 100644
--- a/app/assets/javascripts/admin/addon/templates/search-logs-index.hbs
+++ b/app/assets/javascripts/admin/addon/templates/search-logs-index.hbs
@@ -1,12 +1,9 @@
 <div class="admin-title">
-  <PeriodChooser
-    @period={{this.period}}
-    @onChange={{action (mut this.period)}}
-  />
+  <PeriodChooser @period={{this.period}} @onChange={{fn (mut this.period)}} />
   <ComboBox
     @content={{this.searchTypeOptions}}
     @value={{this.searchType}}
-    @onChange={{action (mut this.searchType)}}
+    @onChange={{fn (mut this.searchType)}}
     class="search-logs-filter"
   />
 </div>
diff --git a/app/assets/javascripts/admin/addon/templates/search-logs-term.hbs b/app/assets/javascripts/admin/addon/templates/search-logs-term.hbs
index 39d5cbc4b06..0a9c5ad89b2 100644
--- a/app/assets/javascripts/admin/addon/templates/search-logs-term.hbs
+++ b/app/assets/javascripts/admin/addon/templates/search-logs-term.hbs
@@ -1,12 +1,9 @@
 <div class="admin-title">
-  <PeriodChooser
-    @period={{this.period}}
-    @onChange={{action (mut this.period)}}
-  />
+  <PeriodChooser @period={{this.period}} @onChange={{fn (mut this.period)}} />
   <ComboBox
     @content={{this.searchTypeOptions}}
     @value={{this.searchType}}
-    @onChange={{action (mut this.searchType)}}
+    @onChange={{fn (mut this.searchType)}}
     class="search-logs-filter"
   />
 </div>
diff --git a/app/assets/javascripts/admin/addon/templates/user-badges.hbs b/app/assets/javascripts/admin/addon/templates/user-badges.hbs
index cab90603640..1253b62b862 100644
--- a/app/assets/javascripts/admin/addon/templates/user-badges.hbs
+++ b/app/assets/javascripts/admin/addon/templates/user-badges.hbs
@@ -22,7 +22,7 @@
           <ComboBox
             @value={{this.selectedBadgeId}}
             @content={{this.availableBadges}}
-            @onChange={{action (mut this.selectedBadgeId)}}
+            @onChange={{fn (mut this.selectedBadgeId)}}
             @options={{hash filterable=true}}
           />
         </div>
diff --git a/app/assets/javascripts/admin/addon/templates/user-index.hbs b/app/assets/javascripts/admin/addon/templates/user-index.hbs
index 5faaf59ca33..4fa3030cba9 100644
--- a/app/assets/javascripts/admin/addon/templates/user-index.hbs
+++ b/app/assets/javascripts/admin/addon/templates/user-index.hbs
@@ -411,7 +411,7 @@
         @content={{this.site.trustLevels}}
         @nameProperty="detailedName"
         @value={{this.model.trustLevel.id}}
-        @onChange={{action (mut this.model.trust_level)}}
+        @onChange={{fn (mut this.model.trust_level)}}
       />
 
       {{#if this.model.dirty}}
@@ -609,7 +609,7 @@
           @content={{this.availableGroups}}
           @value={{this.customGroupIdsBuffer}}
           @labelProperty="name"
-          @onChange={{action (mut this.customGroupIdsBuffer)}}
+          @onChange={{fn (mut this.customGroupIdsBuffer)}}
         />
       </div>
       {{#if this.customGroupsDirty}}
@@ -630,7 +630,7 @@
           <ComboBox
             @content={{this.model.customGroups}}
             @value={{this.model.primary_group_id}}
-            @onChange={{action (mut this.model.primary_group_id)}}
+            @onChange={{fn (mut this.model.primary_group_id)}}
             @options={{hash none="admin.groups.no_primary"}}
           />
         </div>
diff --git a/app/assets/javascripts/admin/addon/templates/web-hooks-edit.hbs b/app/assets/javascripts/admin/addon/templates/web-hooks-edit.hbs
index 705ad57645e..fea0f013986 100644
--- a/app/assets/javascripts/admin/addon/templates/web-hooks-edit.hbs
+++ b/app/assets/javascripts/admin/addon/templates/web-hooks-edit.hbs
@@ -23,7 +23,7 @@
         @content={{this.contentTypes}}
         @name="content-type"
         @value={{this.model.content_type}}
-        @onChange={{action (mut this.model.content_type)}}
+        @onChange={{fn (mut this.model.content_type)}}
       />
     </div>
 
@@ -43,7 +43,7 @@
       <label class="subscription-choice">
         <RadioButton
           @name="subscription-choice"
-          @onChange={{action (mut this.model.wildcard_web_hook) false}}
+          @onChange={{fn (mut this.model.wildcard_web_hook) false}}
           @value={{false}}
           @selection={{this.model.wildcard_web_hook}}
         />
@@ -71,7 +71,7 @@
       <label class="subscription-choice">
         <RadioButton
           @name="subscription-choice"
-          @onChange={{action (mut this.model.wildcard_web_hook) true}}
+          @onChange={{fn (mut this.model.wildcard_web_hook) true}}
           @value={{true}}
           @selection={{this.model.wildcard_web_hook}}
         />
@@ -86,7 +86,7 @@
           }}</label>
         <CategorySelector
           @categories={{this.model.categories}}
-          @onChange={{action (mut this.model.categories)}}
+          @onChange={{fn (mut this.model.categories)}}
         />
         <div class="instructions">{{i18n
             "admin.web_hooks.categories_filter_instructions"
diff --git a/app/assets/javascripts/discourse/app/components/badge-title.hbs b/app/assets/javascripts/discourse/app/components/badge-title.hbs
index 0a94afcb09a..40fb6e51425 100644
--- a/app/assets/javascripts/discourse/app/components/badge-title.hbs
+++ b/app/assets/javascripts/discourse/app/components/badge-title.hbs
@@ -9,7 +9,7 @@
           @value={{this._selectedUserBadgeId}}
           @nameProperty="badge.name"
           @content={{this.selectableUserBadges}}
-          @onChange={{action (mut this._selectedUserBadgeId)}}
+          @onChange={{fn (mut this._selectedUserBadgeId)}}
         />
       </div>
     </div>
diff --git a/app/assets/javascripts/discourse/app/components/bulk-actions/change-category.hbs b/app/assets/javascripts/discourse/app/components/bulk-actions/change-category.hbs
index 5c68851acf4..09ed88a1231 100644
--- a/app/assets/javascripts/discourse/app/components/bulk-actions/change-category.hbs
+++ b/app/assets/javascripts/discourse/app/components/bulk-actions/change-category.hbs
@@ -3,7 +3,7 @@
 <p>
   <CategoryChooser
     @value={{this.categoryId}}
-    @onChange={{action (mut this.categoryId)}}
+    @onChange={{fn (mut this.categoryId)}}
   />
 </p>
 
diff --git a/app/assets/javascripts/discourse/app/components/composer-container.hbs b/app/assets/javascripts/discourse/app/components/composer-container.hbs
index 6947bf43082..41087d5e980 100644
--- a/app/assets/javascripts/discourse/app/components/composer-container.hbs
+++ b/app/assets/javascripts/discourse/app/components/composer-container.hbs
@@ -197,7 +197,7 @@
                   {{#if this.composer.canEditTags}}
                     <MiniTagChooser
                       @value={{this.composer.model.tags}}
-                      @onChange={{action (mut this.composer.model.tags)}}
+                      @onChange={{fn (mut this.composer.model.tags)}}
                       @options={{hash
                         disabled=this.composer.disableTagsChooser
                         categoryId=this.composer.model.categoryId
diff --git a/app/assets/javascripts/discourse/app/components/edit-category-general.hbs b/app/assets/javascripts/discourse/app/components/edit-category-general.hbs
index eeb9ec837f9..6caa8d1bd43 100644
--- a/app/assets/javascripts/discourse/app/components/edit-category-general.hbs
+++ b/app/assets/javascripts/discourse/app/components/edit-category-general.hbs
@@ -21,7 +21,7 @@
         @value={{this.category.parent_category_id}}
         @allowSubCategories={{true}}
         @allowRestrictedCategories={{true}}
-        @onChange={{action (mut this.category.parent_category_id)}}
+        @onChange={{fn (mut this.category.parent_category_id)}}
         @options={{hash
           allowUncategorized=false
           excludeCategoryId=this.category.id
diff --git a/app/assets/javascripts/discourse/app/components/edit-category-settings.hbs b/app/assets/javascripts/discourse/app/components/edit-category-settings.hbs
index a0aa8200792..c16182defeb 100644
--- a/app/assets/javascripts/discourse/app/components/edit-category-settings.hbs
+++ b/app/assets/javascripts/discourse/app/components/edit-category-settings.hbs
@@ -58,7 +58,7 @@
         @id="category-search-priority"
         @content={{this.searchPrioritiesOptions}}
         @value={{this.category.search_priority}}
-        @onChange={{action (mut this.category.search_priority)}}
+        @onChange={{fn (mut this.category.search_priority)}}
         @options={{hash placementStrategy="absolute"}}
       />
     </div>
@@ -267,7 +267,7 @@
         @content={{this.availableSorts}}
         @value={{this.category.sort_order}}
         @options={{hash none="category.sort_options.default"}}
-        @onChange={{action (mut this.category.sort_order)}}
+        @onChange={{fn (mut this.category.sort_order)}}
       />
       {{#unless this.isDefaultSortOrder}}
         <ComboBox
@@ -278,7 +278,7 @@
             none="category.sort_options.default"
             placementStrategy="absolute"
           }}
-          @onChange={{action (mut this.category.sort_ascending)}}
+          @onChange={{fn (mut this.category.sort_ascending)}}
         />
       {{/unless}}
     </div>
diff --git a/app/assets/javascripts/discourse/app/components/edit-category-tags.hbs b/app/assets/javascripts/discourse/app/components/edit-category-tags.hbs
index 355070291f9..84322a457dd 100644
--- a/app/assets/javascripts/discourse/app/components/edit-category-tags.hbs
+++ b/app/assets/javascripts/discourse/app/components/edit-category-tags.hbs
@@ -17,7 +17,7 @@
     @everyTag={{true}}
     @excludeSynonyms={{true}}
     @unlimitedTagCount={{true}}
-    @onChange={{action (mut this.category.allowed_tags)}}
+    @onChange={{fn (mut this.category.allowed_tags)}}
     @options={{hash filterPlaceholder="category.tags_placeholder"}}
   />
 </section>
@@ -27,7 +27,7 @@
   <TagGroupChooser
     @id="category-allowed-tag-groups"
     @tagGroups={{this.category.allowed_tag_groups}}
-    @onChange={{action (mut this.category.allowed_tag_groups)}}
+    @onChange={{fn (mut this.category.allowed_tag_groups)}}
   />
   <LinkTo @route="tagGroups" class="manage-tag-groups">{{i18n
       "category.manage_tag_groups_link"
diff --git a/app/assets/javascripts/discourse/app/components/edit-category-topic-template.hbs b/app/assets/javascripts/discourse/app/components/edit-category-topic-template.hbs
index 522d3b0c8f8..4449b113bfb 100644
--- a/app/assets/javascripts/discourse/app/components/edit-category-topic-template.hbs
+++ b/app/assets/javascripts/discourse/app/components/edit-category-topic-template.hbs
@@ -12,7 +12,7 @@
     <div class="control-group">
       <FormTemplateChooser
         @value={{this.category.form_template_ids}}
-        @onChange={{action (mut this.category.form_template_ids)}}
+        @onChange={{fn (mut this.category.form_template_ids)}}
         class="select-category-template"
       />
 
diff --git a/app/assets/javascripts/discourse/app/components/edit-topic-timer-form.hbs b/app/assets/javascripts/discourse/app/components/edit-topic-timer-form.hbs
index 5437b999cfe..37efaae1b03 100644
--- a/app/assets/javascripts/discourse/app/components/edit-topic-timer-form.hbs
+++ b/app/assets/javascripts/discourse/app/components/edit-topic-timer-form.hbs
@@ -14,7 +14,7 @@
         }}</label>
       <CategoryChooser
         @value={{this.topicTimer.category_id}}
-        @onChange={{action (mut this.topicTimer.category_id)}}
+        @onChange={{fn (mut this.topicTimer.category_id)}}
         @options={{hash excludeCategoryId=this.excludeCategoryId}}
       />
     </div>
diff --git a/app/assets/javascripts/discourse/app/components/future-date-input.hbs b/app/assets/javascripts/discourse/app/components/future-date-input.hbs
index dd44f926a09..839c1122879 100644
--- a/app/assets/javascripts/discourse/app/components/future-date-input.hbs
+++ b/app/assets/javascripts/discourse/app/components/future-date-input.hbs
@@ -10,7 +10,7 @@
       @content={{this.shortcuts}}
       @clearable={{this.clearable}}
       @onChangeInput={{this.onChangeInput}}
-      @onChange={{action (mut this.selection)}}
+      @onChange={{fn (mut this.selection)}}
       @options={{hash none="time_shortcut.select_timeframe"}}
     />
   </div>
diff --git a/app/assets/javascripts/discourse/app/components/group-flair-inputs.hbs b/app/assets/javascripts/discourse/app/components/group-flair-inputs.hbs
index 9fa268db902..b1fe41d6399 100644
--- a/app/assets/javascripts/discourse/app/components/group-flair-inputs.hbs
+++ b/app/assets/javascripts/discourse/app/components/group-flair-inputs.hbs
@@ -30,7 +30,7 @@
       @name="icon"
       @value={{this.model.flair_icon}}
       @options={{hash maximum=1}}
-      @onChange={{action (mut this.model.flair_icon)}}
+      @onChange={{fn (mut this.model.flair_icon)}}
     />
   {{else if this.flairPreviewImage}}
     <UppyImageUploader
diff --git a/app/assets/javascripts/discourse/app/components/group-imap-email-settings.hbs b/app/assets/javascripts/discourse/app/components/group-imap-email-settings.hbs
index 846df0639ac..b22fe8c2428 100644
--- a/app/assets/javascripts/discourse/app/components/group-imap-email-settings.hbs
+++ b/app/assets/javascripts/discourse/app/components/group-imap-email-settings.hbs
@@ -54,7 +54,7 @@
             @valueProperty="value"
             @content={{this.mailboxes}}
             @tabindex="10"
-            @onChange={{action (mut this.group.imap_mailbox_name)}}
+            @onChange={{fn (mut this.group.imap_mailbox_name)}}
             @options={{hash none="groups.manage.email.mailboxes.disabled"}}
           />
         {{/if}}
diff --git a/app/assets/javascripts/discourse/app/components/groups-form-interaction-fields.hbs b/app/assets/javascripts/discourse/app/components/groups-form-interaction-fields.hbs
index 1564543a394..c95fcf15919 100644
--- a/app/assets/javascripts/discourse/app/components/groups-form-interaction-fields.hbs
+++ b/app/assets/javascripts/discourse/app/components/groups-form-interaction-fields.hbs
@@ -12,7 +12,7 @@
       @valueProperty="value"
       @value={{this.model.visibility_level}}
       @content={{this.visibilityLevelOptions}}
-      @onChange={{action (mut this.model.visibility_level)}}
+      @onChange={{fn (mut this.model.visibility_level)}}
       @options={{hash castInteger=true}}
       class="groups-form-visibility-level"
     />
@@ -32,7 +32,7 @@
       @valueProperty="value"
       @value={{this.membersVisibilityLevel}}
       @content={{this.visibilityLevelOptions}}
-      @onChange={{action (mut this.model.members_visibility_level)}}
+      @onChange={{fn (mut this.model.members_visibility_level)}}
       class="groups-form-members-visibility-level"
     />
 
@@ -57,7 +57,7 @@
     @valueProperty="value"
     @value={{this.mentionableLevel}}
     @content={{this.aliasLevelOptions}}
-    @onChange={{action (mut this.model.mentionable_level)}}
+    @onChange={{fn (mut this.model.mentionable_level)}}
     class="groups-form-mentionable-level"
   />
 </div>
@@ -70,7 +70,7 @@
     @valueProperty="value"
     @value={{this.messageableLevel}}
     @content={{this.aliasLevelOptions}}
-    @onChange={{action (mut this.model.messageable_level)}}
+    @onChange={{fn (mut this.model.messageable_level)}}
     class="groups-form-messageable-level"
   />
 </div>
@@ -130,7 +130,7 @@
   <NotificationsButton
     @value={{this.defaultNotificationLevel}}
     @options={{hash i18nPrefix="groups.notifications"}}
-    @onChange={{action (mut this.model.default_notification_level)}}
+    @onChange={{fn (mut this.model.default_notification_level)}}
     class="groups-form-default-notification-level"
   />
 </div>
diff --git a/app/assets/javascripts/discourse/app/components/groups-form-membership-fields.hbs b/app/assets/javascripts/discourse/app/components/groups-form-membership-fields.hbs
index d286aa54c7b..ae6ff24a7ff 100644
--- a/app/assets/javascripts/discourse/app/components/groups-form-membership-fields.hbs
+++ b/app/assets/javascripts/discourse/app/components/groups-form-membership-fields.hbs
@@ -92,7 +92,7 @@
         @settingName="name"
         @nameProperty="label"
         @valueProperty="id"
-        @onChange={{action (mut this.model.associated_group_ids)}}
+        @onChange={{fn (mut this.model.associated_group_ids)}}
         class="group-form-automatic-membership-associated-groups"
       />
     {{/if}}
@@ -119,7 +119,7 @@
       @valueProperty="value"
       @value={{this.groupTrustLevel}}
       @content={{this.trustLevelOptions}}
-      @onChange={{action (mut this.model.grant_trust_level)}}
+      @onChange={{fn (mut this.model.grant_trust_level)}}
       class="groups-form-grant-trust-level"
     />
     <label>
diff --git a/app/assets/javascripts/discourse/app/components/invite-panel.hbs b/app/assets/javascripts/discourse/app/components/invite-panel.hbs
index f3744dd2438..6f92be475ab 100644
--- a/app/assets/javascripts/discourse/app/components/invite-panel.hbs
+++ b/app/assets/javascripts/discourse/app/components/invite-panel.hbs
@@ -60,7 +60,7 @@
           @content={{this.allGroups}}
           @value={{this.groupIds}}
           @labelProperty="name"
-          @onChange={{action (mut this.groupIds)}}
+          @onChange={{fn (mut this.groupIds)}}
         />
       </div>
     {{/if}}
diff --git a/app/assets/javascripts/discourse/app/components/modal/bookmark.hbs b/app/assets/javascripts/discourse/app/components/modal/bookmark.hbs
index 76b67a841c5..52ceb8e5bef 100644
--- a/app/assets/javascripts/discourse/app/components/modal/bookmark.hbs
+++ b/app/assets/javascripts/discourse/app/components/modal/bookmark.hbs
@@ -37,7 +37,7 @@
           @content={{this.autoDeletePreferences}}
           @value={{this.bookmark.autoDeletePreference}}
           @id="bookmark-auto-delete-preference"
-          @onChange={{action (mut this.bookmark.autoDeletePreference)}}
+          @onChange={{fn (mut this.bookmark.autoDeletePreference)}}
           class="bookmark-option-selector"
         />
       </div>
diff --git a/app/assets/javascripts/discourse/app/components/modal/change-timestamp.hbs b/app/assets/javascripts/discourse/app/components/modal/change-timestamp.hbs
index 9fb66587654..6c2a19cc211 100644
--- a/app/assets/javascripts/discourse/app/components/modal/change-timestamp.hbs
+++ b/app/assets/javascripts/discourse/app/components/modal/change-timestamp.hbs
@@ -15,7 +15,7 @@
       <DatePickerPast
         @value={{readonly this.date}}
         @containerId="date-container"
-        @onSelect={{action (mut this.date)}}
+        @onSelect={{fn (mut this.date)}}
       />
       <Input @type="time" @value={{this.time}} />
     </form>
diff --git a/app/assets/javascripts/discourse/app/components/modal/convert-to-public-topic.hbs b/app/assets/javascripts/discourse/app/components/modal/convert-to-public-topic.hbs
index 0c47bc23033..8dc05ad0ed3 100644
--- a/app/assets/javascripts/discourse/app/components/modal/convert-to-public-topic.hbs
+++ b/app/assets/javascripts/discourse/app/components/modal/convert-to-public-topic.hbs
@@ -10,7 +10,7 @@
     </div>
     <CategoryChooser
       @value={{this.publicCategoryId}}
-      @onChange={{action (mut this.publicCategoryId)}}
+      @onChange={{fn (mut this.publicCategoryId)}}
     />
   </:body>
   <:footer>
diff --git a/app/assets/javascripts/discourse/app/components/modal/create-invite.hbs b/app/assets/javascripts/discourse/app/components/modal/create-invite.hbs
index 15f95a61590..3bed9058866 100644
--- a/app/assets/javascripts/discourse/app/components/modal/create-invite.hbs
+++ b/app/assets/javascripts/discourse/app/components/modal/create-invite.hbs
@@ -152,7 +152,7 @@
             @content={{this.allGroups}}
             @value={{this.buffered.groupIds}}
             @labelProperty="name"
-            @onChange={{action (mut this.buffered.groupIds)}}
+            @onChange={{fn (mut this.buffered.groupIds)}}
           />
         </div>
       {{/if}}
@@ -165,7 +165,7 @@
             @customShortcuts={{this.timeShortcuts}}
             @clearable={{true}}
             @input={{this.buffered.expires_at}}
-            @onChangeInput={{action (mut this.buffered.expires_at)}}
+            @onChangeInput={{fn (mut this.buffered.expires_at)}}
           />
         </div>
       {{else}}
diff --git a/app/assets/javascripts/discourse/app/components/modal/edit-slow-mode.hbs b/app/assets/javascripts/discourse/app/components/modal/edit-slow-mode.hbs
index 4a550bc5c5d..37cef7961dc 100644
--- a/app/assets/javascripts/discourse/app/components/modal/edit-slow-mode.hbs
+++ b/app/assets/javascripts/discourse/app/components/modal/edit-slow-mode.hbs
@@ -46,7 +46,7 @@
         @customShortcuts={{this.timeShortcuts}}
         @clearable={{true}}
         @input={{@model.topic.slow_mode_enabled_until}}
-        @onChangeInput={{action (mut @model.topic.slow_mode_enabled_until)}}
+        @onChangeInput={{fn (mut @model.topic.slow_mode_enabled_until)}}
       />
     </div>
   </:body>
diff --git a/app/assets/javascripts/discourse/app/components/modal/grant-badge.hbs b/app/assets/javascripts/discourse/app/components/modal/grant-badge.hbs
index 74dd62818a4..19f5d62fa37 100644
--- a/app/assets/javascripts/discourse/app/components/modal/grant-badge.hbs
+++ b/app/assets/javascripts/discourse/app/components/modal/grant-badge.hbs
@@ -16,7 +16,7 @@
           <ComboBox
             @value={{this.selectedBadgeId}}
             @content={{this.availableBadges}}
-            @onChange={{action (mut this.selectedBadgeId)}}
+            @onChange={{fn (mut this.selectedBadgeId)}}
             @options={{hash filterable=true none="badges.none"}}
           />
         </p>
diff --git a/app/assets/javascripts/discourse/app/components/modal/ignore-duration-with-username.hbs b/app/assets/javascripts/discourse/app/components/modal/ignore-duration-with-username.hbs
index 1a2944572e3..88bbbf9dbdc 100644
--- a/app/assets/javascripts/discourse/app/components/modal/ignore-duration-with-username.hbs
+++ b/app/assets/javascripts/discourse/app/components/modal/ignore-duration-with-username.hbs
@@ -22,7 +22,7 @@
       @input={{readonly this.ignoredUntil}}
       @customShortcuts={{this.timeShortcuts}}
       @includeDateTime={{false}}
-      @onChangeInput={{action (mut this.ignoredUntil)}}
+      @onChangeInput={{fn (mut this.ignoredUntil)}}
     />
     <p>{{i18n "user.user_notifications.ignore_duration_note"}}</p>
   </:body>
diff --git a/app/assets/javascripts/discourse/app/components/modal/move-to-topic.hbs b/app/assets/javascripts/discourse/app/components/modal/move-to-topic.hbs
index e6afc45051a..dfa45cff9de 100644
--- a/app/assets/javascripts/discourse/app/components/modal/move-to-topic.hbs
+++ b/app/assets/javascripts/discourse/app/components/modal/move-to-topic.hbs
@@ -77,7 +77,7 @@
           <EmailGroupUserChooser
             class="participant-selector"
             @value={{this.participants}}
-            @onChange={{action (mut this.participants)}}
+            @onChange={{fn (mut this.participants)}}
           />
 
           {{#if this.selectedTopicId}}
@@ -190,7 +190,7 @@
               <CategoryChooser
                 @value={{this.categoryId}}
                 class="small"
-                @onChange={{action (mut this.categoryId)}}
+                @onChange={{fn (mut this.categoryId)}}
               />
               <PluginOutlet
                 @name="split-new-topic-category-after"
diff --git a/app/assets/javascripts/discourse/app/components/modal/revise-and-reject-post-reviewable.hbs b/app/assets/javascripts/discourse/app/components/modal/revise-and-reject-post-reviewable.hbs
index 9a93156c556..ad4593f9e4b 100644
--- a/app/assets/javascripts/discourse/app/components/modal/revise-and-reject-post-reviewable.hbs
+++ b/app/assets/javascripts/discourse/app/components/modal/revise-and-reject-post-reviewable.hbs
@@ -16,7 +16,7 @@
         @name="reason"
         @content={{this.configuredReasons}}
         @value={{this.reason}}
-        @onChange={{action (mut this.reason)}}
+        @onChange={{fn (mut this.reason)}}
         class="revise-and-reject-reviewable__reason"
       />
     </div>
@@ -46,7 +46,7 @@
       <DTextarea
         @name="feedback"
         @value={{this.feedback}}
-        @onChange={{action (mut this.feedback)}}
+        @onChange={{fn (mut this.feedback)}}
         class="revise-and-reject-reviewable__feedback"
       />
     </div>
diff --git a/app/assets/javascripts/discourse/app/components/sidebar/section-form-link.hbs b/app/assets/javascripts/discourse/app/components/sidebar/section-form-link.hbs
index e1617aca043..ffcd0a7e267 100644
--- a/app/assets/javascripts/discourse/app/components/sidebar/section-form-link.hbs
+++ b/app/assets/javascripts/discourse/app/components/sidebar/section-form-link.hbs
@@ -31,7 +31,7 @@
       }}
       class={{@link.iconCssClass}}
       @onlyAvailable={{true}}
-      @onChange={{action (mut @link.icon)}}
+      @onChange={{fn (mut @link.icon)}}
       ariaLabel={{i18n "sidebar.sections.custom.links.icon.label"}}
     />
     {{#if @link.invalidIconMessage}}
diff --git a/app/assets/javascripts/discourse/app/components/time-shortcut-picker.hbs b/app/assets/javascripts/discourse/app/components/time-shortcut-picker.hbs
index 542408a9d51..c4ad735e694 100644
--- a/app/assets/javascripts/discourse/app/components/time-shortcut-picker.hbs
+++ b/app/assets/javascripts/discourse/app/components/time-shortcut-picker.hbs
@@ -20,7 +20,7 @@
             <DatePickerFuture
               @value={{this.customDate}}
               @defaultDate={{this.defaultCustomDate}}
-              @onSelect={{action (mut this.customDate)}}
+              @onSelect={{fn (mut this.customDate)}}
               @id="custom-date"
             />
           </div>
diff --git a/app/assets/javascripts/discourse/app/components/user-fields/dropdown.hbs b/app/assets/javascripts/discourse/app/components/user-fields/dropdown.hbs
index 7a886699814..dd6d3ad493a 100644
--- a/app/assets/javascripts/discourse/app/components/user-fields/dropdown.hbs
+++ b/app/assets/javascripts/discourse/app/components/user-fields/dropdown.hbs
@@ -15,7 +15,7 @@
     @valueProperty={{null}}
     @nameProperty={{null}}
     @value={{this.value}}
-    @onChange={{action (mut this.value)}}
+    @onChange={{fn (mut this.value)}}
     @options={{hash none=this.noneLabel}}
   />
   <div class="instructions">{{html-safe this.field.description}}</div>
diff --git a/app/assets/javascripts/discourse/app/components/user-fields/multiselect.hbs b/app/assets/javascripts/discourse/app/components/user-fields/multiselect.hbs
index 60748859626..41cf8a8f581 100644
--- a/app/assets/javascripts/discourse/app/components/user-fields/multiselect.hbs
+++ b/app/assets/javascripts/discourse/app/components/user-fields/multiselect.hbs
@@ -15,7 +15,7 @@
     @valueProperty={{null}}
     @nameProperty={{null}}
     @value={{this.value}}
-    @onChange={{action (mut this.value)}}
+    @onChange={{fn (mut this.value)}}
     @options={{hash none=this.noneLabel}}
   />
   <div class="instructions">{{html-safe this.field.description}}</div>
diff --git a/app/assets/javascripts/discourse/app/components/user-preferences/categories.hbs b/app/assets/javascripts/discourse/app/components/user-preferences/categories.hbs
index 74160c9b62c..dc02ee527e8 100644
--- a/app/assets/javascripts/discourse/app/components/user-preferences/categories.hbs
+++ b/app/assets/javascripts/discourse/app/components/user-preferences/categories.hbs
@@ -11,7 +11,7 @@
     <CategorySelector
       @categories={{@model.watchedCategories}}
       @blockedCategories={{@selectedCategories}}
-      @onChange={{action (mut @model.watchedCategories)}}
+      @onChange={{fn (mut @model.watchedCategories)}}
     />
   </div>
   <div class="instructions">{{i18n
@@ -28,7 +28,7 @@
     <CategorySelector
       @categories={{@model.trackedCategories}}
       @blockedCategories={{@selectedCategories}}
-      @onChange={{action (mut @model.trackedCategories)}}
+      @onChange={{fn (mut @model.trackedCategories)}}
     />
   </div>
   <div class="instructions">{{i18n
@@ -43,7 +43,7 @@
     <CategorySelector
       @categories={{@model.watchedFirstPostCategories}}
       @blockedCategories={{@selectedCategories}}
-      @onChange={{action (mut @model.watchedFirstPostCategories)}}
+      @onChange={{fn (mut @model.watchedFirstPostCategories)}}
     />
   </div>
   <div class="instructions">{{i18n
@@ -58,7 +58,7 @@
       <CategorySelector
         @categories={{@model.regularCategories}}
         @blockedCategories={{@selectedCategories}}
-        @onChange={{action (mut @model.regularCategories)}}
+        @onChange={{fn (mut @model.regularCategories)}}
       />
     </div>
     <div class="instructions">{{i18n
@@ -77,7 +77,7 @@
       <CategorySelector
         @categories={{@model.mutedCategories}}
         @blockedCategories={{@selectedCategories}}
-        @onChange={{action (mut @model.mutedCategories)}}
+        @onChange={{fn (mut @model.mutedCategories)}}
       />
     </div>
 
diff --git a/app/assets/javascripts/discourse/app/components/user-preferences/topic-tracking.hbs b/app/assets/javascripts/discourse/app/components/user-preferences/topic-tracking.hbs
index c80cd204796..7fcc1ae5a52 100644
--- a/app/assets/javascripts/discourse/app/components/user-preferences/topic-tracking.hbs
+++ b/app/assets/javascripts/discourse/app/components/user-preferences/topic-tracking.hbs
@@ -5,7 +5,7 @@
       @valueProperty="value"
       @content={{@considerNewTopicOptions}}
       @value={{@model.user_option.new_topic_duration_minutes}}
-      @onChange={{action (mut @model.user_option.new_topic_duration_minutes)}}
+      @onChange={{fn (mut @model.user_option.new_topic_duration_minutes)}}
       class="duration"
     />
   </div>
diff --git a/app/assets/javascripts/discourse/app/templates/full-page-search.hbs b/app/assets/javascripts/discourse/app/templates/full-page-search.hbs
index d8d8527554b..693d9aff83d 100644
--- a/app/assets/javascripts/discourse/app/templates/full-page-search.hbs
+++ b/app/assets/javascripts/discourse/app/templates/full-page-search.hbs
@@ -34,7 +34,7 @@
         @id="search-type"
         @value={{this.search_type}}
         @content={{this.searchTypes}}
-        @onChange={{action (mut this.search_type)}}
+        @onChange={{fn (mut this.search_type)}}
         @options={{hash castInteger=true}}
       />
       <DButton
@@ -64,7 +64,7 @@
       <div class="search-filters">
         <SearchAdvancedOptions
           @searchTerm={{readonly this.searchTerm}}
-          @onChangeSearchTerm={{action (mut this.searchTerm)}}
+          @onChangeSearchTerm={{fn (mut this.searchTerm)}}
           @search={{action "search" (hash collapseFilters=true)}}
           @searchButtonDisabled={{this.searchButtonDisabled}}
           @expandFilters={{this.expandFilters}}
diff --git a/app/assets/javascripts/discourse/app/templates/group/manage/categories.hbs b/app/assets/javascripts/discourse/app/templates/group/manage/categories.hbs
index 351e7acfa82..6000e120379 100644
--- a/app/assets/javascripts/discourse/app/templates/group/manage/categories.hbs
+++ b/app/assets/javascripts/discourse/app/templates/group/manage/categories.hbs
@@ -13,7 +13,7 @@
     <CategorySelector
       @categories={{this.model.watchingCategories}}
       @blockedCategories={{this.selectedCategories}}
-      @onChange={{action (mut this.model.watchingCategories)}}
+      @onChange={{fn (mut this.model.watchingCategories)}}
     />
 
     <div class="control-instructions">
@@ -28,7 +28,7 @@
     <CategorySelector
       @categories={{this.model.trackingCategories}}
       @blockedCategories={{this.selectedCategories}}
-      @onChange={{action (mut this.model.trackingCategories)}}
+      @onChange={{fn (mut this.model.trackingCategories)}}
     />
 
     <div class="control-instructions">
@@ -43,7 +43,7 @@
     <CategorySelector
       @categories={{this.model.watchingFirstPostCategories}}
       @blockedCategories={{this.selectedCategories}}
-      @onChange={{action (mut this.model.watchingFirstPostCategories)}}
+      @onChange={{fn (mut this.model.watchingFirstPostCategories)}}
     />
 
     <div class="control-instructions">
@@ -60,7 +60,7 @@
     <CategorySelector
       @categories={{this.model.regularCategories}}
       @blockedCategories={{this.selectedCategories}}
-      @onChange={{action (mut this.model.regularCategories)}}
+      @onChange={{fn (mut this.model.regularCategories)}}
     />
 
     <div class="control-instructions">
@@ -75,7 +75,7 @@
     <CategorySelector
       @categories={{this.model.mutedCategories}}
       @blockedCategories={{this.selectedCategories}}
-      @onChange={{action (mut this.model.mutedCategories)}}
+      @onChange={{fn (mut this.model.mutedCategories)}}
     />
 
     <div class="control-instructions">
diff --git a/app/assets/javascripts/discourse/app/templates/groups/index.hbs b/app/assets/javascripts/discourse/app/templates/groups/index.hbs
index fe1af8e43ce..c09bd5a84fb 100644
--- a/app/assets/javascripts/discourse/app/templates/groups/index.hbs
+++ b/app/assets/javascripts/discourse/app/templates/groups/index.hbs
@@ -30,7 +30,7 @@
       <ComboBox
         @value={{this.type}}
         @content={{this.types}}
-        @onChange={{action (mut this.type)}}
+        @onChange={{fn (mut this.type)}}
         @options={{hash clearable=true none="groups.index.filter"}}
         class="groups-header-filters-type"
       />
diff --git a/app/assets/javascripts/discourse/app/templates/preferences/account.hbs b/app/assets/javascripts/discourse/app/templates/preferences/account.hbs
index 72a805ab92d..8258a102309 100644
--- a/app/assets/javascripts/discourse/app/templates/preferences/account.hbs
+++ b/app/assets/javascripts/discourse/app/templates/preferences/account.hbs
@@ -212,7 +212,7 @@
       <ComboBox
         @value={{this.newTitleInput}}
         @content={{this.model.availableTitles}}
-        @onChange={{action (mut this.newTitleInput)}}
+        @onChange={{fn (mut this.newTitleInput)}}
         @options={{hash none="user.title.none"}}
       />
     </div>
@@ -229,7 +229,7 @@
       <FlairChooser
         @value={{this.newFlairGroupId}}
         @content={{this.model.availableFlairs}}
-        @onChange={{action (mut this.newFlairGroupId)}}
+        @onChange={{fn (mut this.newFlairGroupId)}}
         @options={{hash none="user.flair.none"}}
       />
     </div>
diff --git a/app/assets/javascripts/discourse/app/templates/preferences/emails.hbs b/app/assets/javascripts/discourse/app/templates/preferences/emails.hbs
index 08cd30b2a1f..e2a29e7694b 100644
--- a/app/assets/javascripts/discourse/app/templates/preferences/emails.hbs
+++ b/app/assets/javascripts/discourse/app/templates/preferences/emails.hbs
@@ -20,7 +20,7 @@
       @content={{this.emailLevelOptions}}
       @value={{this.model.user_option.email_messages_level}}
       @id="user-email-messages-level"
-      @onChange={{action (mut this.model.user_option.email_messages_level)}}
+      @onChange={{fn (mut this.model.user_option.email_messages_level)}}
     />
     {{#if this.emailMessagesLevelAway}}
       <div class="instructions">{{this.emailFrequencyInstructions}}</div>
@@ -34,7 +34,7 @@
       @content={{this.emailLevelOptions}}
       @value={{this.model.user_option.email_level}}
       @id="user-email-level"
-      @onChange={{action (mut this.model.user_option.email_level)}}
+      @onChange={{fn (mut this.model.user_option.email_level)}}
     />
     {{#if this.emailLevelAway}}
       <div class="instructions">{{this.emailFrequencyInstructions}}</div>
@@ -50,7 +50,7 @@
       @valueProperty="value"
       @content={{this.previousRepliesOptions}}
       @value={{this.model.user_option.email_previous_replies}}
-      @onChange={{action (mut this.model.user_option.email_previous_replies)}}
+      @onChange={{fn (mut this.model.user_option.email_previous_replies)}}
     />
   </div>
   <PreferenceCheckbox
@@ -86,7 +86,7 @@
           @valueProperty="value"
           @content={{this.digestFrequencies}}
           @value={{this.model.user_option.digest_after_minutes}}
-          @onChange={{action (mut this.model.user_option.digest_after_minutes)}}
+          @onChange={{fn (mut this.model.user_option.digest_after_minutes)}}
           @options={{hash filterable=true}}
         />
       </div>
diff --git a/app/assets/javascripts/discourse/app/templates/preferences/interface.hbs b/app/assets/javascripts/discourse/app/templates/preferences/interface.hbs
index b262a4f2987..b237b879190 100644
--- a/app/assets/javascripts/discourse/app/templates/preferences/interface.hbs
+++ b/app/assets/javascripts/discourse/app/templates/preferences/interface.hbs
@@ -139,7 +139,7 @@
         @langProperty="value"
         @content={{this.availableLocales}}
         @value={{this.model.locale}}
-        @onChange={{action (mut this.model.locale)}}
+        @onChange={{fn (mut this.model.locale)}}
         @options={{hash filterable=true none="user.locale.default"}}
       />
     </div>
@@ -157,7 +157,7 @@
       @content={{this.userSelectableHome}}
       @valueProperty="value"
       @value={{this.homepageId}}
-      @onChange={{action (mut this.model.user_option.homepage_id)}}
+      @onChange={{fn (mut this.model.user_option.homepage_id)}}
     />
   </div>
 </div>
@@ -217,7 +217,7 @@
       @content={{this.titleCountModes}}
       @value={{this.model.user_option.title_count_mode}}
       @id="user-title-count-mode"
-      @onChange={{action (mut this.model.user_option.title_count_mode)}}
+      @onChange={{fn (mut this.model.user_option.title_count_mode)}}
     />
   </div>
   <div
diff --git a/app/assets/javascripts/discourse/app/templates/preferences/profile.hbs b/app/assets/javascripts/discourse/app/templates/preferences/profile.hbs
index 0d445501bcb..2317cf9726c 100644
--- a/app/assets/javascripts/discourse/app/templates/preferences/profile.hbs
+++ b/app/assets/javascripts/discourse/app/templates/preferences/profile.hbs
@@ -11,7 +11,7 @@
   <label class="control-label">{{i18n "user.timezone"}}</label>
   <TimezoneInput
     @value={{this.model.user_option.timezone}}
-    @onChange={{action (mut this.model.user_option.timezone)}}
+    @onChange={{fn (mut this.model.user_option.timezone)}}
     class="input-xxlarge"
   />
   <DButton
@@ -149,7 +149,7 @@
         @content={{this.calendarOptions}}
         @value={{this.model.user_option.default_calendar}}
         @id="user-default-calendar"
-        @onChange={{action (mut this.model.user_option.default_calendar)}}
+        @onChange={{fn (mut this.model.user_option.default_calendar)}}
       />
     </div>
     <div class="instructions">
diff --git a/app/assets/javascripts/discourse/app/templates/review-index.hbs b/app/assets/javascripts/discourse/app/templates/review-index.hbs
index 314b79d2f56..71e62189372 100644
--- a/app/assets/javascripts/discourse/app/templates/review-index.hbs
+++ b/app/assets/javascripts/discourse/app/templates/review-index.hbs
@@ -24,7 +24,7 @@
       <ComboBox
         @value={{this.filterStatus}}
         @content={{this.statuses}}
-        @onChange={{action (mut this.filterStatus)}}
+        @onChange={{fn (mut this.filterStatus)}}
       />
     </div>
 
@@ -48,7 +48,7 @@
         <ComboBox
           @value={{this.filterType}}
           @content={{this.allTypes}}
-          @onChange={{action (mut this.filterType)}}
+          @onChange={{fn (mut this.filterType)}}
           @options={{hash none="review.filters.type.all"}}
         />
       </div>
@@ -60,7 +60,7 @@
         <ComboBox
           @value={{this.filterPriority}}
           @content={{this.priorities}}
-          @onChange={{action (mut this.filterPriority)}}
+          @onChange={{fn (mut this.filterPriority)}}
         />
       </div>
 
@@ -70,7 +70,7 @@
         </label>
         <CategoryChooser
           @value={{this.filterCategoryId}}
-          @onChange={{action (mut this.filterCategoryId)}}
+          @onChange={{fn (mut this.filterCategoryId)}}
           @options={{hash none="review.filters.all_categories"}}
         />
       </div>
@@ -140,7 +140,7 @@
         <ComboBox
           @value={{this.filterSortOrder}}
           @content={{this.sortOrders}}
-          @onChange={{action (mut this.filterSortOrder)}}
+          @onChange={{fn (mut this.filterSortOrder)}}
         />
       </div>
     {{/if}}
diff --git a/app/assets/javascripts/discourse/app/templates/review-settings.hbs b/app/assets/javascripts/discourse/app/templates/review-settings.hbs
index c8525d71366..e31ced4b0fd 100644
--- a/app/assets/javascripts/discourse/app/templates/review-settings.hbs
+++ b/app/assets/javascripts/discourse/app/templates/review-settings.hbs
@@ -8,7 +8,7 @@
         <ComboBox
           @value={{rst.reviewable_priority}}
           @content={{this.settings.reviewable_priorities}}
-          @onChange={{action (mut rst.reviewable_priority)}}
+          @onChange={{fn (mut rst.reviewable_priority)}}
         />
       </div>
     </div>
diff --git a/app/assets/javascripts/discourse/app/templates/users.hbs b/app/assets/javascripts/discourse/app/templates/users.hbs
index e5c0aa2dc97..e33ce513876 100644
--- a/app/assets/javascripts/discourse/app/templates/users.hbs
+++ b/app/assets/javascripts/discourse/app/templates/users.hbs
@@ -21,7 +21,7 @@
           <div class="period-controls">
             <PeriodChooser
               @period={{this.period}}
-              @onChange={{action (mut this.period)}}
+              @onChange={{fn (mut this.period)}}
               @fullDay={{false}}
             />
             {{#if this.lastUpdatedAt}}
diff --git a/app/assets/javascripts/discourse/tests/integration/components/date-time-input-range-test.js b/app/assets/javascripts/discourse/tests/integration/components/date-time-input-range-test.js
index a8ef3ff1233..6112ecdc186 100644
--- a/app/assets/javascripts/discourse/tests/integration/components/date-time-input-range-test.js
+++ b/app/assets/javascripts/discourse/tests/integration/components/date-time-input-range-test.js
@@ -31,7 +31,7 @@ module("Integration | Component | date-time-input-range", function (hooks) {
     this.setProperties({ state: { from: DEFAULT_DATE_TIME, to: null } });
 
     await render(
-      hbs`<DateTimeInputRange @from={{this.state.from}} @to={{this.state.to}} @onChange={{action (mut this.state)}} />`
+      hbs`<DateTimeInputRange @from={{this.state.from}} @to={{this.state.to}} @onChange={{fn (mut this.state)}} />`
     );
 
     assert.strictEqual(fromDateInput().value, "2019-01-29");
@@ -58,7 +58,7 @@ module("Integration | Component | date-time-input-range", function (hooks) {
     this.setProperties({ state: { from: DEFAULT_DATE_TIME, to: null } });
 
     await render(
-      hbs`<DateTimeInputRange @from={{this.state.from}} @to={{this.state.to}} @relativeDate={{this.state.from}} @onChange={{action (mut this.state)}} />`
+      hbs`<DateTimeInputRange @from={{this.state.from}} @to={{this.state.to}} @relativeDate={{this.state.from}} @onChange={{fn (mut this.state)}} />`
     );
 
     await fillIn(toDateInput(), "2019-01-29");
@@ -78,7 +78,7 @@ module("Integration | Component | date-time-input-range", function (hooks) {
     });
 
     await render(
-      hbs`<DateTimeInputRange @from={{this.state.from}} @to={{this.state.to}} @onChange={{action (mut this.state)}} @timezone="Europe/Paris" />`
+      hbs`<DateTimeInputRange @from={{this.state.from}} @to={{this.state.to}} @onChange={{fn (mut this.state)}} @timezone="Europe/Paris" />`
     );
 
     assert.strictEqual(fromDateInput().value, "2019-01-29");
diff --git a/app/assets/javascripts/discourse/tests/integration/components/select-kit/future-date-input-test.js b/app/assets/javascripts/discourse/tests/integration/components/select-kit/future-date-input-test.js
index e2a132c1b7f..d02b0ab7e4f 100644
--- a/app/assets/javascripts/discourse/tests/integration/components/select-kit/future-date-input-test.js
+++ b/app/assets/javascripts/discourse/tests/integration/components/select-kit/future-date-input-test.js
@@ -129,7 +129,7 @@ module(
       this.set("input", moment("2032-01-01 11:10"));
 
       await render(
-        hbs`<FutureDateInput @input={{this.input}} @onChangeInput={{action (mut this.input)}} />`
+        hbs`<FutureDateInput @input={{this.input}} @onChangeInput={{fn (mut this.input)}} />`
       );
 
       await fillIn(".time-input", "11:15");
diff --git a/plugins/chat/assets/javascripts/discourse/components/chat-to-topic-selector.hbs b/plugins/chat/assets/javascripts/discourse/components/chat-to-topic-selector.hbs
index e2274e23a90..1af269814f7 100644
--- a/plugins/chat/assets/javascripts/discourse/components/chat-to-topic-selector.hbs
+++ b/plugins/chat/assets/javascripts/discourse/components/chat-to-topic-selector.hbs
@@ -52,7 +52,7 @@
       <CategoryChooser
         @id="new-topic-category-selector"
         @value={{this.categoryId}}
-        @onChange={{action (mut this.categoryId)}}
+        @onChange={{fn (mut this.categoryId)}}
         class="small"
       />
 
diff --git a/plugins/chat/assets/javascripts/discourse/templates/admin-plugins-chat.hbs b/plugins/chat/assets/javascripts/discourse/templates/admin-plugins-chat.hbs
index a7f3a9a2dd1..e20a13b0b61 100644
--- a/plugins/chat/assets/javascripts/discourse/templates/admin-plugins-chat.hbs
+++ b/plugins/chat/assets/javascripts/discourse/templates/admin-plugins-chat.hbs
@@ -70,7 +70,7 @@
         @isActive={{this.emojiPickerIsActive}}
         @isEditorFocused={{true}}
         @emojiSelected={{action "emojiSelected"}}
-        @onEmojiPickerClose={{action (mut this.emojiPickerIsActive) false}}
+        @onEmojiPickerClose={{fn (mut this.emojiPickerIsActive) false}}
       />
 
       {{#unless this.emojiPickerIsActive}}
@@ -121,7 +121,7 @@
       <ChatChannelChooser
         @content={{this.model.chat_channels}}
         @value={{this.newWebhookChannelId}}
-        @onChange={{action (mut this.newWebhookChannelId)}}
+        @onChange={{fn (mut this.newWebhookChannelId)}}
       />
       <DButton
         @label="chat.create"
diff --git a/plugins/chat/assets/javascripts/discourse/templates/preferences/chat.hbs b/plugins/chat/assets/javascripts/discourse/templates/preferences/chat.hbs
index b90fe1b44b8..f5a81b228e0 100644
--- a/plugins/chat/assets/javascripts/discourse/templates/preferences/chat.hbs
+++ b/plugins/chat/assets/javascripts/discourse/templates/preferences/chat.hbs
@@ -72,7 +72,7 @@
     @content={{this.emailFrequencyOptions}}
     @value={{this.model.user_option.chat_email_frequency}}
     @id="user_chat_email_frequency"
-    @onChange={{action (mut this.model.user_option.chat_email_frequency)}}
+    @onChange={{fn (mut this.model.user_option.chat_email_frequency)}}
   />
   {{#if (eq this.model.user_option.chat_email_frequency "when_away")}}
     <div class="control-instructions">
@@ -112,7 +112,7 @@
     @content={{this.chatSeparateSidebarModeOptions}}
     @value={{this.chatSeparateSidebarMode}}
     @id="user_chat_separate_sidebar_mode"
-    @onChange={{action (mut this.model.user_option.chat_separate_sidebar_mode)}}
+    @onChange={{fn (mut this.model.user_option.chat_separate_sidebar_mode)}}
   />
 </div>
 
diff --git a/plugins/discourse-local-dates/assets/javascripts/discourse/components/modal/local-dates-create.hbs b/plugins/discourse-local-dates/assets/javascripts/discourse/components/modal/local-dates-create.hbs
index 235c3015d2a..f0c7c19b7a5 100644
--- a/plugins/discourse-local-dates/assets/javascripts/discourse/components/modal/local-dates-create.hbs
+++ b/plugins/discourse-local-dates/assets/javascripts/discourse/components/modal/local-dates-create.hbs
@@ -61,7 +61,7 @@
             <TimezoneInput
               @options={{hash icon="globe"}}
               @value={{this.timezone}}
-              @onChange={{action (mut this.timezone)}}
+              @onChange={{fn (mut this.timezone)}}
             />
           {{/unless}}
         </div>
@@ -83,7 +83,7 @@
           <TimezoneInput
             @value={{this.timezone}}
             @options={{hash icon="globe"}}
-            @onChange={{action (mut this.timezone)}}
+            @onChange={{fn (mut this.timezone)}}
           />
         {{/if}}
       </div>
@@ -104,7 +104,7 @@
                 <ComboBox
                   @content={{this.recurringOptions}}
                   @value={{this.recurring}}
-                  @onChange={{action (mut this.recurring)}}
+                  @onChange={{fn (mut this.recurring)}}
                   @options={{hash
                     none="discourse_local_dates.create.form.recurring_none"
                   }}
diff --git a/plugins/poll/assets/javascripts/discourse/components/modal/poll-ui-builder.hbs b/plugins/poll/assets/javascripts/discourse/components/modal/poll-ui-builder.hbs
index 77a10334a8d..6fe2a959506 100644
--- a/plugins/poll/assets/javascripts/discourse/components/modal/poll-ui-builder.hbs
+++ b/plugins/poll/assets/javascripts/discourse/components/modal/poll-ui-builder.hbs
@@ -162,7 +162,7 @@
         <GroupChooser
           @content={{this.siteGroups}}
           @value={{this.pollGroups}}
-          @onChange={{action (mut this.pollGroups)}}
+          @onChange={{fn (mut this.pollGroups)}}
           @labelProperty="name"
           @valueProperty="name"
         />
@@ -174,7 +174,7 @@
           }}</label>
         <DateTimeInput
           @date={{this.pollAutoClose}}
-          @onChange={{action (mut this.pollAutoClose)}}
+          @onChange={{fn (mut this.pollAutoClose)}}
           @clearable={{true}}
           @useGlobalPickerContainer={{true}}
         />
@@ -188,7 +188,7 @@
           @content={{this.pollResults}}
           @value={{this.pollResult}}
           @valueProperty="value"
-          @onChange={{action (mut this.pollResult)}}
+          @onChange={{fn (mut this.pollResult)}}
           class="poll-result"
         />
       </div>
diff --git a/plugins/styleguide/assets/javascripts/discourse/components/sections/molecules/toasts.hbs b/plugins/styleguide/assets/javascripts/discourse/components/sections/molecules/toasts.hbs
index 8664fec2b85..5ccec27b466 100644
--- a/plugins/styleguide/assets/javascripts/discourse/components/sections/molecules/toasts.hbs
+++ b/plugins/styleguide/assets/javascripts/discourse/components/sections/molecules/toasts.hbs
@@ -83,7 +83,7 @@
         @name="icon"
         @value={{this.icon}}
         @options={{hash maximum=1}}
-        @onChange={{action (mut this.icon)}}
+        @onChange={{fn (mut this.icon)}}
       />
     </Styleguide::Controls::Row>
     <Styleguide::Controls::Row @name="With an action">