diff --git a/apps/mail/app/(routes)/settings/categories/page.tsx b/apps/mail/app/(routes)/settings/categories/page.tsx
index c983847470..f4e6509e99 100644
--- a/apps/mail/app/(routes)/settings/categories/page.tsx
+++ b/apps/mail/app/(routes)/settings/categories/page.tsx
@@ -1,26 +1,9 @@
-import { useSettings } from '@/hooks/use-settings';
-import { useMutation, useQueryClient, useQuery } from '@tanstack/react-query';
-import { SettingsCard } from '@/components/settings/settings-card';
-import { Button } from '@/components/ui/button';
-import { Input } from '@/components/ui/input';
-import { Switch } from '@/components/ui/switch';
-import { Label } from '@/components/ui/label';
-import { useState, useEffect, useCallback } from 'react';
-import { useTRPC } from '@/providers/query-provider';
-import { toast } from 'sonner';
-import type { CategorySetting } from '@/hooks/use-categories';
-import { Popover, PopoverTrigger, PopoverContent } from '@/components/ui/popover';
-import * as Icons from '@/components/icons/icons';
-import { Sparkles } from '@/components/icons/icons';
-import { Loader, GripVertical } from 'lucide-react';
import {
- Select,
- SelectTrigger,
- SelectValue,
- SelectContent,
- SelectItem,
-} from '@/components/ui/select';
-import { Badge } from '@/components/ui/badge';
+ arrayMove,
+ SortableContext,
+ sortableKeyboardCoordinates,
+ verticalListSortingStrategy,
+} from '@dnd-kit/sortable';
import {
DndContext,
closestCenter,
@@ -29,15 +12,24 @@ import {
useSensor,
useSensors,
} from '@dnd-kit/core';
+import { Popover, PopoverTrigger, PopoverContent } from '@/components/ui/popover';
+import { useMutation, useQueryClient, useQuery } from '@tanstack/react-query';
+import { SettingsCard } from '@/components/settings/settings-card';
+import type { CategorySetting } from '@/hooks/use-categories';
+import { useState, useEffect, useCallback } from 'react';
+import { useTRPC } from '@/providers/query-provider';
+import { Sparkles } from '@/components/icons/icons';
+import { Loader, GripVertical } from 'lucide-react';
+import { useSettings } from '@/hooks/use-settings';
import type { DragEndEvent } from '@dnd-kit/core';
-import {
- arrayMove,
- SortableContext,
- sortableKeyboardCoordinates,
- verticalListSortingStrategy,
-} from '@dnd-kit/sortable';
+import { Switch } from '@/components/ui/switch';
+import { Button } from '@/components/ui/button';
import { useSortable } from '@dnd-kit/sortable';
+import { Label } from '@/components/ui/label';
+import { Input } from '@/components/ui/input';
+import { Badge } from '@/components/ui/badge';
import { CSS } from '@dnd-kit/utilities';
+import { toast } from 'sonner';
import React from 'react';
interface SortableCategoryItemProps {
@@ -63,14 +55,9 @@ const SortableCategoryItem = React.memo(function SortableCategoryItem({
handleFieldChange,
toggleDefault,
}: SortableCategoryItemProps) {
- const {
- attributes,
- listeners,
- setNodeRef,
- transform,
- transition,
- isDragging,
- } = useSortable({ id: cat.id });
+ const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({
+ id: cat.id,
+ });
const style = {
transform: CSS.Transform.toString(transform),
@@ -81,123 +68,128 @@ const SortableCategoryItem = React.memo(function SortableCategoryItem({
-
-
-
-
-
-
- {cat.id}
-
- {cat.isDefault && (
-
- Default
-
- )}
-
-
-
toggleDefault(cat.id)}
- />
-
+
+
+
+
+
+ {cat.id}
+
+ {cat.isDefault && (
+
+ Default
+
+ )}
+
+
+ toggleDefault(cat.id)}
+ />
+
+
+
-
-
-
- handleFieldChange(cat.id, 'name', e.target.value)}
- />
-
-
-
-
-
-
handleFieldChange(cat.id, 'searchValue', e.target.value)}
- />
+
+
+
+ handleFieldChange(cat.id, 'name', e.target.value)}
+ />
+
-
{
- if (open) {
- setActiveAiCat(cat.id);
- } else {
- setActiveAiCat(null);
- }
- }}
- >
-
-
-
-
-
-
- setPromptValue(e.target.value)}
- />
-
-
- Example: "emails that mention quarterly reports"
-
-
@@ -234,14 +226,11 @@ export default function CategoriesSettingsPage() {
}),
);
- const toggleDefault = useCallback(
- (id: string) => {
- setCategories((prev) =>
- prev.map((c) => ({ ...c, isDefault: c.id === id ? !c.isDefault : false })),
- );
- },
- [],
- );
+ const toggleDefault = useCallback((id: string) => {
+ setCategories((prev) =>
+ prev.map((c) => ({ ...c, isDefault: c.id === id ? !c.isDefault : false })),
+ );
+ }, []);
useEffect(() => {
if (!defaultMailCategories.length) return;
@@ -256,10 +245,12 @@ export default function CategoriesSettingsPage() {
setCategories(merged.sort((a, b) => a.order - b.order));
}, [data, defaultMailCategories]);
- const handleFieldChange = (id: string, field: keyof CategorySetting, value: string | number | boolean) => {
- setCategories((prev) =>
- prev.map((cat) => (cat.id === id ? { ...cat, [field]: value } : cat)),
- );
+ const handleFieldChange = (
+ id: string,
+ field: keyof CategorySetting,
+ value: string | number | boolean,
+ ) => {
+ setCategories((prev) => prev.map((cat) => (cat.id === id ? { ...cat, [field]: value } : cat)));
};
const handleDragEnd = (event: DragEndEvent) => {
@@ -272,9 +263,9 @@ export default function CategoriesSettingsPage() {
setCategories((prev) => {
const oldIndex = prev.findIndex((cat) => cat.id === active.id);
const newIndex = prev.findIndex((cat) => cat.id === over.id);
-
+
const reorderedCategories = arrayMove(prev, oldIndex, newIndex);
-
+
return reorderedCategories.map((cat, index) => ({
...cat,
order: index,
@@ -314,7 +305,7 @@ export default function CategoriesSettingsPage() {
}
return (
-
+
- setPromptValues((prev) => ({ ...prev, [cat.id]: val }))
- }
+ setPromptValue={(val) => setPromptValues((prev) => ({ ...prev, [cat.id]: val }))}
setActiveAiCat={setActiveAiCat}
isGeneratingQuery={isGeneratingQuery}
generateSearchQuery={generateSearchQuery}
@@ -358,4 +347,4 @@ export default function CategoriesSettingsPage() {
);
-}
\ No newline at end of file
+}