fix(filters): show hierarchical folder structure in rule mailbox selector

This commit is contained in:
Matthieu MALVACHE
2026-02-17 00:07:28 +01:00
committed by Matthieu MALVACHE
parent fea21d5bcd
commit 74763b384d
+9 -3
View File
@@ -1,6 +1,6 @@
"use client"; "use client";
import { useState, useCallback } from "react"; import { useState, useCallback, useMemo } from "react";
import { useTranslations } from "next-intl"; import { useTranslations } from "next-intl";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input"; import { Input } from "@/components/ui/input";
@@ -16,6 +16,7 @@ import type {
FilterActionType, FilterActionType,
} from "@/lib/jmap/sieve-types"; } from "@/lib/jmap/sieve-types";
import type { Mailbox } from "@/lib/jmap/types"; import type { Mailbox } from "@/lib/jmap/types";
import { buildMailboxTree, flattenMailboxTree } from "@/lib/utils";
interface FilterRuleModalProps { interface FilterRuleModalProps {
rule?: FilterRule; rule?: FilterRule;
@@ -70,6 +71,11 @@ export function FilterRuleModal({
const modalRef = useFocusTrap({ isActive: true, onEscape: onClose }); const modalRef = useFocusTrap({ isActive: true, onEscape: onClose });
const hierarchicalMailboxes = useMemo(
() => flattenMailboxTree(buildMailboxTree(mailboxes.filter((mb) => !mb.isShared))),
[mailboxes]
);
const handleSave = useCallback(() => { const handleSave = useCallback(() => {
const trimmedName = name.trim(); const trimmedName = name.trim();
if (!trimmedName) { if (!trimmedName) {
@@ -331,9 +337,9 @@ export function FilterRuleModal({
aria-label={t("move_to_folder")} aria-label={t("move_to_folder")}
> >
<option value="">{t("move_to_folder")}</option> <option value="">{t("move_to_folder")}</option>
{mailboxes.map((mb) => ( {hierarchicalMailboxes.map((mb) => (
<option key={mb.id} value={mb.name}> <option key={mb.id} value={mb.name}>
{mb.name} {"\u00A0".repeat(mb.depth * 3)}{mb.name}
</option> </option>
))} ))}
</select> </select>