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" -
- -
-
+ + + + +
+ + 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 +}