From 96d075704177e3d05cc27592462dbd92da1f63ad Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Mon, 29 Jun 2026 22:05:06 +0530 Subject: [PATCH] feat: wire captain overview page to live stats and summary --- .../dashboard/api/captain/assistant.js | 10 ++ .../pageComponents/overview/KnowledgeCard.vue | 25 ++--- .../pageComponents/overview/WelcomeCard.vue | 102 ++++++++++++------ .../i18n/locale/en/integrations.json | 3 +- .../captain/assistants/overview/Index.vue | 73 ++++++++----- 5 files changed, 141 insertions(+), 72 deletions(-) diff --git a/app/javascript/dashboard/api/captain/assistant.js b/app/javascript/dashboard/api/captain/assistant.js index 157eba74e..724785148 100644 --- a/app/javascript/dashboard/api/captain/assistant.js +++ b/app/javascript/dashboard/api/captain/assistant.js @@ -21,6 +21,16 @@ class CaptainAssistant extends ApiClient { message_history: messageHistory, }); } + + getStats({ assistantId, range }) { + return axios.get(`${this.url}/${assistantId}/stats`, { params: { range } }); + } + + getSummary({ assistantId, range }) { + return axios.get(`${this.url}/${assistantId}/summary`, { + params: { range }, + }); + } } export default new CaptainAssistant(); diff --git a/app/javascript/dashboard/components-next/captain/pageComponents/overview/KnowledgeCard.vue b/app/javascript/dashboard/components-next/captain/pageComponents/overview/KnowledgeCard.vue index 2428e928d..80c7ae69d 100644 --- a/app/javascript/dashboard/components-next/captain/pageComponents/overview/KnowledgeCard.vue +++ b/app/javascript/dashboard/components-next/captain/pageComponents/overview/KnowledgeCard.vue @@ -3,20 +3,17 @@ import { computed } from 'vue'; import { useRoute } from 'vue-router'; import { useI18n } from 'vue-i18n'; +const props = defineProps({ + knowledge: { + type: Object, + default: () => ({ approved: 0, pending: 0, documents: 0, coverage: 0 }), + }, +}); + const { t } = useI18n(); const route = useRoute(); -// Knowledge coverage (sample data). -const knowledge = { - approved: 142, - pending: 9, - documents: 23, -}; - -const approvedPct = computed(() => { - const total = knowledge.approved + knowledge.pending; - return total ? Math.round((knowledge.approved / total) * 100) : 0; -}); +const approvedPct = computed(() => props.knowledge.coverage ?? 0); const linkTo = routeName => ({ name: routeName, @@ -29,19 +26,19 @@ const linkTo = routeName => ({ const stats = computed(() => [ { key: 'approved', - value: knowledge.approved, + value: props.knowledge.approved, label: t('CAPTAIN.OVERVIEW.KNOWLEDGE.APPROVED'), to: linkTo('captain_assistants_responses_index'), }, { key: 'pending', - value: knowledge.pending, + value: props.knowledge.pending, label: t('CAPTAIN.OVERVIEW.KNOWLEDGE.PENDING'), to: linkTo('captain_assistants_responses_pending'), }, { key: 'documents', - value: knowledge.documents, + value: props.knowledge.documents, label: t('CAPTAIN.OVERVIEW.KNOWLEDGE.DOCUMENTS'), to: linkTo('captain_assistants_documents_index'), }, diff --git a/app/javascript/dashboard/components-next/captain/pageComponents/overview/WelcomeCard.vue b/app/javascript/dashboard/components-next/captain/pageComponents/overview/WelcomeCard.vue index 73376019b..9fa783942 100644 --- a/app/javascript/dashboard/components-next/captain/pageComponents/overview/WelcomeCard.vue +++ b/app/javascript/dashboard/components-next/captain/pageComponents/overview/WelcomeCard.vue @@ -1,61 +1,99 @@ diff --git a/app/javascript/dashboard/i18n/locale/en/integrations.json b/app/javascript/dashboard/i18n/locale/en/integrations.json index 510829900..ed7f029f7 100644 --- a/app/javascript/dashboard/i18n/locale/en/integrations.json +++ b/app/javascript/dashboard/i18n/locale/en/integrations.json @@ -395,7 +395,8 @@ "OVERVIEW": { "HEADER": "Overview", "WELCOME": { - "LABEL": "Captain summary" + "LABEL": "Captain summary", + "LOADING": "Generating summary…" }, "INBOX_BANNER": { "TEXT": "This assistant isn't connected to any inbox yet, so it won't respond to conversations.", diff --git a/app/javascript/dashboard/routes/dashboard/captain/assistants/overview/Index.vue b/app/javascript/dashboard/routes/dashboard/captain/assistants/overview/Index.vue index c01f9b1a9..b25722648 100644 --- a/app/javascript/dashboard/routes/dashboard/captain/assistants/overview/Index.vue +++ b/app/javascript/dashboard/routes/dashboard/captain/assistants/overview/Index.vue @@ -1,7 +1,9 @@ @@ -103,7 +126,7 @@ const metrics = computed(() => [
- +
[
- +