feat: define search folder per newsletter #3

This commit is contained in:
Leon
2025-08-13 01:04:13 +02:00
parent eefd5b4050
commit 8fa474738a
10 changed files with 224 additions and 26 deletions

View File

@@ -36,6 +36,7 @@ const getInitialState = (newsletter: Newsletter | null | undefined) => {
name: newsletter.name,
slug: newsletter.slug || "",
emails: newsletter.senders.map((s) => s.email),
search_folder: newsletter.search_folder || "",
move_to_folder: newsletter.move_to_folder || "",
extract_content: newsletter.extract_content,
}
@@ -44,6 +45,7 @@ const getInitialState = (newsletter: Newsletter | null | undefined) => {
name: "",
slug: "",
emails: [""],
search_folder: "",
move_to_folder: "",
extract_content: false,
}
@@ -89,6 +91,7 @@ export function NewsletterDialog({ newsletter, isOpen, folderOptions, onOpenChan
name: formData.name,
slug: formData.slug,
sender_emails: formData.emails.filter((email) => email.trim()),
search_folder: formData.search_folder,
move_to_folder: formData.move_to_folder,
extract_content: formData.extract_content,
}
@@ -148,6 +151,28 @@ export function NewsletterDialog({ newsletter, isOpen, folderOptions, onOpenChan
/>
</div>
<div className="space-y-2">
<Label htmlFor="search_folder">Folder to Search</Label>
<Select
value={formData.search_folder || "None"}
onValueChange={(value) =>
setFormData((prev) => ({ ...prev, search_folder: value === "None" ? "" : value }))
}
>
<SelectTrigger>
<SelectValue placeholder="Select folder or leave empty" />
</SelectTrigger>
<SelectContent>
<SelectItem value="None">Default (use global setting)</SelectItem>
{folderOptions.map((folder) => (
<SelectItem key={folder} value={folder}>
{folder}
</SelectItem>
))}
</SelectContent>
</Select>
</div>
<div className="space-y-2">
<Label htmlFor="move_to_folder">Move To Folder</Label>
<Select

View File

@@ -23,6 +23,7 @@ const mockNewsletter: Newsletter = {
extract_content: false,
senders: [{ id: "1", email: "current@example.com" }],
entries_count: 5,
search_folder: "",
move_to_folder: "",
}
@@ -62,6 +63,7 @@ describe("NewsletterDialog", () => {
name: "My New Newsletter",
slug: "my-new-newsletter",
sender_emails: ["test@example.com"],
search_folder: "",
move_to_folder: "",
extract_content: false,
})
@@ -109,6 +111,7 @@ describe("NewsletterDialog", () => {
name: "Updated Name",
slug: "existing-newsletter",
sender_emails: ["current@example.com"],
search_folder: "",
move_to_folder: "",
extract_content: false,
})

View File

@@ -11,6 +11,7 @@ export interface Newsletter {
name: string
slug: string | null
is_active: boolean
search_folder?: string | null
move_to_folder?: string | null
extract_content: boolean
senders: { id: string; email: string }[]
@@ -21,6 +22,7 @@ export interface NewsletterCreate {
name: string;
slug?: string | null;
sender_emails: string[];
search_folder?: string | null;
move_to_folder?: string | null;
extract_content: boolean;
}
@@ -29,6 +31,7 @@ export interface NewsletterUpdate {
name: string;
slug?: string | null;
sender_emails: string[];
search_folder?: string | null;
move_to_folder?: string | null;
extract_content: boolean;
}