Compare commits
3 Commits
5e3631c49d
...
main
Author | SHA1 | Date | |
---|---|---|---|
a7eed530a3 | |||
af15eb1d0b | |||
19674310e7 |
@ -4,12 +4,12 @@ import axios from 'axios';
|
||||
|
||||
export default createOperation.query({
|
||||
input: z.object({
|
||||
page: z.number().optional(),
|
||||
|
||||
}),
|
||||
handler: async ({ page = 1 }) => {
|
||||
handler: async () => {
|
||||
console.log('Making request to Chatwoot API');
|
||||
|
||||
const { data } = await axios.get(`https://chatwoot.andert.me/api/v1/accounts/1/contacts?page=${page}`, {
|
||||
const { data } = await axios.get(`https://chatwoot.andert.me/api/v1/accounts/1/contacts`, {
|
||||
headers: {
|
||||
api_access_token: process.env.CHATWOOT_API_ACCESS_TOKEN
|
||||
},
|
||||
|
20
.wundergraph/operations/getChatwootMessages.ts
Normal file
20
.wundergraph/operations/getChatwootMessages.ts
Normal file
@ -0,0 +1,20 @@
|
||||
// .wundergraph/operations/getChatwootMessages.ts
|
||||
import { createOperation, z } from '../generated/wundergraph.factory';
|
||||
import axios from 'axios';
|
||||
|
||||
export default createOperation.query({
|
||||
input: z.object({
|
||||
conversationId: z.string(),
|
||||
}),
|
||||
handler: async ({ input }) => {
|
||||
console.log('Making request to Chatwoot API');
|
||||
|
||||
const { data } = await axios.get(`https://chatwoot.andert.me/api/v1/accounts/1/conversations/${input.conversationId}/messages`, {
|
||||
headers: {
|
||||
api_access_token: process.env.CHATWOOT_API_ACCESS_TOKEN
|
||||
},
|
||||
});
|
||||
|
||||
return data;
|
||||
},
|
||||
});
|
@ -10,10 +10,8 @@ export default createOperation.query({
|
||||
headers: {
|
||||
Authorization: process.env.PAPERLESS_TOKEN,
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
|
||||
// Add download link, thumbnail link, preview link, PDF data, and metadata to each document
|
||||
const documentsWithLinksDataAndMetadata = await Promise.all(data.results.map(async doc => {
|
||||
const response = await axios.get(`https://paperless.andert.me/api/documents/${doc.id}/preview/`, {
|
||||
@ -25,26 +23,35 @@ export default createOperation.query({
|
||||
|
||||
const pdfData = Buffer.from(response.data, 'binary').toString('base64');
|
||||
|
||||
let correspondent = null;
|
||||
if (doc.correspondent) {
|
||||
const correspondentResponse = await axios.get(`https://paperless.andert.me/api/correspondents/${doc.correspondent}/`, {
|
||||
headers: {
|
||||
Authorization: process.env.PAPERLESS_TOKEN,
|
||||
},
|
||||
});
|
||||
const correspondent = correspondentResponse.data;
|
||||
correspondent = correspondentResponse.data;
|
||||
}
|
||||
|
||||
let tags = [];
|
||||
if (doc.tags) {
|
||||
const tagsResponse = await Promise.all(doc.tags.map(tag => axios.get(`https://paperless.andert.me/api/tags/${tag}/`, {
|
||||
headers: {
|
||||
Authorization: process.env.PAPERLESS_TOKEN,
|
||||
},
|
||||
})));
|
||||
const tags = tagsResponse.map(response => response.data);
|
||||
tags = tagsResponse.map(response => response.data);
|
||||
}
|
||||
|
||||
let documentType = null;
|
||||
if (doc.document_type) {
|
||||
const documentTypeResponse = await axios.get(`https://paperless.andert.me/api/document_types/${doc.document_type}/`, {
|
||||
headers: {
|
||||
Authorization: process.env.PAPERLESS_TOKEN,
|
||||
},
|
||||
});
|
||||
const documentType = documentTypeResponse.data;
|
||||
documentType = documentTypeResponse.data;
|
||||
}
|
||||
|
||||
return {
|
||||
...doc,
|
||||
@ -54,7 +61,7 @@ export default createOperation.query({
|
||||
pdfData,
|
||||
correspondent,
|
||||
tags,
|
||||
document_type: documentType,
|
||||
documentType,
|
||||
};
|
||||
}));
|
||||
|
||||
|
13723
pnpm-lock.yaml
generated
13723
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -1,8 +1,9 @@
|
||||
<script lang="ts">
|
||||
import HeaderMain from "$lib/layouts/HeaderMain.svelte";
|
||||
import { createQuery } from "../../lib/wundergraph";
|
||||
import { Avatar } from "@skeletonlabs/skeleton";
|
||||
|
||||
import { createQuery } from "../../lib/wundergraph";
|
||||
|
||||
const meQuery = createQuery({
|
||||
operationName: "Me",
|
||||
});
|
||||
|
@ -5,7 +5,6 @@
|
||||
|
||||
const contactsQuery = createQuery({
|
||||
operationName: "getChatwootContacts",
|
||||
variables: { page: 2 },
|
||||
});
|
||||
</script>
|
||||
|
||||
|
@ -8,6 +8,8 @@
|
||||
});
|
||||
|
||||
let selectedConversation = null;
|
||||
let messagesQuery;
|
||||
|
||||
function selectConversation(conversation) {
|
||||
selectedConversation = conversation;
|
||||
}
|
||||
@ -15,6 +17,13 @@
|
||||
$: if ($conversationsQuery.data && !selectedConversation) {
|
||||
selectedConversation = $conversationsQuery.data.data.payload[0];
|
||||
}
|
||||
|
||||
$: if (selectedConversation) {
|
||||
messagesQuery = createQuery({
|
||||
operationName: "getChatwootMessages",
|
||||
input: { conversationId: selectedConversation.id },
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<div class="h-full w-full overflow-scroll flex">
|
||||
@ -49,24 +58,21 @@
|
||||
</div>
|
||||
|
||||
<div class="space-y-4 px-4">
|
||||
{#each selectedConversation.messages as message (message.id)}
|
||||
{#if message.content_type == "incoming_email"}
|
||||
{#if selectedConversation.last_non_activity_message.content != message.content}
|
||||
<MailViewer
|
||||
html={selectedConversation.last_non_activity_message
|
||||
.content_attributes.email.html_content.full}
|
||||
/>{/if}
|
||||
{#if $messagesQuery && $messagesQuery.data}
|
||||
{#each $messagesQuery.data.payload as message (message.id)}
|
||||
{#if message.content_attributes.email && (message.content_attributes.email.content_type.includes("text/html") || message.content_attributes.email.content_type.includes("multipart/alternative"))}
|
||||
<MailViewer
|
||||
html={message.content_attributes.email.html_content.full}
|
||||
/>
|
||||
{:else}
|
||||
{#if selectedConversation.last_non_activity_message.content != message.content}{selectedConversation
|
||||
.last_non_activity_message.content}{/if}
|
||||
<p class="bg-slate-400 py-1 px-2 rounded-sm my-2">
|
||||
{message.content}
|
||||
</p>
|
||||
<div
|
||||
class="p-4 max-w-xs mx-auto bg-blue-100 rounded-xl shadow-md flex items-center space-x-4"
|
||||
>
|
||||
<p class="text-black">{message.content}</p>
|
||||
</div>
|
||||
{/if}
|
||||
{/each}
|
||||
{/if}
|
||||
</div>
|
||||
{:else}
|
||||
<p>Select a conversation to view its details.</p>
|
||||
|
@ -27,10 +27,6 @@
|
||||
</script>
|
||||
|
||||
<HeaderMain>
|
||||
<!-- <div slot="header">
|
||||
<h1>Paperless Documents</h1>
|
||||
</div> -->
|
||||
|
||||
<div slot="main" class="h-full w-full overflow-scroll flex">
|
||||
<div class="w-1/4 h-full overflow-scroll">
|
||||
{#if $paperlessQuery.isLoading}
|
||||
@ -46,9 +42,12 @@
|
||||
<h2 class="text-lg font-semibold">
|
||||
{document.archived_file_name}
|
||||
</h2>
|
||||
<p>Correspondent: {document.correspondent.name}</p>
|
||||
<p>Tags: {document.tags.map((tag) => tag.name).join(", ")}</p>
|
||||
<p>{document.document_type.name}</p>
|
||||
<p>Correspondent: {document.correspondent?.name || "N/A"}</p>
|
||||
<p>
|
||||
Tags: {document.tags?.map((tag) => tag.name).join(", ") ||
|
||||
"N/A"}
|
||||
</p>
|
||||
<p>{document.documentType?.name || "N/A"}</p>
|
||||
</div>
|
||||
</a>
|
||||
{/each}
|
||||
|
@ -1,7 +1,6 @@
|
||||
import { sveltekit } from '@sveltejs/kit/vite';
|
||||
import { defineConfig } from 'vite';
|
||||
import { fetchSchemas } from './.wundergraph/schemas/fetch-schemas';
|
||||
import { vitePreprocess } from '@sveltejs/kit/vite';
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [
|
||||
|
Reference in New Issue
Block a user