Compare commits

..

3 Commits

Author SHA1 Message Date
a7eed530a3 cleanup 2023-10-17 09:42:20 +02:00
af15eb1d0b Fixing a Paperless bug 2023-10-17 09:42:09 +02:00
19674310e7 added dynamic getMessages query 2023-09-21 22:03:40 +02:00
10 changed files with 9061 additions and 13775 deletions

View File

@ -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
},

View 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;
},
});

View File

@ -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');
const correspondentResponse = await axios.get(`https://paperless.andert.me/api/correspondents/${doc.correspondent}/`, {
headers: {
Authorization: process.env.PAPERLESS_TOKEN,
},
});
const correspondent = correspondentResponse.data;
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,
},
});
correspondent = correspondentResponse.data;
}
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);
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,
},
})));
tags = tagsResponse.map(response => response.data);
}
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;
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,
},
});
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

File diff suppressed because it is too large Load Diff

View File

@ -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",
});

View File

@ -5,7 +5,6 @@
const contactsQuery = createQuery({
operationName: "getChatwootContacts",
variables: { page: 2 },
});
</script>

View File

@ -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}
{#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={selectedConversation.last_non_activity_message
.content_attributes.email.html_content.full}
/>{/if}
<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>
{/if}
{/each}
html={message.content_attributes.email.html_content.full}
/>
{:else}
<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>

View File

@ -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}

View File

@ -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: [
@ -16,4 +15,4 @@ export default defineConfig({
},
},
],
});
});

8978
yarn.lock Normal file

File diff suppressed because it is too large Load Diff