feat: setup conversation list

This commit is contained in:
Shivam Mishra
2025-05-08 20:55:51 +05:30
parent e00b54ce07
commit 4f27f1605a
5 changed files with 64 additions and 33 deletions
@@ -15,6 +15,12 @@ class ApiClient {
// eslint-disable-next-line class-methods-use-this
get accountIdFromRoute() {
// eslint-disable-next-line no-underscore-dangle
if (window.__WOOT_ACCOUNT_ID__) {
// eslint-disable-next-line no-underscore-dangle
return window.__WOOT_ACCOUNT_ID__;
}
const isInsideAccountScopedURLs =
window.location.pathname.includes('/app/accounts');
+1 -10
View File
@@ -12,12 +12,9 @@ import { domPurifyConfig } from 'shared/helpers/HTMLSanitizer.js';
import store from 'dashboard/store';
import constants from 'dashboard/constants/globals';
import axios from 'axios';
import createAxios from 'dashboard/helper/APIHelper';
import createAxios from '../ui/axios';
import commonHelpers from 'dashboard/helper/commons';
import WootButton from '../dashboard/components-next/button/Button.vue';
import WootInput from '../dashboard/components-next/input/Input.vue';
import WootMessage from '../dashboard/components-next/message/Message.vue';
import MessageList from '../ui/MessageList.vue';
import i18nMessages from '../dashboard/i18n';
import { createI18n, I18nInjectionKey } from 'vue-i18n';
@@ -47,14 +44,8 @@ commonHelpers();
window.WootConstants = constants;
window.axios = createAxios(axios);
export const buttonElement = defineCustomElement(WootButton, ceOptions);
export const inputElement = defineCustomElement(WootInput, ceOptions);
export const messageElement = defineCustomElement(WootMessage, ceOptions);
export const messageListElement = defineCustomElement(MessageList, ceOptions);
// eslint-disable-next-line no-underscore-dangle
window.__CHATWOOT_STORE__ = store;
customElements.define('woot-button', buttonElement);
customElements.define('woot-input', inputElement);
customElements.define('woot-message', messageElement);
customElements.define('woot-message-list', messageListElement);
+32 -15
View File
@@ -1,21 +1,38 @@
<script setup>
import { onMounted, computed, watch } from 'vue';
import Message from 'next/message/Message.vue';
import allMessages from 'next/message/fixtures/textWithMedia.js';
import { useStore } from 'dashboard/composables/store';
import { useCamelCase } from 'dashboard/composables/useTransformKeys';
// const props = defineProps({
// accountId: {
// type: Number,
// required: true,
// },
// conversationId: {
// type: Number,
// required: true,
// },
// token: {
// type: String,
// required: true,
// },
// });
const props = defineProps({
conversationId: {
type: Number,
required: true,
},
});
const store = useStore();
onMounted(() => {
store.dispatch('getConversation', props.conversationId);
});
const conversation = computed(() => {
return store.getters.getConversationById(props.conversationId);
});
const allMessages = computed(() => {
if (!conversation.value) return [];
return useCamelCase(conversation.value.messages);
});
watch(conversation, () => {
store.dispatch('fetchPreviousMessages', {
conversationId: conversation.value.id,
before: allMessages.value[0].id,
});
});
</script>
<template>
+19
View File
@@ -0,0 +1,19 @@
const parseErrorCode = error => Promise.reject(error);
export default axios => {
// eslint-disable-next-line no-underscore-dangle
const apiHost = window.__WOOT_API_HOST__;
// eslint-disable-next-line no-underscore-dangle
const accessToken = window.__WOOT_ACCESS_TOKEN__;
const wootApi = axios.create({ baseURL: `${apiHost}/` });
Object.assign(wootApi.defaults.headers.common, {
api_access_token: accessToken,
});
wootApi.interceptors.response.use(
response => response,
error => parseErrorCode(error)
);
return wootApi;
};