fix(filters): show hierarchical folder structure in rule mailbox selector
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user