CodeBold
+ -
+
- Visit the preferences centre here > https://external.com +
diff --git a/app/controllers/api/v1/accounts/search_controller.rb b/app/controllers/api/v1/accounts/search_controller.rb index 35979f70f..13e3a6a6c 100644 --- a/app/controllers/api/v1/accounts/search_controller.rb +++ b/app/controllers/api/v1/accounts/search_controller.rb @@ -15,6 +15,10 @@ class Api::V1::Accounts::SearchController < Api::V1::Accounts::BaseController @result = search('Message') end + def articles + @result = search('Article') + end + private def search(search_type) diff --git a/app/javascript/dashboard/api/captain/copilotMessages.js b/app/javascript/dashboard/api/captain/copilotMessages.js new file mode 100644 index 000000000..49e05398a --- /dev/null +++ b/app/javascript/dashboard/api/captain/copilotMessages.js @@ -0,0 +1,18 @@ +/* global axios */ +import ApiClient from '../ApiClient'; + +class CopilotMessages extends ApiClient { + constructor() { + super('captain/copilot_threads', { accountScoped: true }); + } + + get(threadId) { + return axios.get(`${this.url}/${threadId}/copilot_messages`); + } + + create({ threadId, ...rest }) { + return axios.post(`${this.url}/${threadId}/copilot_messages`, rest); + } +} + +export default new CopilotMessages(); diff --git a/app/javascript/dashboard/api/captain/copilotThreads.js b/app/javascript/dashboard/api/captain/copilotThreads.js new file mode 100644 index 000000000..7fdce3b91 --- /dev/null +++ b/app/javascript/dashboard/api/captain/copilotThreads.js @@ -0,0 +1,9 @@ +import ApiClient from '../ApiClient'; + +class CopilotThreads extends ApiClient { + constructor() { + super('captain/copilot_threads', { accountScoped: true }); + } +} + +export default new CopilotThreads(); diff --git a/app/javascript/dashboard/api/search.js b/app/javascript/dashboard/api/search.js index 7abb584c0..d533c2f28 100644 --- a/app/javascript/dashboard/api/search.js +++ b/app/javascript/dashboard/api/search.js @@ -40,6 +40,15 @@ class SearchAPI extends ApiClient { }, }); } + + articles({ q, page = 1 }) { + return axios.get(`${this.url}/articles`, { + params: { + q, + page: page, + }, + }); + } } export default new SearchAPI(); diff --git a/app/javascript/dashboard/components-next/message/Message.vue b/app/javascript/dashboard/components-next/message/Message.vue index cf6cc0881..98323f79a 100644 --- a/app/javascript/dashboard/components-next/message/Message.vue +++ b/app/javascript/dashboard/components-next/message/Message.vue @@ -315,11 +315,7 @@ const componentToRender = computed(() => { }); const shouldShowContextMenu = computed(() => { - return !( - props.status === MESSAGE_STATUS.FAILED || - props.status === MESSAGE_STATUS.PROGRESS || - props.contentAttributes?.isUnsupported - ); + return !props.contentAttributes?.isUnsupported; }); const isBubble = computed(() => { @@ -344,12 +340,23 @@ const contextMenuEnabledOptions = computed(() => { const hasAttachments = !!(props.attachments && props.attachments.length > 0); const isOutgoing = props.messageType === MESSAGE_TYPES.OUTGOING; + const isFailedOrProcessing = + props.status === MESSAGE_STATUS.FAILED || + props.status === MESSAGE_STATUS.PROGRESS; return { copy: hasText, - delete: hasText || hasAttachments, - cannedResponse: isOutgoing && hasText, - replyTo: !props.private && props.inboxSupportsReplyTo.outgoing, + delete: + (hasText || hasAttachments) && + !isFailedOrProcessing && + !isMessageDeleted.value, + cannedResponse: isOutgoing && hasText && !isMessageDeleted.value, + copyLink: !isFailedOrProcessing, + translate: !isFailedOrProcessing && !isMessageDeleted.value && hasText, + replyTo: + !props.private && + props.inboxSupportsReplyTo.outgoing && + !isFailedOrProcessing, }; }); @@ -499,8 +506,8 @@ provideMessageContext({
+ {{ truncatedContent }} +
+CodeBold
+