From 3507a7dd986683e8e41579250072f82fc3bb27ab Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Fri, 5 Apr 2024 18:46:08 +0200 Subject: [PATCH] FIX: correctly refresh UI when changing group preference (#560) Prior to this fix the state change was not reflected in the UI when changing the "who can assign" preference of a group. This was actually saved in the backend but would require a full page refresh to see the updated state on the group preferences page. --- .../assignable-interaction-fields.hbs | 2 +- .../assignable-interaction-fields.js | 8 +++++- spec/system/group_preferences_spec.rb | 28 +++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 spec/system/group_preferences_spec.rb diff --git a/assets/javascripts/discourse/connectors/groups-interaction-custom-options/assignable-interaction-fields.hbs b/assets/javascripts/discourse/connectors/groups-interaction-custom-options/assignable-interaction-fields.hbs index 0b04050..cc44f1f 100644 --- a/assets/javascripts/discourse/connectors/groups-interaction-custom-options/assignable-interaction-fields.hbs +++ b/assets/javascripts/discourse/connectors/groups-interaction-custom-options/assignable-interaction-fields.hbs @@ -14,7 +14,7 @@ @valueProperty="value" @value={{this.assignableLevel}} @content={{this.assignableLevelOptions}} - @onChange={{action (mut @outletArgs.model.assignable_level)}} + @onChange={{this.onChangeAssignableLevel}} class="groups-form-assignable-level" /> \ No newline at end of file diff --git a/assets/javascripts/discourse/connectors/groups-interaction-custom-options/assignable-interaction-fields.js b/assets/javascripts/discourse/connectors/groups-interaction-custom-options/assignable-interaction-fields.js index d565081..1001ada 100644 --- a/assets/javascripts/discourse/connectors/groups-interaction-custom-options/assignable-interaction-fields.js +++ b/assets/javascripts/discourse/connectors/groups-interaction-custom-options/assignable-interaction-fields.js @@ -1,4 +1,5 @@ import Component from "@glimmer/component"; +import { action } from "@ember/object"; import I18n from "I18n"; export default class AssignableInteractionFields extends Component { @@ -12,6 +13,11 @@ export default class AssignableInteractionFields extends Component { ]; get assignableLevel() { - return this.args.outletArgs.model.assignable_level || 0; + return this.args.outletArgs.model.get("assignable_level") || 0; + } + + @action + onChangeAssignableLevel(level) { + this.args.outletArgs.model.set("assignable_level", level); } } diff --git a/spec/system/group_preferences_spec.rb b/spec/system/group_preferences_spec.rb new file mode 100644 index 0000000..99d5ff9 --- /dev/null +++ b/spec/system/group_preferences_spec.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +RSpec.describe "Assign | Group Preferences", type: :system, js: true do + fab!(:admin) + fab!(:group) + + before do + SiteSetting.assign_enabled = true + sign_in(admin) + end + + it "allows to change who can assign a group" do + visit "/g/#{group.name}/manage/interaction" + select_kit = PageObjects::Components::SelectKit.new(".groups-form-assignable-level") + + expect(select_kit).to have_selected_value(0) + + select_kit.expand + select_kit.select_row_by_value(99) + + expect(select_kit).to have_selected_value(99) + + page.find(".group-manage-save").click + visit "/g/#{group.name}/manage/interaction" + + expect(select_kit).to have_selected_value(99) + end +end