diff --git a/assets/javascripts/discourse/connectors/reviewable-note-form-after-note/copy-reviewable-note-to-user-option.gjs b/assets/javascripts/discourse/connectors/reviewable-note-form-after-note/copy-reviewable-note-to-user-option.gjs new file mode 100644 index 0000000..e7b874f --- /dev/null +++ b/assets/javascripts/discourse/connectors/reviewable-note-form-after-note/copy-reviewable-note-to-user-option.gjs @@ -0,0 +1,23 @@ +import Component from "@glimmer/component"; +import { i18n } from "discourse-i18n"; + +export default class CopyReviewableNoteToUserOption extends Component { + static shouldRender(args, context) { + return ( + context.siteSettings.user_notes_enabled && context.currentUser?.staff + ); + } + + +} diff --git a/assets/javascripts/discourse/initializers/enable-user-notes.gjs b/assets/javascripts/discourse/initializers/enable-user-notes.gjs index 94ee7d3..4cf11df 100644 --- a/assets/javascripts/discourse/initializers/enable-user-notes.gjs +++ b/assets/javascripts/discourse/initializers/enable-user-notes.gjs @@ -1,4 +1,6 @@ import Component from "@glimmer/component"; +import { ajax } from "discourse/lib/ajax"; +import { popupAjaxError } from "discourse/lib/ajax-error"; import { withSilencedDeprecations } from "discourse/lib/deprecated"; import { iconNode } from "discourse/lib/icon-library"; import { withPluginApi } from "discourse/lib/plugin-api"; @@ -22,6 +24,7 @@ export default { withPluginApi((api) => { customizePost(api, container); customizePostMenu(api, container); + handleReviewableNoteCreation(api); }); }, }; @@ -192,3 +195,35 @@ function customizePostMenu(api, container) { }; }); } + +/** + * Optionally creates a user note when a reviewable note is created. + * + * @param {Object} api - Plugin API instance + */ +function handleReviewableNoteCreation(api) { + api.onAppEvent( + "reviewablenote:created", + async (data, reviewable, formApi) => { + if (!data.copy_note_to_user || !reviewable.target_created_by) { + return; + } + + try { + await ajax("/user_notes", { + type: "POST", + data: { + user_note: { + user_id: reviewable.target_created_by.id, + raw: data.content.trim(), + }, + }, + }); + + formApi.set("copy_note_to_user", false); + } catch (error) { + popupAjaxError(error); + } + } + ); +} diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 7aef5e5..23171da 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -7,3 +7,4 @@ en: show: "User Notes (%{count})" delete_confirm: "Are you sure you want to delete that user note?" show_post: "Show Post" + copy_reviewable_note: "Copy note to user profile?"