diff --git a/app/javascript/react-components/doc.md b/app/javascript/react-components/doc.md index 8fe6a20b4..ce8e940f7 100644 --- a/app/javascript/react-components/doc.md +++ b/app/javascript/react-components/doc.md @@ -134,6 +134,7 @@ interface ChatwootProviderProps { pubsubToken?: string; // PubSub authentication token disableUpload?: boolean; // Disable file attachments disableEditor?: boolean; // Disable reply editor + disableSignature?: boolean; // Disable signature controls and insertion signature?: string; // Custom message signature (overrides user profile signature) } ``` @@ -148,6 +149,7 @@ window.__PUBSUB_TOKEN__ // Real-time auth token window.__WOOT_CONVERSATION_ID__ // Active conversation window.__EDITOR_DISABLE_UPLOAD__ // Upload flag window.__DISABLE_EDITOR__ // Editor flag +window.__WOOT_DISABLE_SIGNATURE__ // Disable signature controls and insertion window.__WOOT_CUSTOM_SIGNATURE__ // Custom signature (overrides profile) window.__WOOT_ISOLATED_SHELL__ // Disables audio notifications window.__CHATWOOT_STORE__ // Vuex store reference diff --git a/app/javascript/react-components/src/components/ChatwootProvider.jsx b/app/javascript/react-components/src/components/ChatwootProvider.jsx index c28efbed2..f07721806 100644 --- a/app/javascript/react-components/src/components/ChatwootProvider.jsx +++ b/app/javascript/react-components/src/components/ChatwootProvider.jsx @@ -18,6 +18,7 @@ export const ChatwootProvider = ({ conversationId, disableUpload, disableEditor, + disableSignature, signature, children, }) => { @@ -40,6 +41,7 @@ export const ChatwootProvider = ({ conversationId: Number(conversationId), disableEditor: disableEditor || false, disableUpload: disableUpload || false, + disableSignature: disableSignature || false, websocketURL: websocketURL, pubsubToken: pubsubToken, signature: signature || '', @@ -59,6 +61,7 @@ export const ChatwootProvider = ({ window.__WOOT_CONVERSATION_ID__ = config.conversationId; window.__EDITOR_DISABLE_UPLOAD__ = config.disableUpload; window.__DISABLE_EDITOR__ = config.disableEditor; + window.__WOOT_DISABLE_SIGNATURE__ = config.disableSignature; window.__WOOT_CUSTOM_SIGNATURE__ = config.signature || undefined; window.__WOOT_ISOLATED_SHELL__ = true; /* eslint-enable no-underscore-dangle */ @@ -100,6 +103,16 @@ export const ChatwootProvider = ({ ); }, [signature]); + // Keep signature toggle global in sync when the prop changes after init + useEffect(() => { + const value = disableSignature === true; + // eslint-disable-next-line no-underscore-dangle + window.__WOOT_DISABLE_SIGNATURE__ = value; + window.dispatchEvent( + new CustomEvent('chatwoot:disable-signature-change', { detail: value }) + ); + }, [disableSignature]); + if (!initializationComplete) { return null; } diff --git a/app/javascript/ui/LiteReplyBox.vue b/app/javascript/ui/LiteReplyBox.vue index 5ca37d48b..fd12b96dd 100644 --- a/app/javascript/ui/LiteReplyBox.vue +++ b/app/javascript/ui/LiteReplyBox.vue @@ -40,6 +40,8 @@ export default { updateEditorSelectionWith: '', // eslint-disable-next-line no-underscore-dangle customSignatureValue: window.__WOOT_CUSTOM_SIGNATURE__ || '', + // eslint-disable-next-line no-underscore-dangle + disableSignatureValue: window.__WOOT_DISABLE_SIGNATURE__ === true, }; }, computed: { @@ -166,7 +168,13 @@ export default { hasCustomSignature() { return !!this.customSignature; }, + allowSignature() { + return !this.disableSignatureValue; + }, signatureToApply() { + if (!this.allowSignature) { + return ''; + } const signature = this.customSignature || this.messageSignature; return this.showRichContentEditor ? signature @@ -180,6 +188,10 @@ export default { 'chatwoot:signature-change', this.onSignatureChange ); + window.addEventListener( + 'chatwoot:disable-signature-change', + this.onDisableSignatureChange + ); // // A hacky fix to solve the drag and drop // // Is showing on top of new conversation modal drag and drop @@ -197,11 +209,18 @@ export default { 'chatwoot:signature-change', this.onSignatureChange ); + window.removeEventListener( + 'chatwoot:disable-signature-change', + this.onDisableSignatureChange + ); }, methods: { onSignatureChange(event) { this.customSignatureValue = event.detail || ''; }, + onDisableSignatureChange(event) { + this.disableSignatureValue = event.detail === true; + }, getElementToBind() { return this.replyEditor; }, @@ -423,7 +442,7 @@ export default { enable-variables :variables="messageVariables" :signature="signatureToApply" - allow-signature + :allow-signature="allowSignature" :force-signature="hasCustomSignature" :channel-type="channelType" @typing-off="onTypingOff" @@ -464,7 +483,7 @@ export default { :message="message" :enable-multiple-file-upload="allowFileUpload" :allow-file-upload="allowFileUpload" - allow-signature + :allow-signature="allowSignature" />