feat: add icon support to category creation and editing, enhance transaction rule creation with new dialog and filters

This commit is contained in:
Julien Froidefond
2025-11-29 17:42:11 +01:00
parent 0ce50d1477
commit 0fb3222ba2
8 changed files with 820 additions and 38 deletions

View File

@@ -1,52 +1,180 @@
"use client";
import {
// Alimentation
ShoppingCart,
Utensils,
Croissant,
Coffee,
Wine,
Beer,
Pizza,
Apple,
Cherry,
Salad,
Sandwich,
IceCream,
Cake,
CupSoda,
Milk,
Egg,
Fish,
Beef,
// Transport
Fuel,
Train,
Car,
SquareParking,
Bike,
Plane,
Bus,
Ship,
Sailboat,
Truck,
CarFront,
CircleParking,
TrainFront,
// Logement
Home,
Zap,
Droplet,
Hammer,
Sofa,
Refrigerator,
WashingMachine,
Lamp,
LampDesk,
Armchair,
Bath,
ShowerHead,
DoorOpen,
Fence,
Trees,
Flower,
Leaf,
Sun,
Snowflake,
Wind,
Thermometer,
// Santé
Pill,
Stethoscope,
Hospital,
Glasses,
Dumbbell,
Sparkles,
Heart,
HeartPulse,
Activity,
Syringe,
Bandage,
Brain,
Eye,
Ear,
Hand,
Footprints,
PersonStanding,
// Loisirs
Tv,
Music,
Film,
Gamepad,
Book,
Ticket,
Clapperboard,
Headphones,
Speaker,
Radio,
Camera,
Image,
Palette,
Brush,
PenTool,
Scissors,
Drama,
PartyPopper,
// Sport
Trophy,
Medal,
Target,
Volleyball,
// Shopping
Shirt,
Smartphone,
Package,
ShoppingBag,
Store,
Gem,
Watch,
Glasses as SunGlasses,
Crown,
Laptop,
Monitor,
Keyboard,
Mouse,
Printer,
TabletSmartphone,
Headset,
// Services
Wifi,
Repeat,
Landmark,
Shield,
HeartPulse,
Receipt,
FileText,
Mail,
Phone,
MessageSquare,
Send,
Globe,
Cloud,
Server,
Lock,
Unlock,
Settings,
// Finance
PiggyBank,
Banknote,
Wallet,
HandCoins,
Undo,
Coins,
CreditCard,
Building,
Building2,
TrendingUp,
TrendingDown,
BarChart,
PieChart,
LineChart,
Calculator,
Percent,
DollarSign,
Euro,
// Voyage
Bed,
Luggage,
Map,
MapPin,
Compass,
Mountain,
Tent,
Palmtree,
Umbrella,
Globe2,
Flag,
// Famille
GraduationCap,
Baby,
PawPrint,
Users,
User,
UserPlus,
Dog,
Cat,
Bird,
Rabbit,
// Autre
Wrench,
HeartHandshake,
Gift,
@@ -56,61 +184,215 @@ import {
Tag,
Folder,
Key,
Refrigerator,
Star,
Bookmark,
Clock,
Calendar,
Bell,
AlertTriangle,
Info,
CheckCircle,
XCircle,
Plus,
Minus,
Search,
Trash,
Edit,
Download,
Upload,
Share,
Link,
Paperclip,
Archive,
Box,
Boxes,
Container,
Briefcase,
GraduationCap as Education,
Award,
Lightbulb,
Flame,
Rocket,
Atom,
type LucideIcon,
} from "lucide-react";
// Map icon names to Lucide components
const iconMap: Record<string, LucideIcon> = {
// Alimentation
"shopping-cart": ShoppingCart,
utensils: Utensils,
croissant: Croissant,
coffee: Coffee,
wine: Wine,
beer: Beer,
pizza: Pizza,
apple: Apple,
cherry: Cherry,
salad: Salad,
sandwich: Sandwich,
"ice-cream": IceCream,
cake: Cake,
"cup-soda": CupSoda,
milk: Milk,
egg: Egg,
fish: Fish,
beef: Beef,
// Transport
fuel: Fuel,
train: Train,
car: Car,
"car-taxi": Car, // Using Car as fallback for car-taxi
"car-key": Key, // Using Key as fallback
parking: SquareParking,
bike: Bike,
plane: Plane,
bus: Bus,
ship: Ship,
sailboat: Sailboat,
truck: Truck,
"car-front": CarFront,
"circle-parking": CircleParking,
"train-front": TrainFront,
// Logement
home: Home,
zap: Zap,
droplet: Droplet,
hammer: Hammer,
sofa: Sofa,
refrigerator: Refrigerator,
"washing-machine": WashingMachine,
lamp: Lamp,
"lamp-desk": LampDesk,
armchair: Armchair,
bath: Bath,
"shower-head": ShowerHead,
"door-open": DoorOpen,
fence: Fence,
trees: Trees,
flower: Flower,
leaf: Leaf,
sun: Sun,
snowflake: Snowflake,
wind: Wind,
thermometer: Thermometer,
// Santé
pill: Pill,
stethoscope: Stethoscope,
hospital: Hospital,
glasses: Glasses,
dumbbell: Dumbbell,
sparkles: Sparkles,
heart: Heart,
"heart-pulse": HeartPulse,
activity: Activity,
syringe: Syringe,
bandage: Bandage,
brain: Brain,
eye: Eye,
ear: Ear,
hand: Hand,
footprints: Footprints,
"person-standing": PersonStanding,
// Loisirs
tv: Tv,
music: Music,
film: Film,
gamepad: Gamepad,
book: Book,
ticket: Ticket,
clapperboard: Clapperboard,
headphones: Headphones,
speaker: Speaker,
radio: Radio,
camera: Camera,
image: Image,
palette: Palette,
brush: Brush,
"pen-tool": PenTool,
scissors: Scissors,
drama: Drama,
"party-popper": PartyPopper,
// Sport
trophy: Trophy,
medal: Medal,
target: Target,
volleyball: Volleyball,
// Shopping
shirt: Shirt,
smartphone: Smartphone,
package: Package,
"shopping-bag": ShoppingBag,
store: Store,
gem: Gem,
watch: Watch,
sunglasses: SunGlasses,
crown: Crown,
laptop: Laptop,
monitor: Monitor,
keyboard: Keyboard,
mouse: Mouse,
printer: Printer,
"tablet-smartphone": TabletSmartphone,
headset: Headset,
// Services
wifi: Wifi,
repeat: Repeat,
landmark: Landmark,
shield: Shield,
"heart-pulse": HeartPulse,
receipt: Receipt,
"file-text": FileText,
mail: Mail,
phone: Phone,
"message-square": MessageSquare,
send: Send,
globe: Globe,
cloud: Cloud,
server: Server,
lock: Lock,
unlock: Unlock,
settings: Settings,
// Finance
"piggy-bank": PiggyBank,
banknote: Banknote,
wallet: Wallet,
"hand-coins": HandCoins,
undo: Undo,
coins: Coins,
"credit-card": CreditCard,
building: Building,
building2: Building2,
"trending-up": TrendingUp,
"trending-down": TrendingDown,
"bar-chart": BarChart,
"pie-chart": PieChart,
"line-chart": LineChart,
calculator: Calculator,
percent: Percent,
"dollar-sign": DollarSign,
euro: Euro,
// Voyage
bed: Bed,
luggage: Luggage,
map: Map,
"map-pin": MapPin,
compass: Compass,
mountain: Mountain,
tent: Tent,
palmtree: Palmtree,
umbrella: Umbrella,
globe2: Globe2,
flag: Flag,
// Famille
"graduation-cap": GraduationCap,
baby: Baby,
"paw-print": PawPrint,
users: Users,
user: User,
"user-plus": UserPlus,
dog: Dog,
cat: Cat,
bird: Bird,
rabbit: Rabbit,
// Autre
wrench: Wrench,
"heart-handshake": HeartHandshake,
gift: Gift,
@@ -119,6 +401,37 @@ const iconMap: Record<string, LucideIcon> = {
"help-circle": HelpCircle,
tag: Tag,
folder: Folder,
key: Key,
star: Star,
bookmark: Bookmark,
clock: Clock,
calendar: Calendar,
bell: Bell,
"alert-triangle": AlertTriangle,
info: Info,
"check-circle": CheckCircle,
"x-circle": XCircle,
plus: Plus,
minus: Minus,
search: Search,
trash: Trash,
edit: Edit,
download: Download,
upload: Upload,
share: Share,
link: Link,
paperclip: Paperclip,
archive: Archive,
box: Box,
boxes: Boxes,
container: Container,
briefcase: Briefcase,
education: Education,
award: Award,
lightbulb: Lightbulb,
flame: Flame,
rocket: Rocket,
atom: Atom,
};
// Get all available icon names