From ec65f3c1ad3bca57d30bc8b60acf662581443e68 Mon Sep 17 00:00:00 2001 From: Andrei Prigorshnev Date: Sat, 8 Oct 2022 02:21:53 +0400 Subject: [PATCH] DEV: Pass a status object to the user-status-picker instead of passing emoji + description (#18513) --- .../app/components/user-status-picker.js | 20 ++++--- .../discourse/app/controllers/user-status.js | 29 ++++------ .../components/user-status-picker.hbs | 10 ++-- .../app/templates/modal/user-status.hbs | 2 +- .../components/user-status-picker-test.js | 54 +++++++++++++++++++ 5 files changed, 86 insertions(+), 29 deletions(-) create mode 100644 app/assets/javascripts/discourse/tests/integration/components/user-status-picker-test.js diff --git a/app/assets/javascripts/discourse/app/components/user-status-picker.js b/app/assets/javascripts/discourse/app/components/user-status-picker.js index 691a4e683c3..602f4b1679b 100644 --- a/app/assets/javascripts/discourse/app/components/user-status-picker.js +++ b/app/assets/javascripts/discourse/app/components/user-status-picker.js @@ -8,12 +8,18 @@ export default class UserStatusPicker extends Component { tagName = ""; isFocused = false; emojiPickerIsActive = false; - emoji = null; - description = null; - @computed("emoji") + didInsertElement() { + this._super(...arguments); + + if (!this.status) { + this.set("status", {}); + } + } + + @computed("status.emoji") get emojiHtml() { - const emoji = escapeExpression(`:${this.emoji}:`); + const emoji = escapeExpression(`:${this.status.emoji}:`); return emojiUnescape(emoji); } @@ -24,7 +30,7 @@ export default class UserStatusPicker extends Component { @action emojiSelected(emoji) { - this.set("emoji", emoji); + this.set("status.emoji", emoji); this.set("emojiPickerIsActive", false); scheduleOnce("afterRender", () => { @@ -44,8 +50,8 @@ export default class UserStatusPicker extends Component { @action setDefaultEmoji() { - if (!this.emoji) { - this.set("emoji", "speech_balloon"); + if (!this.status.emoji) { + this.set("status.emoji", "speech_balloon"); } } diff --git a/app/assets/javascripts/discourse/app/controllers/user-status.js b/app/assets/javascripts/discourse/app/controllers/user-status.js index c438ac9c0d2..b4a1bc61f35 100644 --- a/app/assets/javascripts/discourse/app/controllers/user-status.js +++ b/app/assets/javascripts/discourse/app/controllers/user-status.js @@ -12,25 +12,18 @@ import { export default Controller.extend(ModalFunctionality, { userStatusService: service("user-status"), - - emoji: null, - description: null, - endsAt: null, - showDeleteButton: false, prefilledDateTime: null, timeShortcuts: null, _itsatrap: null, onShow() { - const status = this.currentUser.status; + const currentStatus = { ...this.currentUser.status }; this.setProperties({ - emoji: status?.emoji, - description: status?.description, - endsAt: status?.ends_at, - showDeleteButton: !!status, + status: currentStatus, + showDeleteButton: !!this.currentUser.status, timeShortcuts: this._buildTimeShortcuts(), - prefilledDateTime: status?.ends_at, + prefilledDateTime: currentStatus?.ends_at, }); this.set("_itsatrap", new ItsATrap()); @@ -42,7 +35,7 @@ export default Controller.extend(ModalFunctionality, { this.set("timeShortcuts", null); }, - @discourseComputed("emoji", "description") + @discourseComputed("status.emoji", "status.description") statusIsSet(emoji, description) { return !!emoji && !!description; }, @@ -69,18 +62,18 @@ export default Controller.extend(ModalFunctionality, { @action onTimeSelected(_, time) { - this.set("endsAt", time); + this.set("status.endsAt", time); }, @action saveAndClose() { - const status = { - description: this.description, - emoji: this.emoji, - ends_at: this.endsAt?.toISOString(), + const newStatus = { + description: this.status.description, + emoji: this.status.emoji, + ends_at: this.status.endsAt?.toISOString(), }; this.userStatusService - .set(status) + .set(newStatus) .then(() => { this.send("closeModal"); }) diff --git a/app/assets/javascripts/discourse/app/templates/components/user-status-picker.hbs b/app/assets/javascripts/discourse/app/templates/components/user-status-picker.hbs index d1b6d1002d0..4737847fe8d 100644 --- a/app/assets/javascripts/discourse/app/templates/components/user-status-picker.hbs +++ b/app/assets/javascripts/discourse/app/templates/components/user-status-picker.hbs @@ -7,7 +7,7 @@ {{on "focus" this.focus}} {{on "blur" this.blur}} > - {{#if @emoji}} + {{#if @status.emoji}} {{html-safe this.emojiHtml}} {{else}} {{d-icon "discourse-emojis"}} @@ -15,11 +15,15 @@ - + diff --git a/app/assets/javascripts/discourse/app/templates/modal/user-status.hbs b/app/assets/javascripts/discourse/app/templates/modal/user-status.hbs index 95d16a7f192..1d2adb7c5f0 100644 --- a/app/assets/javascripts/discourse/app/templates/modal/user-status.hbs +++ b/app/assets/javascripts/discourse/app/templates/modal/user-status.hbs @@ -1,7 +1,7 @@
- +